Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取以太网端口的ioctl文件描述符_C_Linux_Ioctl - Fatal编程技术网

获取以太网端口的ioctl文件描述符

获取以太网端口的ioctl文件描述符,c,linux,ioctl,C,Linux,Ioctl,我需要获取在Linux中以太网端口的ioctl()调用中使用的文件描述符。不确定如何执行此操作。只要使用打开套接字的文件描述符,使用传递给ioctl()的ifreq结构中的设备名称,假设您的程序有足够的权限这样做 从文档中: Linux支持一些标准IOCTL来 配置网络设备。他们可以 可用于任何套接字的文件 描述符,不考虑族或 类型。它们传递一个ifreq结构: 套接字不需要绑定到目标设备,也不需要属于任何特定的系列。任何打开的套接字fd都可以(同样,具有适当的权限),只需为特定任务打开一个,等

我需要获取在Linux中以太网端口的ioctl()调用中使用的文件描述符。不确定如何执行此操作。

只要使用打开套接字的文件描述符,使用传递给
ioctl()
ifreq
结构中的设备名称,假设您的程序有足够的权限这样做

从文档中:

Linux支持一些标准IOCTL来 配置网络设备。他们可以 可用于任何套接字的文件 描述符,不考虑族或 类型。它们传递一个ifreq结构:

套接字不需要绑定到目标设备,也不需要属于任何特定的系列。任何打开的套接字fd都可以(同样,具有适当的权限),只需为特定任务打开一个,等待
ioctl()
返回并关闭它

有关更多信息,请参阅
man 7 netdevice
,或者如果您没有安装相应的文档包(提示,该包通常命名为
manpages dev
manpages devel
,具体取决于您的发行版)

您还可以查看
nettools
包的源代码,根据发行版的不同,该包的名称可能会有所不同。这是
ifconfig
(这里是Debian/Ubuntu)的源代码


对于最初的歧义,我很抱歉,我以为您正在尝试配置一个特殊的多功能设备(现在不确定为什么,可能是睡眠不足)。

您可以这样做
fd=socket(PF_INET,SOCK_DGRAM,IPPROTO_IP)


使用
strace
查看ifconfig调用了哪些函数。

对不起,我不确定要打开的文件在哪里。我只是认为使用ioctl比解析ifconfig更容易。@Terminal-通常,是的,它是。。取决于您正在做什么。特定的ioctl()不关心家族,甚至不关心套接字是否绑定到相关接口。您是对的,但是ifconfig eth0使用此调用在eth0上设置ip地址。我想您的意思是“ifconfig调用什么函数”?不管怎样,任何打开的插座都可以工作。“magic”是在初始化的
ifreq
结构的地址处指定的,通过
ioctl()
传递给内核。那么fd甚至需要有效吗?我可以用1作为第一个参数吗?@Terminal:Yes,
fd
必须是打开套接字的有效文件描述符。这使得内核知道将您的
ioctl()
传递到套接字
ioctl()
实现,而不是其他类型文件的无数其他
ioctl()
实现。