博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux:文件描述符重定向dup&dup2
阅读量:4150 次
发布时间:2019-05-25

本文共 713 字,大约阅读时间需要 2 分钟。


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

你可能感兴趣的文章
checkio-medium
查看>>
checkio-house password
查看>>
checkio-moore neighbourhood
查看>>
checkio-the most wanted letter
查看>>
Redis可视化工具
查看>>
大牛手把手带你!2021新一波程序员跳槽季,全套教学资料
查看>>
Android高级工程师进阶学习,分享PDF高清版
查看>>
Context都没弄明白凭什么拿高薪?年薪50W
查看>>
看完吊打面试官!大厂经典高频面试题体系化集合,最强技术实现
查看>>
看完直接怼项目经理!应聘高级Android工程师历程感言,薪资翻倍
查看>>
看完老板就给加薪了!30岁以后搞Android已经没有前途?工作感悟
查看>>
绝了!这么香的技术还不快点学起来,大牛最佳总结
查看>>
网络优化软件apk,金九银十怎么从中小企业挤进一线大厂?我先收藏为敬
查看>>
美团安卓面试,这些年我所经历的所有面试,完整版开放下载
查看>>
美团安卓面试,阿里巴巴Android面试都问些什么?含小米、腾讯、阿里
查看>>
腾讯T2亲自讲解!阿里面试100%会问到的JVM,源码+原理+手写框架
查看>>
腾讯T3亲自讲解!字节大牛耗时八个月又一力作,大牛最佳总结
查看>>
你所不知道的Android原生开发的现状,手慢无
查看>>
做了3年Android还没看过OkHttp源码?小白也能看明白
查看>>
免费Android高级工程师学习资源,挥泪整理面经
查看>>