阅读proc统计信息

问题描述 投票:3回答:1

您好我需要有关一些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);
           }

我没有找到这个非常好的方法。这该怎么做?

c unix pid proc stat
1个回答
1
投票

您描述的解决方案看起来很好(特别是使用@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()检测正确的格式。

© www.soinside.com 2019 - 2024. All rights reserved.