关闭stdout时的奇怪行为

时间:2013-02-20 20:29:34

标签: c sockets stdout

我有一个程序。在这个程序中,我有一个与其他设备的http会话。在程序中我有很多printf。当我用stdout关闭fclose(stdout)时,我注意到printf打印的消息被发送到http会话(http数据包中包含的消息)。

我想知道这个奇怪的行为,我想知道如何避免这种行为?我的意思是如何避免将打印的消息重定向到http会话?

2 个答案:

答案 0 :(得分:3)

printf调用未定义的行为后调用fclose(stdout)。不要这样做。如果您只需要禁止stdout,请将/ dev / null和dup2打开到fd#1。

答案 1 :(得分:2)

正在发生的事情是你正在关闭stdout使用的文件描述符,并且创建的下一个文件描述符(在这种情况下是一个套接字)最终会被传统上使用的文件描述符(FD 1)结束。

不要关闭标准输出。如果您需要将其取消,请将其替换为指向/dev/null的文件描述符,例如:

freopen("/dev/null", "w", stdout);