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了。

最新文章

  1. 00Linux学习及角色定义
  2. Python内建的对象列表
  3. J2msi 自己制作的把exe打成安装包简易GUI程序(第二版 带DLL注册)
  4. CCF真题之网络延时
  5. 2016CCPC东北地区大学生程序设计竞赛 1003 HDU5924
  6. bzoj4044
  7. android之模拟器更新底层
  8. 不一样的编码风格--Lambda表达式
  9. jsp跳转到servlet
  10. 《windows程序设计》学习_3.2:左键的使用
  11. 头文件 boost/cstdint.hpp
  12. [工控安全]“祝融”—一种针对PLC控制系统的欺骗攻击病毒
  13. hive 日常技巧
  14. C#窗体控件DataGridView常用设置
  15. 区间DP石子合并问题 &amp; 四边形不等式优化
  16. Python 库,资源
  17. git报错之index.lock
  18. UiAutomator -- UiObject2 API
  19. EventBus 3.0源码解析
  20. vector interators incompatible

热门文章

  1. GridView直接打印
  2. webmagic学习之路-2:采集安居客经纪人列表
  3. shiro学习(四、shiro集成spring+springmvc)
  4. shiro学习(二)
  5. 简单了解soap协议
  6. 初识 vue------简单介绍
  7. mysql一些语句
  8. idea中安装git后,代码颜色代表的含义
  9. IntelliJ IDEA和Eclipse快捷键对比总结
  10. django 百度分页算法