看起来,可以使用openat()
重新打开已经打开的目录。例如,在我的Linux系统上,我可以执行以下操作:
#define _GNU_SOURCE
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
int main(void) {
int fd1 = open(".", O_PATH);
if (fd1 == -1) {
perror("open");
return 1;
}
int fd2 = openat(fd1, ".", O_RDONLY);
if (fd2 == -1) {
perror("openat");
close(fd1);
return 1;
}
close(fd1);
// do fancy things with fd2, now opened
// with access mode read-only
return 0;
}
我无法在任何文档中找到这个内容,感觉有点像一个边缘情况。我也没有找到其他代码这样做。这是否是明确定义的行为?
编辑:更改标题:文件->目录
dirfd
来解析相对路径,因此行为仍然是明确定义的。 - Ahmed Masud