本文主要通过shell命令来实现获取网卡信息。通过cmd_shell函数可以将运行命令后的输出返回。
int cmd_shell(char *shellcmd, char *outbuffer, int size) { FILE *stream; char buffer[size]; memset(buffer, 0, sizeof(buffer)); stream = popen(shellcmd, "r"); if (stream != NULL) { fread(buffer, sizeof(char), sizeof(buffer), stream); pclose(stream); memcpy(outbuffer, buffer, strlen(buffer) + 1); return 0; } else { outbuffer[0] = ‘\0‘; } return -1; }
一般通过 ifconfig eth0 可以获取如下的信息:
eth0 Link encap:Ethernet HWaddr 00:03:7F:C7:27:4F inet6 addr: fe80::203:7fff:fec7:274f/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:278043 errors:0 dropped:0 overruns:0 frame:0 TX packets:52163 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:46992389 (44.8 MiB) TX bytes:14020182 (13.3 MiB)
例如需要获取eth0的Rx大小。可以使用如下的shellcmd命令来获取: ifconfig eth0 | grep "RX bytes" | awk ‘{print $2}‘ | awk -F: ‘{print $2}‘
或者使用: ifconfig eth0 | grep "RX bytes" | awk ‘{print $2}‘ | sed ‘s/bytes://g‘
网卡其它具体的信息可以在 /sys/class/net/eth0/statistics/ 与 /proc/net/dev 中获取。或者使用ethtool eth0命令获取相对应的信息。
时间: 2024-10-25 00:16:08