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