当我 open/close 一个文件时会发生什么?

What happens when I open/close a file?

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

维基百科说

open and close respectively initialize and terminate access to a file.

当我 open/close 一个文件时,在硬件层面上实际发生了什么?

在类 Unix 系统上,想法是通过文件操作资源(主要是文件系统中的条目,最常见的是使用 read/write/open/close/ioctl 访问)。

因此可以将 open() 和 close() 视为 take/release 处理特定资源的方法。

在许多情况下,open/close 调用只是在软件级别执行资源分配(只是在某些框架中分配内存或注册,或者获取锁等),但显然有时它生成硬件访问。

open()/close() 调用下的实现始终依赖于驱动程序,程序员可能会在其中放入真正具体的东西。

您可能会在 https://lwn.net/Kernel/LDD3/ or http://idak.gop.edu.tr/esmeray/UnderStandingKernel.pdf or even reading the kernel sources http://lxr.free-electrons.com/source/drivers/input/mousedev.c?v=3.10#L530(鼠标设备示例)

中找到这些实现的概述

您甚至会发现您认为的 'fairly intuitive' 实际上不是。例如,如果您在软件 RAID 磁盘上执行 IOs,即使是简单的 read() 也会变得相当复杂。