3

我需要获取文件描述符以在 ioctl() 调用中使用 Linux 中的以太网端口。不知道该怎么做。

4

2 回答 2

3

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

从文档:

Linux 支持一些标准的 ioctl 来配置网络设备。它们可以用在任何套接字的文件描述符上,不管是什么系列或类型。它们传递一个 ifreq 结构:

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

查看man 7 netdevice更多信息,或者如果您没有安装适当的文档包,请参见此处manpages-dev(提示,该包通常命名为or manpages-devel,具体取决于您的发行版)

您还可以查看net-tools包的源代码,根据您的发行版,它的名称可能会有所不同。那是ifconfig(Debian / Ubuntu here)的来源。

抱歉最初的含糊不清,我以为您正在尝试配置特殊的多功能设备(现在不知道为什么,可能是睡眠不足)。

于 2010-06-15T17:57:45.243 回答
1

你可以做这样的事情fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP)

用于strace查看 ifconfig调用的函数。

于 2010-06-15T18:11:33.690 回答