0
我滿足約DUP2和多線程一個很字符串問題,代碼是這樣的:約DUP2和多線程問題
pipe out, err;
int forkpid = fork();
if (forkpid == 0) {
dup2(out.writeFd, STDOUT_FILENO);
dup2(err.writeFd, STDERR_FILENO);
printf("hello\n");
}
do {
int res = poll(&fds, 2, 200);
if (res) {
for (int i = 0; i < 2; i++) {
bytes = read(fds[i].fd, buff, size);
if (fds[i].fd == out.readFd)
printf("out\n");
if (fds[i].fd == err.readFd)
printf("err\n");
}
}
} while(....);
我已經在單獨的項目測試的代碼,我可以看到「你好」從STD輸出,但一旦我把它放在一個大項目,「你好」是犯錯:(
輸出我使用xcode5.0和混合C++和Objective C的。這方面有任何想法? 感謝
你可以把它解釋成一個[short,self-contained,correct,compileable example](http://sscce.org/),它可以證明你的問題? –
@AdamRosenfield,原始代碼是一個巨大的項目,實際上我已經在一些Xcode項目中嘗試了這段代碼,它工作正常。哦...對,我只是試過這個: 寫(STDOUT_FILENO,「hello」,5); 它確實寫入標準輸出,這意味着某些東西已將printf輸出更改爲標準錯誤... – Jet
這可能看起來像一個奇怪的問題,但有可能'err.writeFd'或'out.writeFd'最終爲0 ,由於某種原因1或2?你可以在你的代碼中使用一些調試語句來檢查它。 –