#c #cpu-usage
#c #загрузка ЦП
Вопрос:
Я пытаюсь написать программу на C, которая будет считывать данные из /proc / stat, подождите секунду, затем снова считайте из / proc / stat секунду спустя, затем выполните некоторые вычисления, чтобы найти «текущее» использование ЦП, а также использование для каждого ядра. Я думаю, что самый простой способ сделать это — сохранить результаты /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;
}
И помощь очень ценится
Комментарии:
1. Вы всегда можете просто
frewind
обычно. Данные генерируются во время чтения , поэтому вы должны прочитать заранее, а затем подождать.2.
"w "
режим «добавить», который не имеет смысла для этого. Вы хотите"r"
.
Ответ №1:
Проблема в том, что при попытке сохранить файл с помощью вызова:
fprintf(state0, con0);
Вы пытаетесь записать память , выделенную в con0
to state0
, которая является указателем на /proc/stat
.
Это, конечно, терпит неудачу, потому что у вас нет прав на запись /proc/stat
, а этого делать не следует.
Чтобы открыть эти файлы для чтения, как упоминал Тадман, вы хотите открыть файлы в "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
прежде чем записывать свой временный файл.
См . также: