如何在Windows上无阻塞地读取可用输入

时间:2010-09-04 19:41:26

标签: c windows input nonblocking

在Linux上,我可以在不阻止进程的情况下读取可用输入:

fcntl(STDIN_FILENO, F_SETFL, fcntl(STDIN_FILENO, F_GETFL, 0) | O_NONBLOCK )
char buf[n];
int r = fread(buf, 1, n, stdin);
if (r == 0){
    printf("nothing\n");
}
else {
    printf("read: ");
    fwrite(buf, 1, r, stdout);
    printf("\n");
}

输入源可以是任何内容,例如文件,终端或管道。

如何在Windows XP上执行此操作?

感谢。

2 个答案:

答案 0 :(得分:0)

您可以通过将FILE_FLAG_OVERLAPPED传递给CreateFile()来在Windows上实现此目的。它看起来与Linux看起来并不相同,可能会有一些细微的差别,但它实现了同样的目的。

查看Synchronous vs. Asynchronous IO上的MSDN页面,其中提供了有关各种选项的更多详细信息。

答案 1 :(得分:0)

为什么不从第二个线程读取输入?根据您的具体情况,这可能是一种更简单的方法,而不是使用非阻塞IO。