重定向stdout失败了,还是输出到了命令行,为什么?

[复制链接]
查看11 | 回复5 | 2021-1-27 06:25:47 | 显示全部楼层 |阅读模式
我尝试给stdout重新赋值,如下:
#include
intmain()
{
FILE*pf=fopen("n.txt","w");
stdout=pf;//failed?
printf("haha\n");
fclose(pf);
return0;
}
编译运行:
$g++m.cpp&&./a.out
haha
奇怪,haha仍然被输出到了命令行,而不是我期待的n.txt文件当中。这是为什么?
分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:25:47 | 显示全部楼层
重定向使用dup或者dup2函数,可以查一下他们的使用方法
回复

使用道具 举报

千问 | 2021-1-27 06:25:47 | 显示全部楼层
引用1楼lee244868149的回复:重定向使用dup或者dup2函数,可以查一下他们的使用方法
dup和dup2是复制一个fd啊,这个和重定向能联系到一起吗
回复

使用道具 举报

千问 | 2021-1-27 06:25:47 | 显示全部楼层
引用2楼biabiaka的回复:Quote: 引用1楼lee244868149的回复:
重定向使用dup或者dup2函数,可以查一下他们的使用方法

dup和dup2是复制一个fd啊,这个和重定向能联系到一起吗


你如果只要输出到n.txt,这样就可以了
#include
intmain()
{
FILE*pf=fopen("n.txt","w");
fprintf(pf,"haha\n");
fclose(pf);
return0;
}

但是要实现重定向,可以将stdout=pf;//failed?这一句写成这样:
dup2(pf,1);
参考http://www.360doc.com/content/08/1020/18/26398_1795434.shtml
回复

使用道具 举报

千问 | 2021-1-27 06:25:47 | 显示全部楼层

#include
intmain()
{
freopen("n.txt","w+",stdout);
printf("haha\n");
return0;
}
按照你的意思,用的文件指针,完全没用到文件描述符,所以用一个c库函数freopen就可以了
回复

使用道具 举报

千问 | 2021-1-27 06:25:47 | 显示全部楼层
引用1楼lee244868149的回复:重定向使用dup或者dup2函数,可以查一下他们的使用方法
楼主的程序根本都没用到文件描述符,用的是标准c的文件指针,所以我觉得按楼主的意思用一个标准库函数freopen因该就符合楼主的意思了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行