首页 > 代码库 > 文件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函数详解
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。