pwrite(), pwrite64()

Записать в файл, не меняя файлового указателя

Прототип:

#include <unistd.h>
ssize_t pwrite( int filedes,
const void *buff,
size_t nbytes,
off_t offset );
ssize_t pwrite64( int filedes,
const void *buff,
size_t nbytes,
off64_t offset );

Аргументы:

filedes
Файловый дескриптор для записи.
buff
Указатель на буфер с записываемыми данными.
nbytes
Число байт для записи.
offset
Смещение в файле.

Библиотека:

libc

Описание:

Функция pwrite() аналогична write(), но не изменяет позицию файлового указателя.

Функция pwrite64() является 64-битной версией pwrite().

Возвращаемое значение:

Число записанных байт данных. Если возникла ошибка функция возвращает -1, код ошибки записывается в errno.

Коды ошибок:

EAGAIN
Файловый дескриптор открыт с флагом O_NONBLOCK и должен быть заблокирован на операции записи.
EBADF
Дескриптор fildes не имеет разрешения на запись.
EFBIG
Выполнено одно из условий:
EINTR
Операия прервана сигналом (данные не переданы) или менеджер ресурсов, отвечающий за данную операцию, не сообщил о частичной записи.
EINVAL
Параметр offset не является корректным, например, его значение отрицательно.
EIO
Физическая ошибка ввода-вывода или выполнены все перечисленные условия:
ENOBUFS
В системе недостаточно ресурсов для выполнения операции.
ENOSPC
Устройство, ассоциированное с файлом, не содержит достаточно места для выполнения операции.
ENOSYS
Функция pwrite() не реализована файловой системой, ассоциированной с filedes.
ENXIO
Выполнено одно из следующих условий:
EPIPE
Запись в канал (pipe) или очередь (FIFO) невозможна, поскольку ресурс закрыт; сигнал SIGPIPE был послан потоку.
ERANGE
Размер передачи вне границ, поддерживаемых файлом, ассоциированным с fildes.
ESPIPE
fildes ассоциированн с каналом (pipe) или очередью (FIFO). Файловый указатель остается неизменным.

Классификация:

pwrite() — POSIX 1003.1 XSI; pwrite64() — Поддержка больших файлов

Точка остановки потока
Да
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

close(), creat(), dup(), dup2(), errno, fcntl(), lseek(), open(), pipe(), pread(), read(), readv(), select(), write(), writev()




Предыдущий раздел: Описание API системной библиотеки