Является ли файл, указанный на файл STDIN, один и тот же файл для разных процессов?

StackOverflow https://stackoverflow.com/questions/3816774

  •  26-09-2019
  •  | 
  •  

Вопрос

У меня есть вопрос. По соглашению Unix объединяет файловый дескриптор 0, 1, 2 для stdin, Stdout, Stderr на каждом процессе. Это файл, например, указанный stdin, совместно используемый разными процессами? Если разделяем, когда мы открываем два раковины для ввода некоторых входов к этим двум оболочкам, как делает ОС для управления общим файлом?

Это было полезно?

Решение

Обзор

Таблица дескрипторов является в процессе, поэтому в системе возможно, что каждый процесс может иметь другой файл, открытый в каждом слоте таблицы дескриптора

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

Но когда процесс Fork (2), затем дескрипторы родителей и детей указывают на одну и ту же запись файловой таблицы, и поэтому они разделяют одно местоположение в файле. Это позволяет процессам Unix делиться доступом к потоку ввода без необходимости знать о ситуации.

Три таблицы

Доступ к файлам присоединяется через три важных таблица в Unix. То дескриптор таблицы является за процесс и указывает на Файловая таблица. Отказ Подумайте о файловой таблице как Открыть файл таблицы. Отказ Есть третья таблица, изначально называемая таблица inode. Это управляет доступом к фактическим файлам.

Ключевое значение для понимания, так это то, что в таблице INODE никогда не превышает одну запись в таблице INODE, может быть или не может быть несколько записей в таблице файлов. Если файловый дескриптор создан с Open (2), то inode получает новую запись таблицы файлов, но если она создана с вилкой (2), то одна и та же запись таблицы файлов повторно используется, и указатели чтения и записи совместно используются.

Итак, два раковины ...

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top