管道有信息,但ReadFile时不能立即返回,如何解决

SpriteLW 2008-01-21 02:26:43
我把一个Dos程序[如ftp]重定向到一个widnos程序,
通过这个windows窗口来控制ftp的输入、输出

我重定向了ftp的标准输入、输出
CreatePipe(&hOutRead,&hOutWrite,&sa,0)
CreatePipe(&hInRead,&hInWrite,&sa,0)

STARTUPINFO si;
PROCESS_INFORMATION pi;
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.hStdInput = hInRead;
si.hStdError = hOutWrite;
si.hStdOutput = hOutWrite;
si.wShowWindow = SW_HIDE;
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
CreateProcess(NULL,"C:\\WINDOWS\\system32\\cmd.exe /c ftp 127.0.0.1 "
,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi)

一切正常
1.获得ftp的输出:ReadFile(hOutRead,buffer,4095,&bytesRead,NULL)
【User (127.0.0.1:(none)):】
2.输入用户名:m_editWrite = "myusername"
WriteFile(hInWrite,(LPCVOID)m_editWrite,m_editWrite.GetLength(),&BytesWritten,NULL)
works ok!
3.再次获得输出:
ReadFile(hOutRead,buffer,4095,&bytesRead,NULL)
问题出现了,程序在这里挂起!

分析:可能是输入PIPE没有FLUSH, 改动后m_editWrite = "myusername\r\n"仍不行,

请问高手:如何作才能让这一读一写的操作顺利进行?

不知大家有没有遇到过类似的问题
...全文
299 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Chivalry 2008-01-25
  • 打赏
  • 举报
回复
ReadFile之前添加WaitForSingleObject(,INIFITE);
SpriteLW 2008-01-25
  • 打赏
  • 举报
回复
顶上去
lin_style 2008-01-21
  • 打赏
  • 举报
回复
加个锁同步下
不然第一读早就读完了
taodm 2008-01-21
  • 打赏
  • 举报
回复
还是去windows编程版问吧。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧