gpt4 book ai didi

c - 如何将标准输出重定向到一个文件,然后恢复标准输出?

转载 作者:太空宇宙 更新时间:2023-11-04 04:19:57 24 4
gpt4 key购买 nike

这是我的代码,但我无法让它工作。

int pfd = open("file", O_WRONLY, 0777);
int saved = dup(1);
close(1);
dup(pfd);
close(pfd);
printf("This goes into file\n");

// restore it back
dup2(saved, 1);
close(saved);
printf("this goes to stdout");

我对我的代码进行了一些修改。

最佳答案

您需要检查函数调用的返回值。对于大多数功能,您应该检查错误情况。这样做可能会暴露问题,如果您希望 open() 在最初不存在的情况下创建请求的文件,则需要添加 O_CREAT旗帜。

但这不是您的主要问题——您正在处理缓冲问题。第一个 printf() 的输出缓冲在内存中,因此即使文件描述符 1 在 printf() 被调用时引用您的文件,您的数据写入不会立即刷新到目标文件。然后恢复原始的 stdout 文件句柄,因此当数据实际刷新时,它们会转到(恢复的)原始 stdout。在切换 stdout 之前通过 fflush()ing 解决这个问题:

int pfd = open("file", O_WRONLY | O_CREAT, 0777);
int saved = dup(1);

close(1);
dup(pfd);
close(pfd);
printf("This goes into file\n");
fflush(stdout); // <-- THIS

// restore it back
dup2(saved, 1);
close(saved);
printf("this goes to stdout");

另请注意,dup2() 将文件描述符复制到特定 文件描述符编号上更干净、更安全。您在恢复时这样做,但您也应该在初始重定向时这样做。

关于c - 如何将标准输出重定向到一个文件,然后恢复标准输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47719965/

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