关闭 STDOUT 如何影响 printf

How closing STDOUT effects printf

如果有人在其文件描述符 table 中关闭进程的 STDOUT,如下所示:

close(STDOUT);

然后打开一个文件到 read/write :

int ​fd = open(​"myFile"​, O_RDWR);

然后使用 printf:

printf("hello");

我知道它不会出现在屏幕上,但它会打印在文件中吗?或者他是否必须使用 fprintf 或 write 系统调用?

来自 open 的手册页:

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

当您关闭STDOUT 的文件描述符时,后续的open 系统调用会将stdout 的fd 分配给新文件。 Printf 只是发送到 fd,它是否是 stdout 并不重要。所以这种情况下的 printf 会将输出转储到 "myfile"