在Linux上, 各個network interface的統計資料會被記錄在"/proc/net/dev"裡面
Receive/Transmit bytes分別位於第2欄與第10欄
假設經把eth0那列的string都存到buf內
用strtok來做
void eth_statistics_parser_strtok(char *buf)
{
char *ptr=NULL, *saveptr=NULL;
unsigned long tx=0, rx=0;
strtok_r(buf, ":", &saveptr);
ptr = strtok_r(NULL, " ", &saveptr);
rx = atol(ptr);
strtok_r(NULL, " ", &saveptr);
strtok_r(NULL, " ", &saveptr);
strtok_r(NULL, " ", &saveptr);
strtok_r(NULL, " ", &saveptr);
strtok_r(NULL, " ", &saveptr);
strtok_r(NULL, " ", &saveptr);
strtok_r(NULL, " ", &saveptr);
ptr = strtok_r(NULL, " ", &saveptr);
tx = atol(ptr);
printf("Rx Bytes: %d; Tx Bytes: %d\n", rx, tx);
}
用sscanfvoid eth_statistics_parser_sscanf(char *buf)
{
unsigned long tx=0, rx=0;
//sscanf(buf, "%*s%lu%*s%*s%*s%*s%*s%*s%*s%lu", &rx, &tx);
sscanf(buf, "%*[^:]:%lu%*s%*s%*s%*s%*s%*s%*s%lu", &rx, &tx);
printf("Rx Bytes: %d; Tx Bytes: %d\n", rx, tx);
}
雖然不知道有沒有比較好, 但是看起來酷很多.參考資料:
[1] sscanf 函數用法
沒有留言:
張貼留言