【问题标题】:Open system call打开系统调用
【发布时间】:2009-02-15 21:05:50
【问题描述】:

我正在为我的操作系统期中学习,想知道是否可以得到一些帮助。

谁能解释一下检查以及内核在 open() 系统调用期间做了什么?

谢谢!

【问题讨论】:

  • 我认为您需要更具体...内核在该系统调用中做了 lot
  • +1 表示对这是一项家庭作业持开放态度

标签: c unix


【解决方案1】:

很粗略,你可以想到以下几个步骤:

  1. 通过遍历文件系统数据结构,将文件名转换为 inode,它是描述文件内容的实际文件系统对象。
  2. 在此遍历期间,内核将通过目录路径检查您是否有足够的文件访问权限,并检查文件本身的访问权限。精确的检查取决于打开的模式。
  3. 在内核中创建有时称为打开文件描述符的东西。内核代表任何进程打开的每个文件都有一个这些对象。
  4. 在每个进程的文件描述符表中分配一个未使用的索引,并将其指向打开的文件描述符。
  5. 从系统调用中返回此索引作为文件描述符。

这个描述对于打开普通文件和/或目录应该是基本正确的,但是对于各种特殊文件,特别是对于设备来说,情况是不同的。

【讨论】:

    【解决方案2】:

    我会回到教授告诉你的内容 - 在 open() 期间会发生很多事情,这取决于你正在打开的内容(即设备、文件、目录),除非你写了什么教授找,你会扣分。

    话虽如此,它主要涉及检查这个打开是否有效(即这个文件是否存在,用户是否有读/写权限等),然后在内核句柄表中分配一个条目跟踪 fd 及其当前文件位置(当然还有其他一些事情)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-12
      • 1970-01-01
      • 2018-01-06
      • 2013-10-15
      • 1970-01-01
      • 2014-06-29
      • 1970-01-01
      相关资源
      最近更新 更多