关闭标准输出 (STDOUT) 对 printf 有何影响?

Cod*_*der 5 unix linux operating-system stdout file

如果有人关闭进程\'STDOUT如果有人在其文件描述符表中

\n
close(STDOUT);\n
Run Code Online (Sandbox Code Playgroud)\n

然后立即打开一个文件进行读/写:

\n
int \xe2\x80\x8bfd = open(\xe2\x80\x8b"myFile"\xe2\x80\x8b, O_RDWR);\n
Run Code Online (Sandbox Code Playgroud)\n

然后使用printf

\n
int \xe2\x80\x8bfd = open(\xe2\x80\x8b"myFile"\xe2\x80\x8b, O_RDWR);\n
Run Code Online (Sandbox Code Playgroud)\n

我知道它不会出现在屏幕上,但是它会打印在文件中吗?如果没有,您是否必须使用fprintfwrite系统调用?

\n

小智 4

从 open 的手册页:

成功调用返回的文件描述符将是当前未为进程打开的最小编号的文件描述符。

当你关闭STDOUT的文件描述符时,后续的open系统调用会将stdout的fd分配给新文件。printf 只是发送到 fd,不管它是否是 stdout。因此,这种情况下的 printf 会将输出转储到“myfile”