我有一个循环遍历 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/