关于dup2

关于dup2
dup2实现的是文件描述符fd所指向的文件表(实际操作的文件)的备份,例如dup(fd0,STDOUT_FILENO),这个操作实现的是将文件描述符STDOUT_FILENO所指向的文件表的内容修改成和fd0所指向的文件表的内容一样,所谓的做fd0所指向文件表的备份。这样呢,通过文件描述符STDOUT_FILENO所访问的文件表和通过文件描述符fd0所访问的文件表是一样的。但是系统有三个文件描述符比较特殊,那就是0,1,2三个文件描述符,分别对应STDIN_FILENO,STDOUT_FILENO和STDERR_FILENO。在Unix中很多的库函数是依赖于这三个文件描述符来写的。例如标准输出函数printf,此函数默认访问的文件描述符是STDOUT_FILENO,但是它并不关心STDOUT_FILENO指向的文件表是哪儿。如果STDOUT_FILENO指向的文件表是控制终端,则通过printf打印的数据显示到了控制终端上。如果STDOUT_FILENO指向的文件表是普通的文件,则通过printf打印的数据写到了这个普通文件中。再如果STDOUT_FILENO指向的是socket,则通过printf打印的数据写到了socket所指向的通信端点并进行传递。总之,通过dup2(fd0,STDOUT_FILENO)能够改变printf类函数的输出方向,这也就是所谓的IO输出重定向。具体实例,可以补充。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值