gpt4 book ai didi

c - linux dup2 和 printf

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:47:15 24 4
gpt4 key购买 nike

我正在尝试使用 dup2 将标准输出重定向到另一个文件:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>

int main(void)
{
int newfd;
if ((newfd = open("output_file.txt", O_CREAT|O_TRUNC|O_WRONLY, 0644)) < 0) {
exit(1);
}
printf("Luke, I am your...\n");
dup2(newfd, 1);
printf("Foobar.\n");
return 0;
}

当第一个 printf 打印换行符 \n 时,Luke, I am your... 将被打印到屏幕上并且 Foobar 将写入 output_file.txt,如果第一个 printf 没有打印新行 printf("Luke, I am your...");,两个字符串都将写入 output_file.txt。因此,当没有换行符 (\n) 时,printf 似乎会将第一个字符串写入缓冲区。

然后到底发生了什么?

最佳答案

原因是当你没有换行符\n时,printf()打印的字符串被缓冲了。所以缓冲区的全部内容都打印到文件中。这与第二次调用 printf() 无关。

如果您在第一个 printf() 之后执行 fflush(stdout);,无论您是否有换行符,您都不会看到此行为 '\n 是否在第一个 printf() 中。因为 fflush() 将清除(刷新)所有在该点之前缓冲的输出。

printf() 中使用 \n 的原因似乎符合预期,因为 printf() 在连接时是行缓冲的到终端设备。所以 \n 触发刷新。

关于c - linux dup2 和 printf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34675691/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com