Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
(Ubuntu)C使用/proc/stat计算CPU使用率_C_Cpu Usage - Fatal编程技术网

(Ubuntu)C使用/proc/stat计算CPU使用率

(Ubuntu)C使用/proc/stat计算CPU使用率,c,cpu-usage,C,Cpu Usage,我正在尝试用C编写一个程序,它将从/proc/stat读取数据,等待一秒钟,然后再从/proc/stat读取一秒钟,然后做一些数学运算,找出“当前”CPU使用情况,以及每个核心的使用情况。我认为最简单的方法是将/proc/stat的结果保存到一个文件中,并为/proc/stat的第二个“状态”保存第二个文件。然而,出于某种原因,我不知道为什么我的两个文件都没有被创建 int main() { FILE *state0; FILE *state1; state0 = fop

我正在尝试用C编写一个程序,它将从/proc/stat读取数据,等待一秒钟,然后再从/proc/stat读取一秒钟,然后做一些数学运算,找出“当前”CPU使用情况,以及每个核心的使用情况。我认为最简单的方法是将/proc/stat的结果保存到一个文件中,并为/proc/stat的第二个“状态”保存第二个文件。然而,出于某种原因,我不知道为什么我的两个文件都没有被创建

int main() {
    FILE *state0;
    FILE *state1;
    state0 = fopen("/proc/stat", "w+");
    delay();
    state1 = fopen("/proc/stat", "w+");

    char *con0 = malloc(500);
    fprintf(state0, con0);

    fclose(state0);
    fclose(state1);

    return 0;
}

非常感谢您的帮助

当您试图通过调用来保存文件时,问题是:

fprintf(state0,con0);
您正试图将分配在
con0
的内存写入
state0
,它是指向
/proc/stat
的指针

这当然会失败,因为您没有写入
/proc/stat
的权限,而您不应该这样做

如tadman所述,要打开这些文件进行读取,您需要在
“r”
模式下打开这些文件:

FILE *state0;
FILE *state1;
state0 = fopen("/proc/stat", "r");
delay();
state1 = fopen("/proc/stat", "r");
您要做的是创建一个单独的文件,例如:

FILE*newfile;
newfile=fopen(“/tmp/procstattemp”,“w”);
并使用以下命令写入此文件:

fprintf(新文件,con0);
另外,您正在为
con0
分配内存,但尚未向该缓冲区写入任何内容。 如果要将
/proc/stat
保存到文件中,则需要先读取该文件并将其复制到
con0
中,然后再写入临时文件

另见:


您通常可以只
frewind
。数据是在读取时生成的,因此您必须提前读取,然后等待。
“w+”
模式为“append”,这没有任何意义。您需要
“r”