linux:文件描述符重定向dup&dup2


ForeWord


本文介绍了对输入文件描述符重定向的函数dup&dup2,并用代码验证其功能。

~tips:全文阅读需5min~


Before


在没有duo&dup2,之前,要实现文件描述符重定向(输入)是这样做的:先关闭1号文件描述符,再打开文件完成重定向。

代码:

1

运行:

2


dup


dup是系统提供的进行文件描述符重定向的接口:

5

其中:
1. odfd是当前文件描述符的一份拷贝
2. dup使用最小未被使用的文件描述符作为新文件的文件描述符

6

接下来对上边的代码做改动,观察现象:

1.直接调用dup函数,打印newdup的值:

7

运行程序:
8

  解释:开始时关闭了1号文件描述符,而fd又占用了1号,所以最小未被使用的文件描述符是3,返回值就是3

2.注释掉开始的colse(1),再观察newdup的值:

9

运行程序:
10

  解释:开始并未关闭1号文件描述符,fd占用了3号,此时最小未被使用文件描述符变为4,故返回值为4

3.注释掉开始的colse(1),然后在dup之前close1:

5

运行程序:
6

  解释:fd占用了3号后1号又被关闭,此时最小未被使用文件描述符变为1,故返回值为1

dup2


dup2也是系统提供的进行文件描述符重定向的接口:

12

返回值描述如下:
13

博主翻译一下:

newfd是oldfd的一份拷贝(注意这里拷贝的是以文件描述符为下标,所标识的文件描述符数组当中的内容,并非下标),oldfd可以指定值。

  1. 如果oldfd失效,函数调用失败。newfd不关闭
  2. 如果oldfd有效,newfd和oldfd具有完全相同的值,函数什么都不做,返回newfd

在代码中调用dup2:
23

此时不用close1也可以实现输入重定向:
24

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值