[root@bogon code]# cat b.c
#include<stdio.h>
#include<error.h>
#include<unistd.h>
#include<fcntl.h>
#define MAX_SIZE 5
int main()
{
int fd=open("a.c",O_RDWR);
int fd1,fd2,fd3,len;
char buf[MAX_SIZE];
len=read(fd,buf,MAX_SIZE);
buf[len]='\0';
printf("fd: %s \n",buf);;
fd1=dup(fd);//复制fd文件描述符,注意文件偏移量是共享的,所以它的文件偏移量是fd当前的文件偏移量
len=read(fd1,buf,MAX_SIZE);
buf[len]='\0';
printf("fd1: %s \n",buf);;
return 0;
}
[root@bogon code]# gcc b.c
[root@bogon code]# ./a.out
fd: linux
fd1: oswin
[root@bogon code]# cat a.c
linuxoswindowsoshelloworldfine
[root@bogon code]#

类似的还有int dup2(int oldfd,int newfd)如果旧的描述符没有关闭,该函数会隐式关闭,不过为了安全起见还是用close(oldfd)关闭比较好,用newfd来复制oldfd

除此之外还有一个int dup3(int oldfd,int newfd,int flags),也就是复制oldfd用newfd代替,其中flags可以设置标志位,不过目前只支持一个标志O_CLOEXEC,开启该标志位后子进程就不能够使用该文件描述符了

还有一个更加灵活的复制文件描述符的方法

newfd=fcntl(oldfd,F_DUPFD,startfd);这个方法好处在于可以把复制的文件描述符大小落在一定范围(大于或等于startfd)

最新文章

  1. [译]ZooKeeper recipes-引言
  2. jQuery刮彩票兑奖效果
  3. Linux中的工作管理(Job Control )
  4. memcache分布式 [一致性hash算法] 的php实现
  5. owin中间件
  6. javascript获取随机数的几种方式
  7. 基于Node的PetShop,RESTful API以及认证
  8. java泛型中? super T和? extends T的区别
  9. 图中两点间路径为l的数目
  10. 如何在shell脚本中导出数组供子进程使用
  11. logstash处理文件进度记录机制
  12. 开发你的第一个BLE应用程序—Blinky
  13. Eclipse如何导入maven项目,以及配置maven
  14. 洛谷P2831 愤怒的小鸟 + 篮球比赛1 2
  15. 【译】学习JavaScript中提升、作用域、闭包的终极指南
  16. redis windows版本下载地址(不用hm提供的)
  17. 【从0到1学javascript】javascript数据结构----数组
  18. docker cgroup 技术之memory(首篇)
  19. 关于go语言的环境配置 SDK+path+工作目录
  20. CookieUtils工具类

热门文章

  1. react与vue的对比
  2. 前端基础之JavaScript进阶
  3. Ubuntu server 网络配置中遇到的问题
  4. Android : apk签名的多种方法以及key的配置
  5. Android : 修改内核源码 and 编译、打包成新的boot.img
  6. 4.1 C++多态的概念及前提条件
  7. 7series 逻辑单元理解(更新中)
  8. Android开发 ---如何操作资源目录中的资源文件2
  9. excel的操作
  10. pytest的HTML