0

proc ファイル システム内のディレクトリをループする関数があります。次に、この関数はプロセス名を grep してその PID を見つけ、この PID を呼び出し元の関数に返します。

関数は正常に動作しているように見えますが、一部のディレクトリ (プロセスに対応) を開いているときに 1 つまたは 2 つのケースで失敗します。これが私がやっていることです。

 dr = readdir(dp); 

dr をループし
ます ディレクトリとプロセス名の dr タイプを確認
し、プロセス名を文字列と比較します。

 Return PID in case of a match 
 dr = readdir(dp);
 end loop 



main() {
   DIR *d;
   struct dirent *e;

   e=malloc(sizeof(struct dirent));
   d=opendir("/proc");

   while ((e = readdir(d)) != NULL) {
      printf("%d %s\n", e->d_type, e->d_name);
   }

   closedir(d);
}
4

1 に答える 1

3

おそらく問題は、内部のファイルをチェックアウトする前にディレクトリが消えてしまうことです。これは、ディレクトリ リストに移動したときに実行されていたプロセスが、そのプロセス情報を読み取るときに実行されていないことを意味します。これは通常のことであり、アプリケーションで (理想的には静かに) 処理する必要があります。

また、あなたが提供したコード スニペットは、上記で説明したことを確実に実行しません。おそらく単純化のために編集したのでしょうが、そうすることで、何が間違っているのかについての手がかりを取り除きました.

于 2012-10-15T06:17:46.580 に答える