获取以太网端口的ioctl文件描述符
只要使用开放套接字的文件描述符,使用传递给ioctl()
的ifreq
结构中的设备名称,假定您的程序具有足够的权限来执行此操作。
从文档:
Linux支持一些标准的ioctl来 配置网络设备。他们可以在任何套接字的文件 描述符上使用 ,而不管家族或 类型。他们通过了一个ifreq结构:
套接字不需要绑定到目标设备,或任何特定的家庭。任何打开的套接字fd都会(具有相应的权限)执行,只需为您的特定任务打开一个,然后等待ioctl()
返回并关闭它。
见man 7 netdevice
更多,或here如果你没有安装相应的文件包(提示,包通常命名为manpages-dev
或manpages-devel
,这取决于你的发行版)
您还可以看看net-tools
包的来源,根据您的发行版可能会有不同的命名。这是ifconfig
(Debian/Ubuntu在这里)的来源。
对不起原来的歧义,我以为你想配置一个特殊的多功能设备(不知道为什么现在,也许缺乏睡眠)。
你可以做这样的事情fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP)
使用strace
,看看有什么功能使用ifconfig电话。
那个特定的ioctl()并不关心这个系列,或者即使套接字被绑定到有问题的接口。 – 2010-06-15 18:16:43
你是对的,但是这个调用被ifconfig eth0
我想你的意思是“ifconfig **调用什么函数”?不管怎样,任何开放的套接字都可以工作。 'magic'是在初始化的'ifreq'结构的地址处指定的,通过'ioctl()'传递给内核。 – 2010-06-15 18:29:27
对不起,不知道我打开的文件在哪里。只是认为使用ioctl会比解析ifconfig容易。 – Terminal 2010-06-15 18:00:49
@Terminal - 为了清晰起见编辑我的答案。 – 2010-06-15 18:10:39
@Terminal - 一般来说,是的,这取决于你在做什么。 – 2010-06-15 18:22:35