私は現在、100% C でプログラムされた私の CGI Web サイトでディレクトリトラバーサルに dirent.h と ftw.h を使用しています。それらがプロセスセーフかどうかはわかりません。私のサイトにいる間、さまざまなユーザーが互いに干渉しますか?
この目的のためにどの機能をお勧めしますか?
たとえば、複数のプロセスがftw()
同じディレクトリ ツリーを同時にウォークするために使用しても安全です。
ただし、別のプロセスが同じディレクトリ ツリー構造を更新(ディレクトリの追加、削除、または名前の変更)しているときに、あるプロセスがディレクトリ ツリーをたどることは必ずしも安全ではありません。このような状況の場合、CGI プロセスでアドバイザリ ロックを使用する必要がありますflock()
(共有ディレクトリ ツリーのルートに空のロックファイルを 1 つだけ配置することもできます。ツリーをたどるプロセスは共有ロックを取得する必要があります)。そのロックファイルで、ツリーを変更したいプロセスはロックファイルで排他ロックを取得する必要があります)。
おそらく、プロセスセーフではなく「スレッドセーフ」を意味しています。プロセスは (通常) 別々のメモリ空間に存在するため、すべての libc 呼び出しは Linux ではプロセス セーフです。一方、readdir
コンテキストの内部静的ストレージを保持するため、スレッドセーフではありません。その場合に使用readdir_r
します (_r は再入可能を意味します)。の他の関数はdirent.h
、デフォルトで再入可能です。