有没有一种可移植的方式来读取数据stdin
而不阻塞,或者检查数据是否可以在没有阻塞的情况下读取?请记住,标准输入可以从另一个进程通过管道传输,而不仅仅是终端/键盘输入。
最好只使用 stdlib.h 或 stdio.h 中的 ANSI C 函数,但使用 POSIX 函数也非常可移植。
我也不确定这一点,但有一些论坛帖子他们说select()
实际上在 Windows 上不起作用。
有没有一种可移植的方式来读取数据stdin
而不阻塞,或者检查数据是否可以在没有阻塞的情况下读取?请记住,标准输入可以从另一个进程通过管道传输,而不仅仅是终端/键盘输入。
最好只使用 stdlib.h 或 stdio.h 中的 ANSI C 函数,但使用 POSIX 函数也非常可移植。
我也不确定这一点,但有一些论坛帖子他们说select()
实际上在 Windows 上不起作用。
select()
并且poll()
是 POSIX 方式,但它们不适用于非套接字的 Windows。
如果 Windows 和 Unix 都是您的目标,那么就没有足够的便携性。更重要的是,在 Windows 上,您必须分别处理管道和控制台句柄:PeekNamedPipe()
对于管道,PeekConsoleInput()
对于控制台(即使您没有ENABLE_LINE_INPUT
,后者也相当复杂,如果有的话,请转向真正的蠕虫罐头)。
在单独的线程中进行输入更具可移植性,即使 pthread 与 Windows 存在差异(并且有 pthread-for-Win32 库可以消除这些差异)。