gpt4 book ai didi

c - *nix select 和 exceptfds/errorfds 语义

转载 作者:太空狗 更新时间:2023-10-29 16:19:59 24 4
gpt4 key购买 nike

select系统调用采用 3 个文件描述符集来监视文件描述符上的可读/可写和“异常”的 fds。

我的选择 man page没有太多关于 exceptfd 描述符集的说明。它是干什么用的;它可以并且将在文件描述符上通知什么样的异常?

我假设这对于描述符类型可能是不同的……无论是 TCP 套接字、管道、tty 等)。有没有人知道关于select 可以报告不同类型的描述符的错误类型的更多信息?

最佳答案

有时认为需要exceptfds 来检测错误,但这是一种误解。错误将在 readfds 中标记。尽管 POSIX 需要它(甚至调用参数 errorfds),但它取决于操作系统是否也在 exceptfds 中标记错误。实际上,仅当您关心异常情况时才需要此参数,但很少需要检测这些情况。

什么是异常条件取决于文件描述符的种类,但到目前为止最常见的用途是在 TCP 套接字上,它指示可以使用 recv( )MSG_OOB 标志。然而,TCP 带外数据有许多怪癖(例如,只有 1 个字节可能是突出的),因此很少使用。

在最近的 Linux 内核中,exceptfds 可用于检测某些 sysfs 属性何时更改。可以通过读取 /sys 下的相应文件来读取属性的当前值,文件描述符上的 select() 将标记 exceptfds 当属性改变时。然而,这目前仅适用于某些属性和安装更改 (/proc/mounts)。

还有一些设备驱动程序会使用 exceptfds 标记某些特定于设备的条件。

关于c - *nix select 和 exceptfds/errorfds 语义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1342712/

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