我把一個進程,並與EXECL運行的mysqldump。我想將mysqldump的輸出重定向到我創建的FIFO。但是開放fifo失敗了,所以dup2()。重定向子輸出到FIFO不能正常工作
int main(int argc, char** argv) {
int i;
char *fifoname="/home/maverick/myfifo";
mkfifo(fifoname,0666);
int forkret=fork();
if(forkret==0){
setuid(getpwnam("mysql")->pw_uid);
cout<<"In child....Running as :"<<(int)getuid()<<endl;
sleep(2);
int fdw=open(fifoname,O_WRONLY);
if ((dup2(fdw, STDOUT_FILENO)) != STDOUT_FILENO)
cout<<"Error redirecting output of mysqldump ";
if (dup2(fdw, STDERR_FILENO) != STDERR_FILENO)
cout<<"Error redirecting error stream of mysqldump";
execl("mysqldump","-u","root","-proot","--all-databases");
}
else{
char buf[20];
int fdr=open(fifoname,O_RDONLY);
while(read(fdr,(char*)buf,sizeof(buf))!=0){
cout<<buf;
}
}
return 0;
}
的open()調用是failing..I無法理解什麼是錯在這裏..
你不檢查mkfifo'的'結果(或其他大多數函數調用爲此事)一點點。成功了嗎? 'open'失敗後'errno'的值是多少? –
我可以用ls命令看到fifo ... open與-1一起失敗 – Sreekar
錯誤發生後,errno的值是多少? –