1

私は現在、100% C でプログラムされた私の CGI Web サイトでディレクトリトラバーサルに dirent.h と ftw.h を使用しています。それらがプロセスセーフかどうかはわかりません。私のサイトにいる間、さまざまなユーザーが互いに干渉しますか?

この目的のためにどの機能をお勧めしますか?

4

2 に答える 2

1

たとえば、複数のプロセスがftw()同じディレクトリ ツリーを同時にウォークするために使用しても安全です。

ただし、別のプロセスが同じディレクトリ ツリー構造を更新(ディレクトリの追加、削除、または名前の変更)しているときに、あるプロセスがディレクトリ ツリーをたどることは必ずしも安全ではありません。このような状況の場合、CGI プロセスでアドバイザリ ロックを使用する必要がありますflock()(共有ディレクトリ ツリーのルートに空のロックファイルを 1 つだけ配置することもできます。ツリーをたどるプロセスは共有ロックを取得する必要があります)。そのロックファイルで、ツリーを変更したいプロセスはロックファイルで排他ロックを取得する必要があります)。

于 2010-05-07T01:23:57.303 に答える
0

おそらく、プロセスセーフではなく「スレッドセーフ」を意味しています。プロセスは (通常) 別々のメモリ空間に存在するため、すべての libc 呼び出しは Linux ではプロセス セーフです。一方、readdirコンテキストの内部静的ストレージを保持するため、スレッドセーフではありません。その場合に使用readdir_rします (_r は再入可能を意味します)。の他の関数はdirent.h、デフォルトで再入可能です。

于 2010-05-06T18:59:50.280 に答える