open() 系统调用如何返回文件描述符?

3

当调用open()系统调用时,内核会发生什么?它如何为文件返回文件描述符?

3个回答

3

内核会创建一个包含有关您刚刚打开的文件的其他信息的结构。该结构保存信息,例如inode编号,文件在文件系统中的名称,其大小,其关联的超级块等。

事实上,在内核中,VFS(虚拟文件系统)处理对文件的I/O操作,无论是本地文件(在硬盘上)还是远程文件(例如位于FTP服务器上,如ftpfs所做的那样)。

每个GNU/Linux文件系统都实现了相同的打开/读取/写入/关闭文件机制。这确保了每个开发人员无需担心要访问的文件类型,无论您正在与哪种类型的文件交互,都可以使用相同的open()、read()等API。您可以在此处herehere(IBM的精彩文章)找到有关VFS的更多信息。
最后,由open返回的每个文件描述符都相对于您的程序,因此您可能要打开的第一个文件将与文件描述符3相关联,以此类推... 在许多GNU/Linux发行版上,可以通过/proc/{pid_of_your_process}找到绑定到每个进程的文件描述符。

1
如果你真的想深入了解,可以浏览许多Unix变体的源代码。对于Linux,请查看http://lxr.linux.no/#linux+v3.9/fs/open.c -- 搜索SYSCALL_DEFINE3(open,以进入实际的“open”系统调用。

0
内核:
  • 查找文件(硬盘,USB,命名管道,标准流等)
  • 如果一切顺利,保存一个描述符,表示您打开了该文件
  • 返回一个描述符给您
  • 如果您使用close()或进程退出,则释放有关open()的信息

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接