我有一个Windows C程序,通过redirect的stdinpipe道获取其数据,有点像这样:
./some-data-generator | ./myprogram
问题是我需要能够以非阻塞的方式从stdin读取。 原因是(1)input是一个数据stream,没有EOF ,(2)程序需要随时中止它的stdin-读线程。 当没有数据时fread块,所以这使得它非常困难。
在Unix中这是没有问题的,因为你可以用fcntl和O_NONBLOCK设置文件描述符的阻塞模式。 但是, fcntl在Windows上不存在。
我试过使用SetNamedPipeHandleState :
什么是骨骼的XYZ坐标的性质是什么?
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应用程序?
订单评估,检查是否有输入准备阅读:
对于控制台模式,可以使用GetNumberOfConsoleInputEvents()。
对于管道重定向,可以使用PeekNamedPipe()
您可以使用异步I / O从句柄读取,如ReadFileEx()WIN32调用。 使用CancelIo()在没有输入的情况下终止读取。
请参阅MSDN: http://msdn.microsoft.com/zh-cn/library/aa365468(VS.85).aspx
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。