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



我正在尝试用C编写一个程序,它将从/proc/stat读取,等待一秒钟,然后在一秒钟后再次从/proc/stat;当前";CPU使用情况,以及每个核心的使用情况。我认为最简单的方法是将/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(newfile, con0);

此外,您正在为con0分配内存,但尚未向该缓冲区写入任何内容。如果要将/proc/stat保存到文件中,则在写入临时文件之前,需要读取该文件并将其复制到con0中。

另请参阅:

http://www.cplusplus.com/reference/cstdio/fprintf/

http://www.cplusplus.com/reference/cstdio/fopen/

最新更新