Потоки и файловые дескрипторы - PullRequest
11 голосов
/ 03 июня 2011

Прошу прощения за то, что я не провел собственное исследование и не спросил его здесь. Мне немного не хватает времени.

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

Спасибо

Ответы [ 4 ]

11 голосов
/ 03 июня 2011

Нет, для каждого процесса существует только одна таблица дескрипторов файлов, и она распределяется между всеми потоками.

Из описания вашей проблемы вы можете посмотреть функции pread () и pwrite ().

4 голосов
/ 03 июня 2011

Файловые дескрипторы разделяются между потоками. Если вы хотите «специфичные для потока» смещения, почему бы не каждому потоку использовать свой дескриптор файла (open(2) несколько раз)?

1 голос
/ 14 августа 2013

Попробуйте pread () / pwrite ().

Вы все еще можете использовать один и тот же файловый дескриптор для нескольких потоков, т. Е. Параллельные операции чтения / записи в один и тот же файл гарантированно будут атомарными с использованием pread () / pwrite (), так как вам нужно будет указать смещение и количество байтов для чтения / напишите соответственно.

0 голосов
/ 04 июня 2011

В Linux вы можете unshare() таблица дескрипторов файлов с помощью флага CLONE_FILES, но я бы посоветовал против этого.

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