参考文章:
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
博客介绍了socket()方法,可在指定域和类型中创建套接字,域AF_INET和AF_UNI支持三种套接字类型。还提到用ifconfig启动不存在的网络接口时,会提示8913错误,并给出了相关参考文章链接。

9879

被折叠的 条评论
为什么被折叠?



