[英]2 file descriptors for the same file
对于已打开的文件,我有一个 >0 的文件描述符。 我想向该文件添加第二个文件描述符。 我知道如果我再次使用第二个文件描述符打开文件,这是可能的,但问题是在我的代码中我不知道文件的名称。
所以我想知道我是否可以这样做:fd2 = fd1;
您可以复制文件描述符,为同一打开的文件描述返回一个新的、不同的句柄,使用dup
#include <unistd.h>
int fd2 = dup(fd1);
#include <fcntl.h>
int fd2 = fcntl(fd1, F_DUFPD, 0); // consider F_DUPFD_CLOEXEC !
因为fd2和fd1现在引用相同的打开文件描述,它们“共享”底层打开文件描述的某些属性:
struct flock
锁一样)如果您在fd2上更改上述其中一项,则该更改将在fd1中可见,因为它们再次引用相同的底层 I/O 构造。 当文件描述符跨进程复制(“继承”)时,也会发生同样的事情。
描述符本身只有一个有趣的属性 FD_CLOEXEC,它控制描述符是否在execve
调用中被保留(继承)。 这可能因每个描述符而异。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.