文件操作(五)—— 文件重定向(dup2)

1、什么是文件重定向?

简单来说,文件重定向可以理解为文件描述符重新选定自己的指向

2号文件描述符和3号文件描述符原本的指向如下。2号文件描述符之所以指向了stderr,是因为数组下标为2的元素填充的是stderr结构体的地址

现在我们要把2号文件描述符重定向到 log.txt 文件,此时 2号文件描述符和stderr之间的联系就会断开。其本质就是把原本下标为 3 中保存的地址拷贝到下标为 2 的数组位置。

2、文件重定向函数 dup2

dup2函数可以修改文件描述符的指向,让一个文件描述符指向其他文件描述符原本指向的内容。函数声明如下:

从上面可以了解到,让2号文件描述符重定向到 log.txt,其实就是把原本3号描述符保存的地址拷贝到2号描述符的位置。

因此, 3号描述符是曾经保存log.txt地址的位置,2号描述符是现在保存log.txt地址的位置,这里的oldfd = 3,newfd = 2

dup2(3, 2);

 

3、文件重定向的使用及验证

下面我们要向同时向1号文件描述符和 log.txt 写入内容,以此验证发生重定向以后,有两个文件描述符都指向了 log.txt 文件。

#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>

int main(){
  int fd = open("log.txt", O_CREAT | O_RDWR, 0644);
  if(fd < 0)
  {
    perror("open");
  }
  dup2(fd, 1);                      // 文件重定向

  printf("newfd: hello, world\n");  // 向1号文件描述符写入内容

  const char* buf = "oldfd: hello, world\n";
  write(fd, buf, strlen(buf));      // 向原本的log.txt对应的文件描述符写入内容

  return 0; 
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值