我想知道在调用open()系统调用时内核中会发生什么?它如何返回文件的文件描述符?
答案 0 :(得分:3)
内核在内部创建一个结构,其中包含有关刚刚打开的文件的其他信息。此结构包含inode
数字,文件系统上文件的名称,大小,相关超级块等信息......
事实上,在内核中,VFS (Virtual File System)
处理文件上的I / O操作,它是本地的(在您的硬盘上)还是远程的(位于FTP服务器上,例如像{{ 1}}确实)。
GNU / Linux 上的每个文件系统都实现打开/读取/写入/关闭文件的相同机制。这可以确保每个开发人员都不必担心他们尝试访问哪种文件,无论您正在与哪种文件进行交互,都可以使用相同的open(),read()... API。您可以在 VFS here和here(IBM的精彩文章)中找到其他信息。
最后,让我们说ftpfs
返回的每个文件描述符都与您的程序有关,因此您打开的第一个文件将与文件描述符open
相关联,依此类推。 。可以通过3
找出许多GNU / Linux发行版中绑定到每个进程的文件描述符。
答案 1 :(得分:1)
如果您真的想深入了解,可以浏览许多unix变体的源代码。对于linux,请查看http://lxr.linux.no/#linux+v3.9/fs/open.c - 搜索SYSCALL_DEFINE3(open,
以进入实际的“开放”系统调用。
答案 2 :(得分:0)
内核: