3

在它的主页上说:

fchdir() 与 chdir() 相同;唯一的区别是目录作为打开的文件描述符给出。

原型如下:

int chdir(const char *path);
int fchdir(int fd);

我的问题是如何将目录作为文件描述符传递?目录是否也有相应的描述符,如文件?

4

2 回答 2

4

目录是否也有相应的描述符,如文件?

是的。Unix 哲学(和 Linux)是将一切都视为字节流。所以是的,您可以open(2)在目录上执行操作并获取其文件描述符。不仅目录,而且套接字、管道和设备也可以使用open(2)系统调用打开并对其进行操作,就好像它是一个文件一样。

于 2015-09-24T12:48:11.433 回答
1

正如您可以在Opengroup 文档中fchdir阅读的那样,

如果文件状态标志和访问模式不包含 O_WRONLY 或 O_RDWR,则符合要求的应用程序可以使用 open() 获取目录类型文件的文件描述符。

因此,通过调用open目录,可以获得目录的文件描述符。所以从某种意义上说,是的,所有目录都有文件描述符。

底层操作系统负责将文件描述符映射到正确的文件系统对象,从而抽象出该对象可能处于最低级别的任何内容。

于 2015-09-24T12:50:37.677 回答