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

时间:2013-04-29 18:57:39

标签: unix

我想知道在调用open()系统调用时内核中会发生什么?它如何返回文件的文件描述符?

3 个答案:

答案 0 :(得分:3)

内核在内部创建一个结构,其中包含有关刚刚打开的文件的其他信息。此结构包含inode数字,文件系统上文件的名称,大小,相关超级块等信息......

事实上,在内核中,VFS (Virtual File System)处理文件上的I / O操作,它是本地的(在您的硬盘上)还是远程的(位于FTP服务器上,例如像{{ 1}}确实)。

GNU / Linux 上的每个文件系统都实现打开/读取/写入/关闭文件的相同机制。这可以确保每个开发人员都不必担心他们尝试访问哪种文件,无论您正在与哪种文件进行交互,都可以使用相同的open(),read()... API。您可以在 VFS herehere(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)

内核:

  • 查找文件(硬盘驱动器,USB,命名管道,标准流......)
  • 如果一切顺利,请保存自己打开文件的描述符
  • 返回描述符
  • 如果您关闭()或进程退出,请释放有关open()
  • 的信息