Главная » 2017 » Ноябрь » 21 » man 2 pread64
01:20
man 2 pread64

SEO sprint - Всё для максимальной раскрутки!





ИМЯ


pread, pwrite - чтение или запись информации из файлового дескриптора согласно
заданному смещению



ОБЗОР


#include <unistd.h>

ssize_t pread(int fd, void *buf, size_t count, off_t offset);

ssize_t pwrite(int fd, const void *buf, size_t count, off_t offset);

Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

pread(), pwrite():
_XOPEN_SOURCE >= 500
|| /* начиная с glibc 2.12: */ _POSIX_C_SOURCE >= 200809L



ОПИСАНИЕ


pread() читает максимум count байтов из файлового дескриптора fd, начиная со
смещения offset (от начала файла), в буфер, начиная с buf. Текущая позиция файла
не изменяется.

pwrite() записывает максимум count байтов из буфера buf в файловый дескриптор fd ,
начиная со смещения offset. Текущая позиция файла не изменяется.

Файл, заданный в fd, должен позволять изменение смещения.



ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ


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

Заметим, что для успешного выполнения не считается ошибкой передача меньшего
количества байт чем запрошено (смотрите read(2) и write(2)).

При ошибке возвращается -1, а в errno содержится код ошибки.



ОШИБКИ


Вызов pread() может завершиться неудачно и записать в errno один из кодов ошибки,
определённых для read(2) или lseek(2). Вызов pwrite() может завершиться неудачно и
записать в errno один из кодов ошибки, определённых для write(2) или lseek(2).



ВЕРСИИ


Системные вызовы pread() и pwrite() были внесены в ядро Linux, начиная с версии
2.1.60; как элементы таблицы системных вызовов i386 были добавлены в ядро версии
2.1.69. Поддержка в библиотеке С (включая эмуляцию с помощью lseek(2) в старых
ядрах, не имеющих соответствующих системных вызовов) была добавлена в glibc 2.1.



СООТВЕТСТВИЕ СТАНДАРТАМ


POSIX.1-2001, POSIX.1-2008.



ЗАМЕЧАНИЯ


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

Отличия между библиотекой C и ядром
В Linux нижележащие системные вызовы переименованы в ядре версии 2.6: pread() стал
расположение, по которому pwrite() записывает данные. Однако в Linux, если файл
открывается с флагом O_APPEND, pwrite() добавляет данные в конец файла, независимо
от значения offset.



СМОТРИТЕ ТАКЖЕ


lseek(2), read(2), readv(2), write(2)



Категория: (2) Системные вызовы ядра (функции языка Си) | Просмотров: 452 | Добавил: Администратор | Рейтинг: 0.0/0
Всего комментариев: 0
avatar