c - 遍历 proc 中的目录

标签 c linux proc

我有一个循环遍历 proc 文件系统中的目录的函数。然后,此函数会搜索进程名称以查找其 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);
}

最佳答案

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

此外,您提供的代码片段肯定不会执行您上面描述的操作。据推测,您为简单起见对其进行了编辑,但在这样做的过程中,您删除了关于您可能做错了什么的任何线索。

关于c - 遍历 proc 中的目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12889882/

相关文章:

c - 打印二维数组名称和等级

c - C 中的 size_t 是什么?

linux - Bash 脚本打印错误的值

linux - 使用 XenServer 内的 CentOS 5 无法解析主机名但 IP 地址的问题

linux - 从/proc 中获取数据而不读取文本

C:尝试释放从函数返回的 malloc'd char 数组导致错误

c - C 中数组和指针的基本行为

linux - 是否有链接器标志强制它在启动时加载所有共享库?

ruby - 将方法从一个类复制到另一个类

sql - 在c中生成动态sql