c - select() 可以防止 read() 被中断吗?
问题描述
根据 POSIX,如果我们使用 aselect()
来决定何时可以使用 read 而不阻塞,是否有可能read()
被信号中断并返回EINTR
?
解决方案
您的读取肯定会被信号中断。所有这些select
保证是read
不会被阻止。对于信号可能的中断,它绝对没有什么可说的。
从手册页:
select() 允许程序监视多个文件描述符,等到一个或多个文件描述符“准备好”用于某种类型的 I/O 操作(例如,可能的输入)。如果可以在没有阻塞的情况下执行相应的 I/O 操作(例如 read(2) 或足够小的 write(2)),则认为文件描述符已准备就绪。
何况,怎么能select
预知未来呢?它知道现在套接字有一些可以读取的数据。当您尝试读取此数据时,它如何告诉您是否会发出信号?
推荐阅读
- ios - 使用 RequestPermissionAsync 请求相机权限时,Xamarin iOS 应用程序崩溃
- python - Python selenium web 抓取数据到 csv 导出
- date - MS Access:将日期“2020 年 12 月 3 日”导入“日期/时间”列会出错,我如何让它识别出它是一个日期?
- python - 如何使导入的变量透明地调用函数
- reactjs - 如何从 Reactjs 网站复制导航
- javascript - 猫鼬(建造者模式)链式方法如何在幕后工作
- kotlin - Kotlin 聚合连续列表元素
- python - 为什么当我用 K-means 进行 4 个聚类时,我只有一个 intertia 而不是 4 个?
- python - Pyinstaller:制作了一个 exe 但无法正常工作。如何修复这些错误
- javascript - 侧边菜单打开时如何触发功能 | 离子反应