2017-02-20 390 views
0

我嘗試使用c解析/ proc/net/dev中的txBytes,rxBytes,rxPackets,txPackets。產出不像我預期的那樣。這裏是我的代碼使用c從/ proc/net/dev解析txBytes,rxBytes,rxPackets,txPackets使用c

while (fgets(buf, sizeof(buf), file) != NULL) { 
conv = sscanf(buf, "%[^:]: %Lu %*u %*u %*u %*u %*u %*u %*u %Lu %*u %*u %*u  %*u %*u %*u %*u", ifname, &rxBytes, &txBytes); 
    printf("%s %Lu %Lu\n",ifname,rxBytes,txBytes); 
    conv = 0; 
    ifacesCount++; 
} 

這裏的核心文件是的/ proc /淨的/ dev和BUF大小爲500我想提取接口名稱,TXBYTES,RXBYTES,rxPackets,txPackets

+0

解析邏輯在哪裏可以請你分享,以及你期望的。請更詳細一些,幫助社區瞭解他們如何幫助你。 –

+0

http://stackoverflow.com/help/how-to-ask請重新設定您的問題,告訴我們您嘗試了什麼,如何以及發生了什麼,您認爲哪些是錯誤的以及我們如何提供幫助。 –

+0

沒有buf的大小,以及如何分配buf,這無法解決。 –

回答

1

從您的代碼示例,我寫了下面:

#include <stdio.h> 

int main() { 
    FILE *fp = fopen("/proc/net/dev", "r"); 
    char buf[200], ifname[20]; 
    unsigned long int r_bytes, t_bytes, r_packets, t_packets; 

    // skip first two lines 
    for (int i = 0; i < 2; i++) { 
     fgets(buf, 200, fp); 
    } 

    while (fgets(buf, 200, fp)) { 
     sscanf(buf, "%[^:]: %lu %lu %*lu %*lu %*lu %*lu %*lu %*lu %lu %lu", 
       ifname, &r_bytes, &r_packets, &t_bytes, &t_packets); 
     printf("%s: rbytes: %lu rpackets: %lu tbytes: %lu tpackets: %lu\n", 
       ifname, r_bytes, r_packets, t_bytes, t_packets); 
    } 

    fclose(fp); 
    return 0; 
} 

此輸出:

羅:rbytes已:22975300個rpackets:459506個TB的:22975300噸包:459506
wlp2s0:rbytes已:2419131107個rpackets:1820658個TB的:109438292個tpackets:877583
ENO1:rbytes已:15984078個rpackets:55391個TB的:3078636個tpackets:13019

希望幫助你:)

+0

我想跳過前兩行。我錯過了 –