如何在我的程序中检测到stdout已关闭(当telnet会话关闭时)?

时间:2013-02-20 10:28:24

标签: c linux stdout

我正在开发一个嵌入式Linux程序。我的程序是一个deamon并且有一个日志函数,用printf输出日志(stdout输出)。

所以如果我在嵌入式Linux系统上打开一个telnet会话,然后启动我的程序,我将在telnet会话中显示输出。我想知道如果我关闭telnet会话会对输出产生什么影响。输出重定向到哪里?

当我关闭telnet会话时,是否可以检查 stdout 是否已关闭?为了避免在stdout关闭时执行日志功能。

2 个答案:

答案 0 :(得分:0)

ftell在这里可能很方便。可以检查EBADF错误并停止任何进一步的写入。在C中,写入未打开的文件句柄会导致未定义的行为。

我不确定关闭你的telnet会话是否有问题,因为如果你使用类似shell的环境,环境本身可能会被杀死。我不太确定那里的行为。

答案 1 :(得分:0)

守护进程应该处理SIGHUP,这是终端在关闭时产生的信号。如果你不处理它,你的守护进程将以telnet终止。

如果fd断开连接,输出将会丢失。通常,对于日志记录,您应该使用syslog()调用。