Каково различие между чтением и pread в Unix?

Это бессмысленно (и отвлекающий), но находится в относительно интенсивном употреблении в моей компании, по крайней мере, для типов как ints, строки, булевские переменные, и удваивается.

Вещи как sValue, iCount, dAmount или fAmount, и bFlag везде.

Когда-то давно было серьезное основание для этого соглашения. Теперь, это - рак.

31
задан pmg 6 November 2009 в 12:56
поделиться

4 ответа

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

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

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

36
ответ дан 27 November 2019 в 22:05
поделиться

Из этой ссылки ,

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

19
ответ дан 27 November 2019 в 22:05
поделиться

Google дал мне man pread .

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

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

8
ответ дан 27 November 2019 в 22:05
поделиться

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

0
ответ дан 27 November 2019 в 22:05
поделиться
Другие вопросы по тегам:

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