便携式方式从stdin读取数据而不会阻塞

时间:2013-01-11 13:35:26

标签: c asynchronous stream stdin

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

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

我也不确定这一点,但有some forum posts他们说select()在实践中不适用于Windows。

1 个答案:

答案 0 :(得分:5)

select()poll()是POSIX方式,但它们无法在Windows上用于非套接字。

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

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