У каждого описания файла Unix есть свои собственные буферы чтения / записи? - PullRequest
5 голосов
/ 05 марта 2011

Что касается этого вопроса о read () и write (), мне интересно, есть ли у каждого описания открытого файла свои буферы чтения и записи или, возможно, существует один буфер чтения и записи дляфайл, когда он был открыт несколько раз одновременно.Мне любопытно, потому что это повлияет на то, что именно происходит с перекрывающимися записями в один и тот же файл.Возможно, это что-то, что различается в Unixes?

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

Ответы [ 2 ]

5 голосов
/ 05 марта 2011

Это немного зависит от того, говорите ли вы о сокетах или о реальных файлах.

Строго говоря, дескриптор никогда не имеет своих собственных буферов;это просто дескриптор для более глубокой абстракции.

Объекты файловой системы имеют свои "собственные" буферы, по крайней мере, когда они необходимы.То есть, если программа записывает меньше, чем размер блока файловой системы, ядро ​​не имеет другого выбора, кроме как прочитать блок FS и объединить запись с существующими данными.

Этот буфер присоединен к vnodeболее низкий уровень, возможно, инод.Он принадлежит файлу, а не дескриптору.Он может храниться в течение длительного времени, если память доступна.

В случае сокета поток, но не конкретный дескриптор, фактически имеет буферы, которыми он владеет.

0 голосов
/ 05 марта 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...