【发布时间】:2016-01-16 19:26:42
【问题描述】:
更新: Simple Proof of Concept 解释不同的行为。
假设我使用tcgetattr 和tcsetattr 设置VMIN = 0, VTIME = 0 并删除ICANON,将终端设置为原始模式。
从标准输入对read() 的调用永远不会阻塞。我说的对吗?
我的问题是:我应该期望 stdin 上的 select() 立即返回吗?
从手册页:
select()和pselect()允许程序监视多个文件描述符,等待一个或多个文件描述符为某个类“准备好” I/O 操作(例如,可以输入)。如果可以执行相应的 I/O 操作(例如 read(2)),则认为文件描述符已准备就绪 不阻塞。
基于此,我的第一个答案是“是”。然而,实际上它在我测试过的大多数 Linux 系统上确实阻塞,但它不会在某些系统上阻塞。 这是内核错误吗? 是否建议这样使用VMIN = 0和select()?
【问题讨论】:
-
其他人可以检查(并考虑您的描述是否完整)的简短示例程序将有助于获得响应。
-
当然!我加一个。不知怎的,我之前没有看到你的消息...
-
@ThomasDickey 完成,请参阅链接。