Подтвердить что ты не робот

В чем разница между чтением и pread в unix?

В чем разница между функциями read() и pread() в unix?
Когда вы выбираете между ними, какие точки следует принимать во внимание?

Я искал разницу между ними, но без результатов.

4b9b3361

Ответ 1

Pread() работает так же, как read(), но читает из указанной позиции в файле без, изменяя указатель файла.

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

В основном используйте read(), если ваши данные являются последовательными или pread(), если вы знаете, или можете рассчитать смещение, на котором следует читать.

Ответ 2

Из этого ссылка,

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

Ответ 3

Google дал мне man pread.

Если вы read() дважды, вы получите два разных результата, которые показывают, что read() продвигается в файле.

Если вы pread() дважды, вы получите тот же результат, который показывает, что pread() остается в одной и той же точке файла.

Ответ 4

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