打开系统调用

时间:2009-02-15 21:05:51

标签: c unix

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

有人可以解释检查以及内核在open()系统调用期间的作用吗?

谢谢!

2 个答案:

答案 0 :(得分:4)

非常粗略地说,您可以考虑以下步骤:

  1. 通过遍历文件系统数据结构,将文件名转换为inode,这是描述文件内容的实际文件系统对象。
  2. 在此遍历期间,内核将检查您是否有足够的权限通过文件的目录路径,并检查文件本身的访问权限。精确的检查取决于传递的模式。
  3. 在内核中创建有时称为打开文件描述符的内容。内核为代表任何进程打开的每个文件都有一个这样的对象。
  4. 在每进程文件描述符表中分配一个未使用的索引,并将其指向打开的文件描述符。
  5. 从系统调用中返回此索引作为文件描述符。
  6. 此描述对于打开普通文件和/或目录应该是基本正确的,但对于各种特殊文件,特别是对于设备而言,情况有所不同。

答案 1 :(得分:0)

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

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