对于已经打开的文件,我有一个文件描述符>0。我想在该文件中添加第二个文件描述符。我知道,如果再次用第二个文件描述符打开文件,这是可能的,但问题是,在我的代码中,我不知道文件的名称。
所以我想知道我能不能这样做: fd2 = fd1;
发布于 2021-05-19 14:12:35
您可以复制文件描述符,为同一个打开的文件描述返回一个新的、不同的句柄,其中一个是dup。
#include <unistd.h>
int fd2 = dup(fd1);#include <fcntl.h>
int fd2 = fcntl(fd1, F_DUFPD, 0); // consider F_DUPFD_CLOEXEC !因为fd2和fd1现在引用的是,所以它们“共享”底层开放文件描述的某些属性:
write-only)
struct flock锁一样)中。
如果您在fd2上更改上述内容之一,则该更改将在fd1中可见,因为两者都引用相同的底层I/O结构。在跨进程(“继承”)重复文件描述符时,也会发生同样的情况。
描述符本身只有一个有趣的属性,即FD_CLOEXEC,它控制描述符是否会在execve调用中被保留(继承)。对于每个描述符,这可能有所不同。
https://stackoverflow.com/questions/67603002
复制相似问题