在它的主页上说:
fchdir() 与 chdir() 相同;唯一的区别是目录作为打开的文件描述符给出。
原型如下:
int chdir(const char *path);
int fchdir(int fd);
我的问题是如何将目录作为文件描述符传递?目录是否也有相应的描述符,如文件?
目录是否也有相应的描述符,如文件?
是的。Unix 哲学(和 Linux)是将一切都视为字节流。所以是的,您可以open(2)
在目录上执行操作并获取其文件描述符。不仅目录,而且套接字、管道和设备也可以使用open(2)
系统调用打开并对其进行操作,就好像它是一个文件一样。
正如您可以在Opengroup 文档中fchdir
阅读的那样,
如果文件状态标志和访问模式不包含 O_WRONLY 或 O_RDWR,则符合要求的应用程序可以使用 open() 获取目录类型文件的文件描述符。
因此,通过调用open
目录,可以获得目录的文件描述符。所以从某种意义上说,是的,所有目录都有文件描述符。
底层操作系统负责将文件描述符映射到正确的文件系统对象,从而抽象出该对象可能处于最低级别的任何内容。