首页 > 代码库 > 文件IO详解(十四)---dup函数和dup2函数详解

文件IO详解(十四)---dup函数和dup2函数详解

dup和dup2函数是在进程中用来复制文件描述符的,可以实现文件共享。
========================================================
函数原型:
技术分享
技术分享
函数参数:
  • oldfd:要被复制的文件描述符
  • newfd:在dup2函数中指定的新文件描述符
返回值:
  • 调用成功返回新的文件描述符
  • 调用失败返回 -1     
========================================================
    使用dup或者dup2函数实现文件共享,返回的新的文件描述符 newfd 和原来的文件描述符 oldfd 是对应同一个文件表项(struct file结构体),所以共享同一个当前文件偏移量。因此在利用 newfd 和 oldfd 向文件中写入数据的时候是不会出现数据覆盖的问题。
=======================================================
    dup函数会返回进程中未使用的数值最小的文件描述符,这点和open函数是一样的。dup2函数会先关闭指定的文件描述符,然后返回该文件描述符作为新的文件描述符。
    dup2函数相当于先后执行了close函数和fcntl函数进行文件描述符的复制。如下图所示
技术分享
    dup2函数和先后调用close和fcntl函数是不一样的,具体在于dup2函数关闭文件描述符和进行文件描述符复制这两个操作是作为一个原子操作执行的,是不能被打断的。

文件IO详解(十四)---dup函数和dup2函数详解