dup2和dup函数

dup2和dup函数

在这里插入图片描述

1. dup2

dup2的作用是使得 newfd 指向 oldfd 对应的文件,可以实现重定向。

 int dup2(int oldfd, int newfd);

关闭newfd对应的文件描述符,讲newfd重新指向为oldfd对应的文件
文件描述符实际上是一个句柄,句柄指向一个文件。dup2的作用是使得 newfd 指向 oldfd 对应的文件。

比如打开一个文件,使用dup2函数,上图就变成下图了(即原来指向/dev/tty1指向了3指向的那个文件,3指向的是一个新打开的文件)

dup2(3,1);

在这里插入图片描述
在这里插入图片描述

2. dup

返回一个新的、指向oldfd对应文件的 文件描述符,实现复制文件描述符

int dup(int oldfd);

它的作用是复制文件描述符,即如下图所示,执行dup(3),则新开的文件描述符4也指向了3所指的文件
在这里插入图片描述
使用示例
代码中执行2次printf("hello world\n");,一次输出到hello文件中,后一次输出到屏幕上

注意printf想写到文件里,只是指定文件描述符还不够,还需要刷新一次,否则printf的东西还保留在缓冲区中。

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
 
int main(){
 
    //先备份现场
    int outfd = dup(1);
    //打开Word文件,给他写权限,如果没有,则创建文件。
    int fd = open("world",O_WRONLY|O_CREAT,0666);
    //先做重定向,将标准输出重定向到fd对应的文件
    dup2(fd,1);
    //printf调用write的时候需要一个刷新机制,否则就写不到Word文件中,而是依然存储在缓冲区
    //因此需要用fflush进行刷新。
    printf("hello world\n");
 
    //需要来一次刷新下
    fflush(stdout);
 
    //需要恢复文件描述符1,使其重新对应标准输出    
    dup2(outfd,1);
 
    printf("hello world\n");
    close(fd);
    return 0;
}
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值