打开/关闭文件时会发生什么?

时间:2015-12-08 20:13:15

标签: kernel system-calls

内核通过系统调用提供硬件抽象,例如read()write()。其中许多都非常直观,但我真的不明白open()close()是什么。

维基百科说

  

openclose分别初始化和终止对文件的访问。

当我打开/关闭文件时,在硬件级别实际发生了什么?

1 个答案:

答案 0 :(得分:0)

在Unix系统上,想法是通过文件操作资源(主要是文件系统中的条目,以及最常见的读/写/打开/关闭/ ioctl访问)。

open()和close()因此可以被视为获取/释放特定资源上的句柄的方法。

在许多情况下,打开/关闭调用只是在软件级别执行资源分配(只是在某个框架中分配内存或寄存器,或者锁定等等),但显然它有时会生成硬件访问。

open()/ close()调用下的实现总是依赖于驱动程序,程序员可能会把特定的东西放在其中。

您可以在https://lwn.net/Kernel/LDD3/http://idak.gop.edu.tr/esmeray/UnderStandingKernel.pdf中找到这些实现的概述,甚至可以阅读内核源http://lxr.free-electrons.com/source/drivers/input/mousedev.c?v=3.10#L530(鼠标设备的示例)

你甚至会发现你认为“相当直观”的东西实际上并非如此。例如,即使简单的read()在软件RAID磁盘上执行IO也会变得相当复杂。