dup和dup2函数简单使用
dup函数
头文件和函数原型:
#include <unistd.h>
int dup(int oldfd);
dup函数是用来打开一个新的文件描述符,指向和oldfd同一个文件,共享文件偏移量和文件状态。
共享偏移量代码:
int main(int argc, char const *argv[])
{
int fd = open("testDup.txt", O_RDONLY);
int copyFd = dup(fd);
//将fd阅读文件置于文件末尾,计算偏移量。
cout << "fd = " << fd << " 偏移量: " << lseek(fd, 0, SEEK_END) << endl;
//现在我们计算copyFd的偏移量
cout << "copyFd = " << copyFd << "偏移量:" << lseek(copyFd, 0, SEEK_CUR) << endl;
return 0;
}
执行结果:
fd = 3 偏移量: 75
copyFd = 4偏移量:75
返回值
返回值就是一个新的文件描述符,失败为-1。
用下图可以描述此函数的作用:
当我们调用dup(3)的时候,会打开新的最小描述符,也就是4,这个4指向了3所指向的文件,后续操作这两个中任意一个fd都有一样的效果。
dup2函数
头文件和函数原型:
#include <unistd.h>
int dup2(int oldfd, int newfd);
dup2函数,把指定的newfd也指向oldfd指向的文件,也就是说,执行完dup2之后,有newfd和oldfd同时指向同一个文件,共享文件偏移量和文件状态。
如下图,一开始我们有文件描述符3指向文件A,4指向文件B。
现在我们执行:
dup2(3, 4);
也就是我们把4也指向了3所指向的文件。如下图:
再提供一下证明共享偏移量的代码:
int main(int argc, char const *argv[])
{
int fdOld = open("testDup.txt", O_RDONLY);
int fdNew;
fdNew = dup2(fdOld, 14);
//将fd阅读文件置于文件末尾,计算偏移量。
cout << "fdOld = " << fdOld << " 偏移量: " << lseek(fdOld, 0, SEEK_END) << endl;
//现在我们计算copyFd的偏移量
cout << "fdNew = " << fdNew << "偏移量:" << lseek(fdNew, 0, SEEK_CUR) << endl;
return 0;
}
执行结果:
fdOld = 3 偏移量: 75
fdNew = 14偏移量:75
返回值
成功返回newfd,失败返回-1.
Note
在我们执行dup2之前,最好手动执行:
close(newfd);
否则,当系统执行关闭newfd再指向oldfd时,有错误发生,那么就不能成功关闭原来所指向文件B了。
dup和dup2函数简单使用的更多相关文章
- dup和dup2函数
下面两个函数都可用来复制一个现存的文件描述符: #include<unistd.h> int dup(int filedes); int dup2(int filedes,int file ...
- dup和dup2函数以及管道的实现
疑问:管道应该不是这样实现的,因为这要求修改程序的代码 dup和dup2也是两个非常有用的调用,它们的作用都是用来复制一个文件的描述符.它们经常用来重定向进程的stdin.stdout和stderr. ...
- 文件I/O(不带缓冲)之dup和dup2函数
下面两个函数都可用来复制一个现有的文件描述符: #include <unistd.h> int dup( int filedes ); int dup2( int filedes, int ...
- Unix 网络编程 dup和dup2函数
dup和dup2也是两个很实用的调用,它们的作用都是用来复制一个文件的描写叙述符. 它们经经常使用来重定向进程的stdin.stdout和stderr.这两个函数的原形例如以下: #include & ...
- linux之dup和dup2函数解析
1. 文件描述符在内核中数据结构在具体说dup/dup2之前,我认为有必要先了解一下文件描述符在内核中的形态.一个进程在此存在期间,会有一些文件被打开,从而会返回一些文件描述符,从shell中运行一个 ...
- dup与dup2函数
依赖的头文件 #include <unistd.h> 函数定义 int dup(int oldfd); int dup2(int oldfd, int newfd); 函数作用 dup和d ...
- dup和dup2用法小结
今天和同学探讨了一下关于重定向输出到文件的问题,其中需要用到dup和dup2函数,因此来小小的总结一下. 首先来man一下: dup直接返回一个新的描述符和原来的描述符一样代表同一个资源,描述符的值就 ...
- dup和dup2详解
C语言中dup和dup2函数的不同和使用 发表时间: 2012年11月15日 | 作者: 陈杰斌 | 所属分类: C语言 | 评论: 0 | 浏览: 1024 在unix高级编程中有介绍dup和dup ...
- dup and dup2的剖析
转:http://www.cnblogs.com/sdphome/archive/2011/04/30/2033381.html dup和dup2都可用来复制一个现存的文件描写叙述符,使两个文件描写叙 ...
随机推荐
- Java源码 HashMap<K,V>
HashMap类 https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html public class HashMap<K, ...
- Spring实战(十一) 在Spring XML中配置AOP
如果你没有源码,不能为通知类添加注解,又不想将AspectJ注解放入到你的代码中,必须选择XML配置了. 1.Spring XML配置文件 解析参考:http://www.cnblogs.com/bi ...
- tomcat日志报Invalid message received with signature的解决办法
这位大神说的是正解,大家可以参考一下这个链接:https://blog.csdn.net/bugdongwenlong/article/details/84261424
- 详解CSS居中布局技巧
本文转自:https://zhuanlan.zhihu.com/p/25068655#showWechatShareTip一.水平居中元素: 1.通用方法,元素的宽高未知方式一:CSS3 transf ...
- UVA571Jugs题解--简单数论(其实是瞎搞)
题目链接 https://cn.vjudge.net/problem/UVA-571 分析 刚做了道倒水问题的题想看看能不能水二倍经验,结果发现了这道题 题意翻译:https://www.cnblog ...
- SQL的GROUP BY 与 Order By
1.概述 “Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理. 2.原始表 3.简 ...
- O045、理解 Cinder 架构
参考https://www.cnblogs.com/CloudMan6/p/5573159.html 从本节开始我们学习OpenStack 的 Block Storage Service ,Cin ...
- 鼠标右键点击弹出菜单(jQuery)
禁用浏览器默认事件,此处是兼容写法 $(document).contextmenu(function (e) { var event = e || window.event; if (event.pr ...
- a标签 href不跳转 禁止跳转
当页面中a标签不需要任何跳转时,从原理上来讲,可分如下两种方法: 标签属性href,使其指向空或不返回任何内容.如: <a href="javascript:void(0);" ...
- C# 中使用反射的优缺点
本文摘至于:http://blog.csdn.net/springfileld/article/details/17720537 ----------------------------------- ...