在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); }用sscanf
void 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 函數用法
沒有留言:
張貼留言