Jon*_*nzi 6 c unix pid stat proc
您好,我需要有关具有某些 PID 的进程的以下信息:
名称、ppid、状态、#ofOpenFiles、#ofThreads
我知道 /proc/pid/stat 文件的示例如下:
15(看门狗/1) S 2 0 0 0 -1 69239104 0 0 0 0 0 69 0 0 -100 0 1 0 6 0 0 18446744073709551615 0 0 0 0 0 0 0 2147483647 0 1844674407370 9551615 0 0 17 1 99 1 0 0 0 0 0 0 0 0 0 0 0
我当前尝试解析此类文件:
FILE *fp;
char buff[255];
fp= fopen("/proc/123/stat", "r");
if(fp == NULL){
}else{
fscanf(fp, "%d %s %c %d %d %d %d %d %u %lu ....", &pid, &name, &ppid......)
fclose(fp);
}
Run Code Online (Sandbox Code Playgroud)
我觉得这个方法不太好。这个怎么做?
您描述的解决方案看起来不错(特别是使用@kaylum 的*格式说明符的想法)。请注意,您可以多次使用同一变量来忽略参数:
fscanf(fp, "%d %s %c %d %d %d %d %d %u %lu ...", &pid, &name, &ppid, &dummy, &dummy, &dummy, ...);
Run Code Online (Sandbox Code Playgroud)
您还可以查看按strtok标记读取每一行“标记”。您可以使用它创建一个返回char*类似于另一个问题中的数组的函数,并获取第 i 个元素(进行所有正确NULL和大小检查)。
编辑:如果文件名包含空格,那么您必须使用正则表达式或使用例如手动解析字符串以strtok()检测正确的格式。