通过grep,awk,sed的简单应用获取网卡信息。

本文主要通过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命令获取相对应的信息。

  

 

posted @ 2017-04-13 18:53  Prefog  阅读(918)  评论(0编辑  收藏  举报