我正在开发一个嵌入式Linux程序。我的程序是一个deamon并且有一个日志函数,用printf
输出日志(stdout输出)。
所以如果我在嵌入式Linux系统上打开一个telnet会话,然后启动我的程序,我将在telnet会话中显示输出。我想知道如果我关闭telnet会话会对输出产生什么影响。输出重定向到哪里?
当我关闭telnet会话时,是否可以检查 stdout 是否已关闭?为了避免在stdout关闭时执行日志功能。
答案 0 :(得分:0)
ftell
在这里可能很方便。可以检查EBADF
错误并停止任何进一步的写入。在C中,写入未打开的文件句柄会导致未定义的行为。
我不确定关闭你的telnet会话是否有问题,因为如果你使用类似shell的环境,环境本身可能会被杀死。我不太确定那里的行为。
答案 1 :(得分:0)
守护进程应该处理SIGHUP,这是终端在关闭时产生的信号。如果你不处理它,你的守护进程将以telnet终止。
如果fd断开连接,输出将会丢失。通常,对于日志记录,您应该使用syslog()调用。