Как может тот же fd в различных процессах указывать на тот же файл?

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

Посмотрите на приложенный снимок экрана, текст выглядит очень хорошим, не так ли?

most pager

26
05.01.2012, 17:55
4 ответа

Дескриптор файла, т.е. 4 в Вашем примере, индекс в определенную для процесса таблицу дескрипторов файлов, не открытая таблица файлов. Сама запись дескриптора файла содержит индекс к записи в глобальной открытой таблице файлов ядра, а также флаги дескриптора файла.

37
27.01.2020, 19:39
  • 1
    Для записи существует только один "флаг дескриптора файла" в большинстве систем, флаге замыкаться-должностного-лица. Все прочие "на - fd" состояние (включая смещение и режим доступа) являются частью открытой записи таблицы файлов. –  Random832 05.01.2012, 20:45

Каждый процесс имеет свою собственную таблицу дескрипторов файлов. Дескриптор файла 4 в точках процесса 1234 года в обрабатывает таблицу 1234. Дескриптор файла 4 в процессе 5 678 точек в обрабатывает таблицу 5678. Случай, с которым необходимо быть знакомы, является дескрипторами файлов 0, 1 и 2, которые для каждого процесса являются стандартным входом, стандартным выводом и стандартной погрешностью, указывая везде, где они были перенаправлены к.

Процесс может открыть тот же файл несколько раз. Это может произойти по совпадению, например, когда стандартный вывод процесса и стандартная погрешность перенаправляются к тому же терминалу или в тот же файл. Базовые записи таблицы файлов (например, Linux struct file) несите больше, чем информация о файле; они также содержат вводные режимы (например, читайте или запишите), и другое состояние (такое как флаги, например, замыкаться-должностное-лицо). Например, процессу можно было бы открыть терминал для чтения только на дескрипторе файла 0 и том же самом терминале, открытом для записи только на дескрипторе файла 2. Записи таблиц файлов также содержат положение процесса в файле; процесс мог бы хотеть lseek к двум различным позициям в том же файле, и использование - также dup получить два дескриптора в тот файл.

24
27.01.2020, 19:39
  • 1
    Это не совершенно корректно. Согласно странице справочника / спецификации, dup делает точно, что это говорит относительно олова: и получающиеся дескрипторы указывают на ту же запись таблицы файлов и таким образом совместно используют то же смещение. Для получения 2 различных записей таблицы файлов я вполне уверен, Вы должны open файл дважды. –  jw013 17.12.2011, 03:32
  • 2
    @Gilles "Дескриптор файла 4 в точках процесса 1234 года в обрабатывает таблицу 1234". Какую таблицу Вы имеете в виду? Из того, что я знаю, что единственной таблицей в процессе является Таблица дескрипторов файлов, где каждые точки записи к синглу ядра Открывают File Table. –  Pithikos 05.01.2012, 17:35
  • 3
    См. unix.stackexchange.com/questions/195057 / … для более точного описания. –  Gilles 'SO- stop being evil' 09.04.2015, 02:56

Каждый процесс имеет свою собственную таблицу дескрипторов файлов.Это все.

Это очень хорошо, описал в Сетевом программировании UNIX Richard Stevens, если требуется изучить это глубоко.

8
27.01.2020, 19:39
  • 1
    К какой таблице Вы обращаетесь? –  Pithikos 06.01.2012, 00:13
  • 2
    GNOME: Посмотрите вышеупомянутое ре ответа: sudo ---------121 таблица дескрипторов файлов--------147455--- –  Michał Šrajer 06.01.2012, 01:49

Разве дополнительный уровень абстракции не решил бы Вашу проблему? ("Все проблемы в программировании могут быть решены дополнительным уровнем абстракции" - некоторый мудрый старик). Таким образом, маленькое целое число в каждом процессе заканчивается как индекс в массив для каждого процесса индексов пространства ядра в "Открытую Таблицу файлов".

7
27.01.2020, 19:39
  • 1
    Источником мудрый старик является вероятный David Wheeler. Кажется, что он также сказал, "Но который обычно будет создавать другую проблему". :) –  jw013 05.01.2012, 18:12

Теги

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