fchdir 是如何工作的?

How does fchdir work?

在它的主页上写着:

fchdir() is identical to chdir(); the only difference is that the directory is given as an open file descriptor.

原型如下:

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

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

Do directories also have a corresponding descriptor like files?

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

您可以在 the Opengroup documentation for fchdir

上阅读

A conforming application can obtain a file descriptor for a file of type directory using open(), provided that the file status flags and access modes do not contain O_WRONLY or O_RDWR.

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

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