gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 12:00:56 29 4
gpt4 key购买 nike

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

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

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

最佳答案

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

现在,如果您将文件描述符视为文件,大多数 *nix 构造都会这样做,那么 open/read/write/close 是不够的。如果要标记文件(重命名)怎么办?如果您想等待文件可用(ioctl)怎么办?如果您想在文件关闭时终止所有内容(termios)怎么办?所有在核心读/写上下文中没有意义的“元”操作都集中在 ioctl 下;功能;等等,除非它们被频繁使用以至于它们值得拥有自己的系统调用(例如 BSD4.2 中的 flock(2) 功能)

关于sockets - 为什么 socket.c 中有 ioctl 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16663167/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com