我正在嘗試將stdout重定向到套接字。我做這樣的事情:將stdout重定向到套接字
dup2(new_fd, STDOUT_FILENO);
這樣做畢竟stdio
功能寫入標準輸出失敗。我試圖重新打開標準輸出是這樣的:
fclose(stdout);
stdout = fdopen(STDOUT_FILENO, "wb");
但printf
等功能仍然不工作。
編輯:
我affraid,我誤解了問題擺在首位。經過一些調試後,我發現這是一個真正的問題:
printf("Test"); // We get Broken pipe here
// Reconnect new_fd
dup2(new_fd, STDERR_FILENO);
printf("Test"); // This also returns Broken pipe despite that stdout is fine now
謝謝。
'fdopen'只包裝現有的文件描述符。當你調用'fclose'時,你關閉'stdout'並刪除fd 1作爲一個有效的文件描述符。 – Michael 2013-02-27 01:59:26
即使沒有'fclose',它也不起作用。在執行'dup2' printf失敗後,我仍然可以將'write()'寫入'STDOUT_FILENO'。 – 2013-02-27 02:06:20
因爲您在'STDOUT_FILENO'上覆制了'new_fd',您需要關閉它並重新打開。你在做什麼操作系統? – Michael 2013-02-27 02:09:06