Как файлы открываются в unix?

Каков внутренний процесс открытия файла?

Чтобы открыть файл, система преобразует путь в inode и из поиска inode соответствующую часть диска драйвера для поиска содержимого файла? Это оно? У меня только смутное ощущение процесса открытия файла, но я хочу более подробно.

Как правило, вы должны прочитать такую ​​книгу, чтобы получить ответы на большинство таких деталей внутри ядра. Но, в общем, да, процесс таков:

  1. Файловая система перемещается по указанному пути из корня процесса (он может отличаться от известного корня FS FS из-за chroot , jail , LXC и аналогов) в случае абсолютного пути или из текущего каталога процессов или из указанного каталога ( в вызовах типа openat ), как в случае относительного пути. Указанный путь разбивается на последовательность компонентов пути, которые обрабатываются последовательно. В этом процессе анализируются содержимое каталогов и пересечения точек монтирования (называются «поиск путей», «поиск имени»), и каждый компонент пути приводит к временной ссылке на объект vnode ( sfile в старых Unix, inode в Linux). В результате, если это удастся, файл vnode окончательного файла будет найден (создан, если необходимо) и удерживается.
  2. Создается объект «Открыть файл», ссылается на этот vnode и привязывается к file descriptor процесса, выделенному для этого запроса.

Подробности поиска каталога для этого очень специфичны для конкретной VFS. Он может быть любого типа, в том числе только для памяти ( tmpfs ), дисковых ( ext4 и т. Д.), Но общая концепция иерархии каталогов сохраняется.