Android P中判断网卡接口是否存在

参考文章:
https://docs.oracle.com/cd/E19620-01/805-4041/6j3r8iu2l/index.html

https://www.gnu.org/software/libc/manual/html_node/Communication-Styles.html

#define  NET_NAME   "vnet0"

int check_nic() {
    struct ifreq ifr;
    int skfd = socket(AF_INET, SOCK_DGRAM, 0);
    int ret = 0;

    if(skfd == -1) {
        ret = -1;
        goto END;
    }

    strcpy(ifr.ifr_name, NET_NAME);
    if (ioctl(skfd, SIOCGIFFLAGS, &ifr) < 0) {
        ret = -1;
        goto END;
    }
    if(ifr.ifr_flags & IFF_RUNNING)
        ret = 0;  // 网卡已插上网线
    else ret = -1;

END:
    close(skfd);
    return ret;
}

socket()方法用法,在指定的域和指定的类型中创建一个套接字。

项目Value
AF_APPLETALKApple Computer Inc. Appletalk network,苹果计算机公司Appletalk网络
AF_INETInternet domain ,互联网域
AF_PUPXerox Corporation PUP internet ,施乐公司PUP互联网
AF_UNIXUnix file system ,Unix文件系统

域AF_INET 和AF_UNI支持一下三种套接字类型

项目Value
SOCK_STREAM流套接字(TCP),顺序的,可靠的,双向的基于连接的数据流
SOCK_DGRAM数据报套接字(UDP),
SOCK_RAW提供原始网络协议访问。
//创建一个互联网域类型的,UDP方式的数据报套接字
int skfd = socket(AF_INET, SOCK_DGRAM, 0);
#define SIOCGIFFLAGS 0x8913
//获取网络接口,SIOCGIFFLAGS为ioctl获取网络接口的flag
ioctl(skfd, SIOCGIFFLAGS, &ifr)

用ifconfig去启动一个不存在的网络接口时,会提示8913错误

# ifconfig eth0 up
ifconfig: ioctl 8913: No such device
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sunxiaolin2016

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值