参考文章:
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_APPLETALK | Apple Computer Inc. Appletalk network,苹果计算机公司Appletalk网络 |
AF_INET | Internet domain ,互联网域 |
AF_PUP | Xerox Corporation PUP internet ,施乐公司PUP互联网 |
AF_UNIX | Unix 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