【问题标题】:Portable way to read data from stdin without blocking从标准输入读取数据而不阻塞的便携式方法
【发布时间】:2013-01-11 13:35:25
【问题描述】:

是否有一种可移植的方式从stdin 读取数据而不阻塞,或者检查数据是否可以在不阻塞的情况下读取?请记住,stdin 可以从另一个进程通过管道传输,而不仅仅是终端/键盘输入。

最好只使用 stdlib.h 或 stdio.h 中的 ANSI C 函数,但使用 POSIX 函数也非常可移植。

我也不确定这一点,但有 some forum posts 他们说 select() 在实践中无法在 Windows 上运行。

【问题讨论】:

标签: c asynchronous stream stdin


【解决方案1】:

select()poll() 是 POSIX 方式,但它们不适用于非套接字的 Windows。

如果 Windows 和 Unix 都是您的目标,那么就没有足够的便携性。更重要的是,在 Windows 上,您必须分别处理管道和控制台句柄:PeekNamedPipe() 用于管道,PeekConsoleInput() 用于控制台(即使您没有ENABLE_LINE_INPUT,后者也相当复杂,转向真正的罐头蠕虫,如果你这样做)。

在单独的线程中进行输入更便于移植,即使 pthread 与 Windows 存在差异(并且有 pthread-for-Win32 库可以消除这些差异)。

【讨论】:

    猜你喜欢
    • 2018-07-26
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多