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