我有一个程序。在这个程序中,我有一个与其他设备的 http 会话。在程序中我有很多printf
. 当我关闭stdout
with时,fclose(stdout)
我注意到由打印的消息printf
发送到 http 会话(消息包含在 http 数据包中)。
我想知道这种奇怪的行为,我想知道如何避免这种行为?我的意思是如何避免将打印的消息重定向到 http 会话?
调用printf
后fclose(stdout)
调用未定义的行为。不要这样做。如果您只需要抑制stdout
,请打开 /dev/null 并将dup2
其放到 fd #1 上。
发生的事情是您正在关闭 stdout 使用的文件描述符,并且创建的下一个文件描述符(在本例中为套接字)以它传统上使用的文件描述符(FD 1)结束。
不要关闭标准输出。如果您需要让它消失,请将其替换为指向的文件描述符/dev/null
,例如:
freopen("/dev/null", "w", stdout);