我試圖讀取一個文件(特別是/ proc/stat)以從中獲取數據。有很多方法可以在C中執行此操作,但是(目前爲止)我使用fscanf()
。 (但是,我並不特別關注它 - 它似乎很適合我想做的事情,如果還有其他更好的方法,請提出建議)。我看到的問題是fscanf()
將讀取一行(使用特定的格式字符串),但如果將格式字符串更改爲另一行,則拒絕收集任何數據。例子使這個更清晰。fscanf匹配一行,但不是另一行,類似的行
#include <stdio.h>
char *
get_cpu_perc() {
unsigned long long cpu0_user=0;
FILE* file = fopen("/proc/stat", "r");
int fsf_ret;
fsf_ret = fscanf(file, "cpu %llu", &cpu0_user);
printf("%llu\n", cpu0_user);
printf("%d\n", fsf_ret);
return cpu0_user;
}
int
main(){
get_cpu_perc();
return 1;
}
上面的工作很好 - 它選擇以'cpu'開頭的第一個數字。我想分裂了這一點,爲每個內核總 - meanining我需要恰克的fscanf()函數調用
fscanf(file, "cpu0 %llu", &cpu0_user);
但是,我沒有得到該行的任何比賽。這可能是顯而易見的,但是當我談到C時,我非常青睞。(這不是說我不願意學習,而是我並不熟悉如何實現這一點)。
因爲這真的不是一個* nix特定的問題,所以下面是幾行代碼,它們複製了我在運行live/proc/stat時看到的行爲。如果你覺得如此傾向,你可以保存並測試它。
cpu 5885032 59114 1477054 15427556 39113 0 36078 0 0 0
cpu0 2888239 29861 682033 7814849 22952 0 24266 0 0 0
cpu1 2996792 29253 795020 7612706 16160 0 11812 0 0 0
我的問題是:如何獲取fscanf()函數來匹配第二行和第三行,而不僅僅是第一? (這可能與this question有關,但是說實話 - 我甚至沒有做任何如此奇特的東西,也沒有搞亂正則表達式,也許我錯過了什麼?)
順便說一句,你忘了關閉文件。一旦你開始從循環中調用get_cpu_perc(),這最終將導致文件描述符用完。 – wildplasser