检查 stdout 是否被删除的正确方法是什么

检查 stdout 是否被删除的正确方法是什么

我需要从正在运行的 C 程序检查 stdout 是否已删除。

/proc/pid/fd我所说的“已删除”是指其中写为“已删除”的情况:

ll /proc/91495/fd
total 0
dr-x------ 2 ibse ibse  0 січ 31 00:49 ./
dr-xr-xr-x 9 ibse ibse  0 січ 31 00:49 ../
lrwx------ 1 ibse ibse 64 січ 31 00:49 0 -> '/dev/pts/5 (deleted)'
lrwx------ 1 ibse ibse 64 січ 31 00:50 1 -> '/dev/pts/5 (deleted)'

例如,当程序的控制终端被终止/关闭时,就会发生这种情况。

有没有办法在不写入标准输出并检查返回的错误的情况下检查这一点?

我假设fstat(STDOUT_FILENO, &buf)在这种情况下使用会返回错误,但事实并非如此。

相关内容