我需要调用pg_dump命令备份数据库,但是想把数据直接读入内存,不希望经过文件,于是使用匿名管道。管道本身能建立应该正常,将"pg_dump"命令换成其他dos命令均能正常输出,但是调用"pg_dump"命令总是有错误信息输出,代码如下:void PipeOperation_()
{
SECURITY_ATTRIBUTES sa;
HANDLE hRead,hWrite; sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
if (!CreatePipe(&hRead,&hWrite,&sa,0))   //创建管道
{
MessageBox(NULL, "Error On CreatePipe()", NULL, MB_OK);
return ;
} STARTUPINFO si;
PROCESS_INFORMATION pi;
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.hStdError = hWrite;
si.hStdOutput = hWrite;
si.dwFlags = STARTF_USESTDHANDLES;        char * szCmd = "pg_dump -U postgres -F c -v -b mydatabase";  //需要执行的PostGres数据库备份命令
if (0 == CreateProcess(NULL,szCmd,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi)) 
{
MessageBox(NULL, "Error on CreateProcess()", NULL, MB_OK);
return ;
} CloseHandle(hWrite); char buffer[4096] = {0};
DWORD bytesRead;
while (1)    
{
if (ReadFile(hRead,buffer,4095,&bytesRead,NULL) == NULL)
break;
Sleep(200);
  }
}在执行上面那个while循环读取管道中数据时有时会报错,错误信息如下:pg_dump: 正在转储表 family 的内容
pg_dump: [客户归档] 警告: ftell 和预期位置不匹配 -- 使用 ftell