gpt4 book ai didi

c++ - 关于标准输出重定向和恢复

转载 作者:太空宇宙 更新时间:2023-11-04 04:42:51 31 4
gpt4 key购买 nike

我想将 stdout 重定向到/dev/null 然后恢复它以将其重定向到 stdout.txt,我在下面写了代码

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

int main(void)
{

fprintf(stderr, "stdout before: %d\n", stdout->_fileno);

freopen("/dev/null", "w", stdout);
printf("sdfsdf\n");
freopen("/dev/tty", "w", stdout);
printf("11111\n");

fprintf(stderr, "stdout end: %d\n", stdout->_fileno);

return 0;
}

构建和测试:

gcc 1.c -o 1
./1 > stdout.txt

为什么输出是:

stdout before: 1
11111
stdout end: 1

并且stdout.txt是0k。

希望结果输出

stdout before: 1
stdout end: 1

stdout.txt的内容是11111

最佳答案

你的代码和你git的输出是一致的。字符串“11111”进入 tty,因为它前面的 freopen 行将 freopen 更改为指向 tty。

尝试使用 dup 系统调用来保存标准输出并将标准输出恢复到之前的状态。

关于c++ - 关于标准输出重定向和恢复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24198568/

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