2

我正在嵌入式 Linux 上开发一个程序。我的程序是一个守护进程,并且有一个日志功能,可以使用printf(stdout 输出)输出日志。

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

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

4

2 回答 2

0

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

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

于 2013-02-20T10:37:48.363 回答
0

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

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

于 2013-02-20T11:42:26.613 回答