要从管道里ReadFile 读出信息需要先关闭其hWrite句柄,要不然就卡在哪了,这是为什么?关闭之后再怎么往里写东西,做交互呀?

解决方案 »

  1.   

    本帖最后由 VisualEleven 于 2013-02-05 09:19:49 编辑
      

  2.   

    看一下这个例子 创建一个子exe 然后用管道将文件读到stdout!
      

  3.   

    CreatePipe(&hChildStdinRd, &hChildStdinWr, &saAttr, 0)WriteFile(hChildStdinWr, chBuf, dwRead, &dwWritten, NULL)
    MSDN上有完整的例子
      

  4.   


    我先把1楼这个例子运行一下看看。我原来弄的程序里,创建完管道之后createthread(0,"ping 127.0.0.1", ... 如果不关闭hWrite句柄直接从管道里读数据的话,就会卡在那里,这是怎么回事呢?
      

  5.   

    A pipe is a section of shared memory that processes use for communication.用于进程通信的!
      

  6.   

    这个是进程间通信的方法之一
    简单理解就是2个exe之间
      

  7.   

    Quote: 引用 8 楼 arpnet99 的回复:

    这个是进程间通信的方法之一
    简单理解就是2个exe之间[/quote
    我都说了,那个地方是写错了,我本来是想写createprocess
      

  8.   

    汗,引用又弄错了。
    我都说了,那个地方是写错了,我本来是想写createprocess
      

  9.   

    1楼给的例子看得我好纠结这一篇代码里有两个main()函数。
    我开始以为后面那个main是多余的,注释起来了,发现弹窗提示Error,说找不到指定文件。
    把createprocess的Cmdline改成“cmd”,创建进程成功,可是仍然提示Error,说请指定一个输入文件。
    我想第二个main的那部分代码应该是编译成child.exe的,我就编译成child.exe之后放到刚才的那个工程目录下。再把“cmd”改回“child”,运行一下,和上次一样,创建进程成功,可还是Error:请指定一个输入文件。您这个例子到底要肿么改才能演示一下效果??
      

  10.   

    没人回帖了,整个版都没人回帖我后来发现1楼发的代码和msdn上的基本上一致,略有改动。
    msdn上的有说明。后来也看到了正确的结果和过程。可是我还是不明白一开始说的那个问题:
    例如 http://blog.sina.com.cn/s/blog_692ee0b90100jf4w.html这个是我刚找的,跟我用的方法如出一辙
    这里边是先把hWrite句柄关闭,然后才能读,这是什么原因呢?msdn里的那个例子里既有读也有写,可是不会卡住,这又是为什么?关键在哪里?