【发布时间】:2012-10-15 05:41:51
【问题描述】:
我有一个循环遍历 proc 文件系统中的目录的函数。然后这个函数 grep 一个进程名来查找它的 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);
}
【问题讨论】:
-
当您说“在一两种情况下失败”时,您到底是什么意思?
-
别忘了现在的 C 期望函数的返回类型,例如
main(),返回类型应该是int。除非你有一个 C99 或更新的编译器,它应该坚持在main()上显式返回int类型,否则从main()的末尾删除return(0);或等效是不安全的; C89 没有给你那个执照。当然,/proc中的每个“全数字”目录名称都是一个 PID;您无需访问目录中的任何内容即可确定向用户报告的 PID。 -
我知道这一点,但你的意思不是关注问题的核心。
-
@Chimera:当我在无限循环中运行此程序时,有时会在几个小时后出现错误,即使我尝试 grep 的进程运行正常。