#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <fcntl.h>
int main()
{
int fd;
if ((fd = open("/home/zhangke", O_DIRECTORY | O_RDWR)) ==-1)
{
printf("error %s\n", strerror(errno));
return -1;
}
return 0;
}
/home/zhangke
是一个目录并且已经存在。我收到了“Is a directory”错误,那么我该如何使用open()
来正确地获取一个目录的fd
呢?
opendir()
函数打开一个目录。 - BarmarO_RDWR
,则会出现错误。请使用O_RDONLY
。 - Barmardir = opendir(...);
打开一个目录,可以使用dirfd(dir)
获取底层文件描述符。在使用2.6.39、3.x、4.x或更高版本内核的Linux中,可以使用open(dirpath, O_DIRECTORY | O_PATH)
获得指定目录的文件描述符,以便与fchdir()和*at()函数一起使用;但请参阅有关手册页上O_PATH限制的说明。 - Nominal Animalopen(dirpath, O_DIRECTORY | O_PATH)
和open(dirpath, O_RDONLY | O_DIRECTORY)
的区别在于,如果您没有(执行和)读取目录的访问权限,则后者将失败。而前者仅需要执行访问权限。 - Nominal Animal