修改现存文件描述符 -- dup、dup2、fcntl

2014-07-16 05:33:16   最后更新: 2014-07-16 05:48:16   访问数量:583




dup和dup2两个函数可以复制现存的文件描述符

int dup (int fd)

 

int dup2 (int fd1,int fd2);

 

dup 为fd通过复制(不关闭旧的文件描述符)分配新的文件描述符,该函数一定分配的是当前可用文件描述符中的最小数值

dup2 使用 fd1 (必须为已打开的合法filedes) 来代替 fd2,如该值已经存在,则先将其关闭再复制,如fd1与fd2两个参数相等,则返回fd2但不关闭

函数返回的新文件描述符与被复制文件描述符共享同一个文件表项,因此他们共享同一个文件状态标志及同一个当前文件偏移量

 

dup2 (fd1, fd2);

 

等效于

close (fd2); fcntl (fd1, F_DUPFD, fd2);

 

 

  • 他们的区别在于

  1. dup2是原子操作
  2. dup2和fcntl有某些不同的errno
  3. fcntl有更加强大的功能,可以参看:fcntl函数 -- 功能强大的文件状态操作函数

 






读书笔记      技术帖      linux      unix      c++      cpp      c语言      龙潭书斋      apue      文件描述符      dup      dup2      fcntl     


京ICP备15018585号