输入输出重定向

对于unix中的文件描述符的复制,是一个非常重要的操作,系统提供了两个函数

案例分析:

这个图左边是一个进程的文件描述符表,其中0,1,2分别代表系统的标准输入,标准输出,以及标准错误输出,而3为路径为/home/tarena/tt文件,我们可以使用dup函数将1复制到空文件描述符4中,从而1和4都指向标准输出。

 这个图左边是再将3中的tt文件指向复制到1中,则1和4都指向tt文件,右边是将3号文件描述符关闭,只有1指向tt文件

这个图意思是再将4指向的标准输出复制到1中,然后再关闭。

这三个图为大家举了一个文件描述符复制转移来实现输入输出重定向的例子,接下来给大家演示具体操作

#include<t_stdio.h>
#include<t_file.h>
#include<string.h>
//重定向文件通过argvp[1]参数传递给进程
int main(int argc , char *argv[]){
        char * msg= "this is a test\n";
        //0 1 2
        //文件以写的方式打开,文件不存在则创建,权限0644
        //文件存在则将文件内容清空
        int flags = O_WRONLY | O_CREAT | O_TRUNC;
        int fd = open(argv[1],flags,0644);
        if(fd==-1) E_MSG("open",-1);
        int s_fd=dup(1);//s_fd==4; 将标准输出保存到4; 
        dup2(fd , 1);//将打开文件的描述符,复制到标准输出


        //关闭文件描述符
        close(fd);
        //通过标准输出将信息输出到件
        write(1,msg,strlen(msg));
        //恢复标准输出,重新指向显示器
        dup2(s_fd , 1);
        close(s_fd);
        //写到了显示器
        write(1,msg,strlen(msg));
        return 0;
}

该代码是先指定一个文件参数,如果不存在就创建,然后我们将标准输出复制到s_fd(4)中

然后将fd即我们创建的文件作为1,即标准输出的输出位置,此时第一个write就会输出到我们的创建文件中,然后我们将s_fd 即屏幕输出重新复制到1中,然后关闭s_fd, 然后再次通过1

write 则是输出到屏幕中:

 

  • 18
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值