为什么 tee 实现在退出时关闭 STDIN 和 STDOUT?

my_*_*ion 5 c stdin gnu stdout atexit

coreutils tee源代码在退出时关闭标准输入和输出:

int
main (int argc, char **argv)
{

   atexit (close_stdout);

   <......>

  ok = tee_files (argc - optind, &argv[optind]);
  if (close (STDIN_FILENO) != 0)
    die (EXIT_FAILURE, errno, "%s", _("standard input"));

  return ok ? EXIT_SUCCESS : EXIT_FAILURE;
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否有必要这样做,因为当tee程序终止时,STDINSTDOUT会被进程管理自动关闭。

这只是一个好的编码实践还是有一个用例?

小智 2

Tee 用于日志记录,因此它会关闭 stdout,以便日志文件句柄不会保持打开或锁定状态,并且它会关闭 stdin,以便通过 stdin 提供数据的程序或用户如果尝试继续写入 tee,将收到错误,这样,如果进程退出或被另一个进程强制关闭,日志记录将引发错误。