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

发布于 2024-09-18 02:11:32 字数 376 浏览 5 评论 0原文

在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

墨离汐 2024-09-25 02:11:32

为什么不从第二个线程读取输入?根据您的情况,这可能是一种更简单的方法,而不是使用非阻塞 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.

你的往事 2024-09-25 02:11:32

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

查看 MSDN 页面 同步与. 异步 IO 为您提供有关各种选项的更多详细信息。

You can achieve this on Windows by passing FILE_FLAG_OVERLAPPED to CreateFile(). 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文