是否有可移植的方式从stdin
无阻塞地读取数据,或检查数据是否可以无阻塞地读取?请记住,stdin可以通过另一个进程进行管道传输,而不仅仅是终端/键盘输入。
最好只使用stdlib.h或stdio.h中的ANSI C函数,但使用POSIX函数也非常便携。
我也不确定这一点,但有some forum posts他们说select()
在实践中不适用于Windows。
答案 0 :(得分:5)
select()
和poll()
是POSIX方式,但它们无法在Windows上用于非套接字。
如果Windows和Unix都是你的目标,那就没有足够的便携性了。更重要的是,在Windows上你必须单独处理管道和控制台句柄:PeekNamedPipe()
用于管道,PeekConsoleInput()
用于控制台(即使你没有ENABLE_LINE_INPUT
,后者也相当复杂如果你这样做,转向真正的蠕虫病毒。)
在单独的线程中进行输入更具可移植性,即使有pthread与Windows的差异(并且还有pthread-for-Win32库来消除这些差异)。