我把一个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"仍不行,
请问高手:如何作才能让这一读一写的操作顺利进行?
不知大家有没有遇到过类似的问题
通过这个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"仍不行,
请问高手:如何作才能让这一读一写的操作顺利进行?
不知大家有没有遇到过类似的问题
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货