В чем разница между открытым файлом и индексом? - PullRequest
2 голосов
/ 04 марта 2012

Я читаю Программирование драйвера устройства Linux 3-е издание, и я пытался понять, что такое openfiles и inodes.Из того, что говорится в книге, «файловая структура в ядре считается открытым файлом».В книге также говорится: «Структура inode используется внутри ядра для представления файлов. Поэтому она отличается от структуры файлов, которая используется для представления открытого файла».Само по себе это утверждение вводит меня в заблуждение, поскольку файл и открытый файл - это одно и то же.Я даже не понимаю, что они подразумевают под открытым файлом в этом контексте.Я полностью сбит с толку, что такое открытый файл?Что такое инод?И в чем разница?

Ответы [ 5 ]

3 голосов
/ 04 марта 2012

Inode - это, в основном, данные, хранящиеся в одном или нескольких файлах (на самом деле это индекс какой-то таблицы, с помощью которой вы можете найти эти данные).

Файл, с другой стороны,запись в каталоге, указывающая на индекс.

Вот как UNIX-подобные операционные системы реализуют жесткие ссылки, позволяя двум файлам быть «эквивалентными», так что изменение одного файла изменит другой.Поскольку inode уникальны для файловой системы, у вас может быть несколько файлов, ссылающихся на одни и те же данные (если, конечно, они находятся в одной файловой системе).

2 голосов
/ 04 марта 2012

ext2 +, NTFS и другие файловые системы имеют главную таблицу файлов на диске, а каталоги - это просто особый вид файлов, полный записей, которые указывают на записи в таблице файлов.(Эта настройка допускает жесткие ссылки, а также «временные файлы», которые не видны через структуру каталогов.) «Инод» - это термин Linux (и, вероятно, других * nixes) для этих записей таблицы главного файла.

Inode не отслеживает текущую позицию в файле или текущий режим (открытый для чтения, записи, оба ...?), Хотя.Он содержит только информацию, которая помогает ОС находить содержимое файла на диске и не позволяет людям, которые не должны возиться, делать это.Вам нужна другая структура для отслеживания этой информации.Скорее всего, это будет структура «открытый файл», которую вы видите.

Очевидно, структура «файл» также имеет структуру внутри, полную указателей на функции для вещей, которые вы можете делать с файлом.Это было бы для того, чтобы поддержать философию Unix «все в файле» и позволить вам читать и писать, скажем, в сокет так же, как в обычный файл, а также чтобы обеспечить способ абстрагирования файловой системы.конкретный код из кода, который будет работать для всего (что значительно упрощает поддержку нескольких типов файловых систем).

0 голосов
/ 08 марта 2018

Inode - это экземпляр / тело «файла» (например, / etc / passwd) или «каталога» (например, /так далее). Тем не менее, struct file 'является частью экземпляра изменения (например, open-read / write-close) в inode для «file» или «directory».

Каждая файловая система (включая VFS) должна предоставлять базовым механизмам: 1) представление «файла» или «каталога»; это инод. 2) Операции по манипулированию индексом; это открытое чтение / запись-закрытие. Каждый раз, когда мы открываем «файл» или «каталог», мы получаем «структурный файл» в ядре. Таким образом, у нас может быть много «struct file» для «file» или «directory». Каждый «struct file» отражает операцию над ним. В struct file есть несколько флагов, mode и lseek, которые мы использовали для помощи open-read / write-close.

0 голосов
/ 10 апреля 2017

в соответствии с драйвером устройства ядра, 3-е ( ldd3 ):

Структура inode используется ядром для представления файлы. Следовательно, он отличается от структуры файла тем, что представляет дескриптор открытого файла. Там могут быть многочисленные файлы структуры, представляющие несколько открытых дескрипторов в одном файле, но все они указывают на одну структуру inode.

0 голосов
/ 04 марта 2012

Inode - это метаданные на диске, которые представляют файл.Он содержит биты прав доступа к файлу, метки времени создания / изменения / доступа, фактический тип файла, размер файла и т. Д. *

. «Открытый файл» - это просто часть памяти в вашем процессе.Обычно это запись массива, для которой дескриптор файла, который вы получаете из вызовов fopen (), является конкретным ключом массива.Эта запись массива будет содержать (среди прочего) текущее местоположение курсора в файле, в который вы будете читать / записывать данные, используя вызовы fwrite / fread.

...