我有一个循环遍历proc文件系统中目录的函数。然后,此函数会使进程名称变为gre来查找其PID并将此PID返回给调用函数。
该函数似乎工作正常但在打开某个目录(对应于进程)时在一两个案例中失败。
这就是我在做的事。
dr = readdir(dp);
循环通过博士
检查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);
}
答案 0 :(得分:3)
据推测,问题是目录在你检查里面的文件之前就消失了。这意味着当您去目录列表时运行的进程在您阅读其进程信息时不再运行。这是正常的,你必须在应用程序中处理(理想情况下是静默的)。
此外,您提供的代码段肯定不会执行您在上面描述的内容。大概是你为了简单起见而编辑了它,但是这样做就删除了你可能做错的任何线索。