![文件句柄和文件名](https://linux22.com/image/40377/%E6%96%87%E4%BB%B6%E5%8F%A5%E6%9F%84%E5%92%8C%E6%96%87%E4%BB%B6%E5%90%8D.png)
我读了这个邮政。
文件描述符与文件句柄相同吗?
在尝试配置 Linux 内核时,它会询问open by fhandle syscalls (FHANDLE) [Y/n/?]
.
为什么提供这个选项?它会影响内核的性能或编译时间,还是只是为了有一个统一的文件访问方法?
答案1
A文件C 中的结构通常称为 the file handle
,是围绕 a 的一点抽象文件描述符:
数据类型 FILE 是包含有关文件或指定数据流的信息的结构。它包括文件描述符、当前位置、状态标志等信息。它最常用作指向文件类型的指针,因为文件 I/O 函数主要采用指针作为参数,而不是结构本身。
我手头没有内核构建环境,但应该有一个帮助文本来解释该选项,并且根据快速搜索应该显示如下内容:
CONFIG_FHANDLE- 通过 fhandle 系统调用打开 -
如果您在这里选 Y,用户级程序将能够将文件名映射到句柄,然后使用该句柄进行不同的文件系统操作。这对于实现用户空间文件服务器非常有用,用户空间文件服务器现在使用句柄而不是名称来跟踪文件。即使文件名被重命名,句柄也将保持不变。启用 open_by_handle_at(2) 和 name_to_handle_at(2) 系统调用。
基本上它增加了对新的/额外的系统调用的支持。
答案2
您可能会看到一些信息这里。
一般来说,一个文件描述符是内核驻留数据结构中条目的索引,其中包含所有打开文件的详细信息。在 POSIX 中,这种数据结构称为文件描述符表,每个进程都有自己的文件描述符桌子。用户应用程序通过系统调用将抽象密钥传递给内核,内核将根据该密钥代表应用程序访问文件。应用程序本身无法直接读取或写入文件描述符表。
在类 Unix 系统中,文件描述符可以指文件、目录、块或字符设备(也称为“特殊文件”)、套接字、FIFO(也称为命名管道)或无名管道。
C 标准 I/O 库例程中的 FILE * 文件句柄从技术上讲是指向由这些库例程管理的数据结构的指针;这些结构之一通常包含类 Unix 系统上所讨论对象的实际低级文件描述符。由于文件句柄引用了这个附加层,因此它不能与文件描述符互换。