Android C++读取网卡消耗流量的实现

Android C++读取网卡消耗流量的实现


    long getInFlowSizeForAndroidByFd(int fd)
    {
        static const char *ath0 = "wlan";

        char buf[1024*200];
        lseek(fd, 0, SEEK_SET);
        int nBytes = read(fd, buf, sizeof(buf)-1);
        if (-1 == nBytes)
        {
            perror("read error");
            return -1;
        }
        buf[nBytes] = '\0';
        //返回第一次指向ath0位置的指针
        char* pDev = strstr(buf, ath0);
        if (NULL == pDev)
        {
            printf("don't find dev %s\n", ath0);
            return -1;
        }
        char *p;
        char *ifconfig_value;
        int i = 0;
        static long rx2_tx10[2];
        /*去除空格,制表符,换行符等不需要的字段*/
        for (p = strtok(pDev, " \t\r\n"); p; p = strtok(NULL, " \t\r\n"))
        {
            i++;
            ifconfig_value = (char*)malloc(20);
            strcpy(ifconfig_value, p);
            long size = atol(ifconfig_value);
            free(ifconfig_value);
            /*获得的字符串中的第二个字段是吸收流量*/
            if (i == 2) {
                rx2_tx10[0] = size;
                break;
            }
        }

        return rx2_tx10[0];
    }

    long getInFlowSizeForAndroid() {
        int fd = open("/proc/net/dev", O_RDONLY | O_EXCL);
        if (-1 == fd) {
            printf("/proc/net/dev not exists!\n");
            return -1;
        }
        // 函数里存在多个return,需要把close放外部,避免遗漏
        int val = getInFlowSizeForAndroidByFd(fd);
        // 必须close
        close(fd);
        return val;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值