0

我有一个循环遍历proc文件系统中的目录的函数。然后这个函数 grep 一个进程名来找到它的 PID 并将这个 PID 返回给调用函数。

该功能似乎工作正常,但在打开某些目录(对应于进程)时在一两种情况下失败。这就是我正在做的事情。

 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

据推测,问题在于目录在您检查其中的文件之前就消失了。这意味着当您去目录列表时正在运行的进程在您去读取它的进程信息时不再运行。这是正常的,您必须在应用程序中处理(最好是静默处理)。

Also, the code snippet you provided definitely does not do what you described above it. Presumably you edited it for simplicity, but in doing so you removed any clues as to what you might be doing wrong.

于 2012-10-15T06:17:46.580 回答