0

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

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

我也不确定这一点,但有一些论坛帖子他们说select()实际上在 Windows 上不起作用。

4

1 回答 1

5

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

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

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

于 2013-01-11T13:57:05.023 回答