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程序终止时,STDIN和STDOUT会被进程管理自动关闭。
这只是一个好的编码实践还是有一个用例?
小智 2
Tee 用于日志记录,因此它会关闭 stdout,以便日志文件句柄不会保持打开或锁定状态,并且它会关闭 stdin,以便通过 stdin 提供数据的程序或用户如果尝试继续写入 tee,将收到错误,这样,如果进程退出或被另一个进程强制关闭,日志记录将引发错误。