您好我需要以下有关某些PID的进程的信息:
name,ppid,state,#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 18446744073709551615 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);
}
我找不到这个非常好的方法。怎么做?
答案 0 :(得分:1)
您描述的解决方案看起来不错(特别是使用@ kaylum的*
格式说明符的概念)。请注意,您可以多次使用相同的变量来忽略参数:
fscanf(fp, "%d %s %c %d %d %d %d %d %u %lu ...", &pid, &name, &ppid, &dummy, &dummy, &dummy, ...);
您还可以查看strtok
以阅读每一行"令牌"通过令牌。您可以使用它来创建一个函数,返回char*
中的NULL
数组,并获取第i个元素(使用所有正确的strtok()
和大小检查)。
编辑:如果文件名包含空格,那么您必须使用正则表达式或手动解析字符串,例如this
检测正确的格式。