为什么在socket.c中有ioctl调用?

时间:2013-05-21 06:02:32

标签: sockets network-programming linux-kernel

试图理解为什么socket.c中有ioctl调用?我可以看到我正在使用的修改过的内核,它有一些ioctl调用,在调用时加载到所需的模块中。

我想知道为什么这些调用最终会在socket.c中出现?不是套接字类型的非设备,ioctls主要用于设备。

在这里谈论2.6.32.0大量修改的内核。

1 个答案:

答案 0 :(得分:2)

ioctl遭受其历史名称的影响。虽然最初开发用于在设备上执行I / O控制,但它具有足够通用的结构,可以在文件描述符的上下文中用于对内核的任意服务请求。文件描述符是内核提供的不透明值(只是一个int),可以与任何东西相关联。

现在,如果您处理文件描述符并将事物视为大多数* nix构造所做的文件,则打开/读取/写入/关闭是不够的。如果要标记文件(重命名)怎么办?如果你想等待文件可用(ioctl)怎么办?如果你想在文件关闭(termios)时终止所有内容怎么办?所有在核心读/写上下文中没有意义的“元”操作都集中在ioctls下; fctls;等等,除非它们如此频繁使用,以至于它们应该得到自己的系统调用(例如BSD4.2中的flock(2)功能)