如何在 Windows 上不阻塞地读取可用输入
在 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 上执行此操作?
谢谢。
On Linux, I can read available input without blocking the process:
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");
}
The input origin can be anything, such as a file, a terminal or a pipe.
How can I do it on Windows XP?
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
为什么不从第二个线程读取输入?根据您的情况,这可能是一种更简单的方法,而不是使用非阻塞 IO。
Why not read the input from a second thread? Depending on your situation, it might be a much easier approach, instead of using non-blocking IO's.
您可以在 Windows 上通过将
FILE_FLAG_OVERLAPPED
传递到CreateFile()
。它看起来与 Linux 不太一样,可能有一些细微的差别,但它实现了相同的目标。查看 MSDN 页面 同步与. 异步 IO 为您提供有关各种选项的更多详细信息。
You can achieve this on Windows by passing
FILE_FLAG_OVERLAPPED
toCreateFile()
. It doesn't quite look the same as Linux and there may be some slight differences but it achieves the same thing.Take a look at the MSDN page on Synchronous vs. Asynchronous IO which provides you with even more detail on the various options.