首页 > 解决方案 > select() 可以防止 read() 被中断吗?

问题描述

根据 POSIX,如果我们使用 aselect()来决定何时可以使用 read 而不阻塞,是否有可能read()被信号中断并返回EINTR

标签: cselectsignalslanguage-lawyerposix

解决方案


您的读取肯定会被信号中断。所有这些select保证是read不会被阻止。对于信号可能的中断,它绝对没有什么可说的。

手册页

select() 允许程序监视多个文件描述符,等到一个或多个文件描述符“准备好”用于某种类型的 I/O 操作(例如,可能的输入)。如果可以在没有阻塞的情况下执行相应的 I/O 操作(例如 read(2) 或足够小的 write(2)),则认为文件描述符已准备就绪。

何况,怎么能select预知未来呢?它知道现在套接字有一些可以读取的数据。当您尝试读取此数据时,它如何告诉您是否会发出信号?


推荐阅读