匿名管道如何读取ncftpput.exe输出数据

xxq123321 2012-05-25 02:07:56
ncftpput是一个ftp上传程序,上传文件时控制台不断向stderr打印文件上传字节数,剩余时间等信息,目前碰到的问题是
程序读取管道信息是移植阻塞在ReadFile那里,读取不到数据,用ping 127.0.0.1 -t测试正常

SECURITY_ATTRIBUTES sa;
HANDLE hRead,hWrite;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
if (!CreatePipe(&hRead,&hWrite,&sa,0))
{
//ShowMessage("Error On CreatePipe()");
return 0;
}
STARTUPINFO si;
PROCESS_INFORMATION pi;
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.hStdError = hWrite;
si.hStdOutput = hWrite;
si.wShowWindow = SW_HIDE;
si.hStdInput = hRead;
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
TCHAR cmd[] = _T("ncftpput -d d:\\dbug.log -e d:\\err.log -u skyftp -p dn2jv7s9 abc-cn.com \\ d:\\software\\X16-60997V.iso");

if (!CreateProcess(NULL, cmd,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))
{
//::ShowMess("Error on CreateProcess()");
return 0;
}
CloseHandle(hWrite);
char buffer[4096] = {0};
DWORD bytesRead;
while (true)
{
if (ReadFile(hRead,buffer,4096,&bytesRead,NULL) == NULL) //程序移植阻塞在这里
break;
printf(buffer);
//mmo1->Lines->Add(buffer);
Sleep(200);
}
::CloseHandle(hRead);
...全文
260 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xxq123321 2012-05-30
  • 打赏
  • 举报
回复
找到原因了,原来是调用子进程的时候没有输出 fprintf(stderr, "\r%s", line);
东莞某某某 2012-05-29
  • 打赏
  • 举报
回复
看起来管道代码没问题,单独运行子进程试试,还是以那些参数运行,看看输出,如果输出正常,就说明父进程代码问题了
xxq123321 2012-05-28
  • 打赏
  • 举报
回复
popen是linux下的,我是windows
xxq123321 2012-05-28
  • 打赏
  • 举报
回复
fopen是linux下的,我是windows
hotpos 2012-05-25
  • 打赏
  • 举报
回复
试试 popen 呢
xxq123321 2012-05-25
  • 打赏
  • 举报
回复
这个是ncftpput打印上传信息的源码:

(void) sprintf(line, "%-32s ETA: %3d:%02d %6.2f/%6.2f %-2.2s %6.2f %.2s/s %.1s",
localName,
minLeft,
secLeft,
done,
uTotal,
uStr,
rate,
rStr,
stall
);

/* Print the updated information. */
(void) fprintf(stderr, "\r%s", line);
oyljerry 2012-05-25
  • 打赏
  • 举报
回复
ncftpput 是否有数据到管道.

15,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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