繁体   English   中英

同一文件的 2 个文件描述符

[英]2 file descriptors for the same file

对于已打开的文件,我有一个 >0 的文件描述符。 我想向该文件添加第二个文件描述符。 我知道如果我再次使用第二个文件描述符打开文件,这是可能的,但问题是在我的代码中我不知道文件的名称。

所以我想知道我是否可以这样做:fd2 = fd1;

您可以复制文件描述符,为同一打开的文件描述返回一个新的、不同的句柄,使用dup

#include <unistd.h>
int fd2 = dup(fd1);

或使用fcntl / F_DUPFD

#include <fcntl.h>
int fd2 = fcntl(fd1, F_DUFPD, 0); // consider F_DUPFD_CLOEXEC !

因为fd2fd1现在引用相同的打开文件描述,它们“共享”底层打开文件描述的某些属性:

  • 状态标志(非阻塞、仅附加等)
  • 访问模式(只读、读写、只写)
  • 文件 position (阅读/寻找一个将反映在另一个)
  • 记录锁(与 POSIX struct flock锁一样)

如果您在fd2上更改上述其中一项,则该更改将在fd1中可见,因为它们再次引用相同的底层 I/O 构造。 当文件描述符跨进程复制(“继承”)时,也会发生同样的事情。

描述符本身只有一个有趣的属性 FD_CLOEXEC,它控制描述符是否在execve调用中被保留(继承)。 这可能因每个描述符而异。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM