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 负责将文件描述符映射到正确的文件系统对象,从而抽象出该对象可能处于最低级别的任何内容。
在它的主页上写着:
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 负责将文件描述符映射到正确的文件系统对象,从而抽象出该对象可能处于最低级别的任何内容。