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

sas*_*alm 0 c stdin asynchronous stream

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

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

此外,我不确定这一点,但有一些论坛帖子,他们说select()在实践中不适用于Windows.

Ant*_*nko 5

select()并且poll()是POSIX方式,但它们不能在Windows上用于非套接字.

如果Windows和Unix都是你的目标,那就没有足够的便携性了.更重要的是,在Windows上你必须分别处理管道和控制台手柄:PeekNamedPipe()管道PeekConsoleInput()和控制台(即使你没有ENABLE_LINE_INPUT,它也很复杂,如果你这样做,就转向真正的蠕虫).

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