微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Windows中,如何让非阻塞的标准inputredirect的pipe道?

我有一个Windows C程序,通过redirect的stdinpipe道获取其数据,有点像这样:

./some-data-generator | ./myprogram

问题是我需要能够以非阻塞的方式从stdin读取。 原因是(1)input是一个数据stream,没有EOF ,(2)程序需要随时中止它的stdin-读线程。 当没有数据时fread块,所以这使得它非常困难。

在Unix中这是没有问题的,因为你可以用fcntl和O_NONBLOCK设置文件描述符的阻塞模式。 但是, fcntl在Windows上不存在。

我试过使用SetNamedPipeHandleState :

什么是骨骼的XYZ坐标的性质是什么?

连接到一个在IIS上运行的代码隐藏的COM接口?

WMI调用方法

C ++ RAII问题

多核编程:做什么是必要的?

DWORD mode= PIPE_READMODE_BYTE|PIPE_NowAIT; BOOL ok= SetNamedPipeHandleState(GetStdHandle(STD_INPUT_HANDLE),&mode,NULL,NULL); DWORD err= GetLastError();

但是这个失败与ERROR_ACCESS_DENIED ( 0x5 )。

我不知道还有什么要做的。 这实际上是不可能的(!)还是只是高度混淆? networking上的资源对于这个特殊问题来说相当稀less。

如何执行多个“.ext”与在C#中做的关联应用程序

在WP 8.1上parsing推送

为什么我的程序在启动之前崩溃?

如何在C#中使用Windows服务调用Windows应用程序?

在Windows 7上启用MysqL 5中的查询日志

订单评估,检查是否有输入准备阅读:

对于控制台模式,可以使用GetNumberOfConsoleInputEvents()。

对于管道重定向,可以使用PeekNamedPipe()

您可以使用异步I / O从句柄读取,如ReadFileEx()WIN32调用。 使用CancelIo()在没有输入的情况下终止读取。

请参阅MSDN: http://msdn.microsoft.com/zh-cn/library/aa365468(VS.85).aspx

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐