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