Что такое открытое описание файла?

Существует опечатка в Вашем iptables сценарии на маршрутизаторе: в строке 24, 8 отсутствует - который может быть решением?

4
08.04.2015, 21:03
4 ответа

Я нашел ответ в Документация для открытого системного вызова :

Термин открытый файл Описание является тем, который используется POSIX для обозначения записей в системе в системе Таблица открытых файлов. В других контекстах этот объект также называется «Open File Object», «дескриптор файла», «открытая запись файла в записи таблицы», или-в виде ядра-разработчика - файл структуры. Когда файловый дескриптор дублируется (с использованием DUP (2) или похожее), дубликат относится к одному и тому же открытому описанию файла в качестве исходного дескриптора файла, а два файловых дескрипторов, следовательно, дескрипторы файлов, следовательно, флаги состояния файла. Такой обмен также может возникнуть между процессами: дочерний процесс, созданный через вилку (2), наследует дубликаты его дескрипторов файлов родителей, и эти дубликаты относятся к тому же описаниям открытых файлов. Каждый открытый (2) файла создает новое описание открытого файла; Таким образом, могут быть несколько описаний открытых файлов, соответствующие файловому inode.

1
27.01.2020, 20:46

пытается понять, что вы спрашиваете, потому что это не ясно. Но если я правильно понимаю, вы спрашиваете, как несколько процессов могут писать в тот же файл? Хорошо в Linux, по умолчанию файлы не заблокированы процессами и всегда возможно для нескольких процессов для записи в тот же файл. Какие, конечно, рискуют разбить форматирование файлов. Пишетки, как правило, являются буфером за раз (в большинстве случаев, которые означают полную линейку текста, какие работы ok, если файл - это общий журнал, и несколько процессов пишут к нему), хотя небесных файлов можно использовать, но это Требуются дополнительные параметры не по умолчанию, которые будут выбраны при открытии файла.

Файлы, открытые со случайным IO, могут быть действительно запутаны путем открытия нескольких процессов, и что для io, вероятно, требуется безопасное использование файлов для безопасного использования.

Еще одна связанная проблема, заключается в том, если файл проводится открытым процессом работы, даже если процесс не пишет часто или вообще для этого файла. Файл будет продолжать заниматься дисковым пространством, даже если «удален». Только после того, как процесс освобождает его файл, закрывая файл, будет восстановлено ли его используемое дисковое пространство.

Другое место, чтобы узнать больше о открытых файлах, находится в каталоге / proc, в частности / proc / pid / fd, это способ увидеть, какие файлы заданный процесс PID открылся.

0
27.01.2020, 20:46

Я интерпретирую вопрос как главным образом о терминологии, в частности «файловой таблице».

Если вы посмотрите на ранние реализации, набор всех описаний открытых файлов в системе был массивом. Когда процесс необходим новое описание открытого файла, массив был отсканирован для неиспользованного слота, и был возвращен указатель на этот слот. См. Например FAPLOC внизу http://minnie.tuhs.org/cgi-bin/utree.pl?file=v7/usr/sys/sys/fio.c

В этой системе «Файловая таблица» является естественным именем для системного массива Array of файла структуры .

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

«Файловая таблица» на диаграмме на Wikipedia - это набор описаний открытых файлов. Файловый дескриптор - это индекс в массиве указателей на открытые описания файлов. Поскольку описания открытых файлов всегда доступны через эти указатели, никогда не получавшим числовым индексом в некотором массиве, рисуя их в качестве непрерывной колонны коробок, немного вводят в заблуждение. И называть его «таблицей» усиливает это вводящее в заблуждение изображения.

Но это довольно распространенное использование, поэтому я не ожидаю, что он скоро умрет.

2
27.01.2020, 20:46

Дескриптор файла → Открытый файл Описание → запись каталога
DUP Открыть CP CP

Существует несколько уровней косвествия при переходе от открытого файла в процессе, вплоть до содержимого файла. Реализация-мудрые, эти уровни обычно переводятся в структуры данных в ядре, указывая на следующий уровень. Я собираюсь описать простую реализацию; Реальные реализации могут иметь гораздо больше осложнений.

Открытый файл в процессе обозначен файловым дескриптором, который является небольшим неотрицательным целым числом. Числа 0, 1 и 2 имеют обычные значения: Предполагается, что процессы читают нормальный вход от 0 (стандартный вход), напишите нормальный выход на 1 (стандартный выход) и записывать сообщения об ошибках до 2 (стандартная ошибка). Это только конвенция: ядро ​​все равно. Ядро хранит таблицу открытых дескрипторов файлов для каждого процесса, отображает эти небольшие целые числа к структуре файловой дескриптора . В ядре Linux эта структура структура FD .

Структура дескриптора файлов содержит указатель на описание открытого файла . Там могут быть несколько дескрипторов файлов, указывающие на одно и то же описание открытого файла, из нескольких процессов, например, когда процесс вызвал DUP и друзей, или после того, как процесс развелся. Если файловые дескрипторы (даже в разных процессах) связаны с тем же оригиналом Open (или аналогичного) системного вызова, они разделяют одно и то же открытое описание файла. Описание файла открытого файла содержит информацию о том, как файл открыт, включая режим (только для чтения VS Read-Write, Append и т. Д.), Положение в файле и т. Д. Под Linux в Linux структура описания файла Структивный файл .

Описание открытого файла живет на уровне файла API. Следующий уровень находится в файловой системе API. Различие состоит в том, что файл API охватывает такие файлы, как анонимные трубы и розетки, которые не живут в дереве файловой системы. Если файл является файлом в дереве каталога, описание открытого файла содержит указатель на запись каталога . Может быть несколько описаний открытых файлов, указывающих на тот же вход каталога, если один и тот же файл был Opear Ed не раз. Запись каталога содержит информацию о том, что является файлом, включая указатель на его родительский каталог, а также информацию о том, где находится файл. В ядре Linux запись каталога разделена на два уровня: inode inode , который содержит файловые метаданные и Strack Dentry , который отслеживает откуда, где файл находится в дереве каталогов.

10
27.01.2020, 20:46

Теги

Похожие вопросы