我正在尝试将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