Записать в файл, не меняя файлового указателя
#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
- Выполнено одно из условий:
- Файл превышает максимально возможный размер или лимитированный процессом размер записываемого файла.
- Файл является регулярным, nbytes больше
0
и стартовая позиция превышает максимально возможное смещение в файле fildes.
- EINTR
- Операия прервана сигналом (данные не переданы) или менеджер ресурсов, отвечающий за данную операцию, не сообщил о частичной записи.
- EINVAL
- Параметр offset не является корректным, например, его значение отрицательно.
- EIO
- Физическая ошибка ввода-вывода или выполнены все перечисленные условия:
- процесс является фоновым.
- установлен флаг
TOSTOP
. - процесс блокирует/игнорирует
SIGTTOU
. - группа процессов потеряна.
- ENOBUFS
- В системе недостаточно ресурсов для выполнения операции.
- ENOSPC
- Устройство, ассоциированное с файлом, не содержит достаточно места для выполнения операции.
- ENOSYS
- Функция pwrite() не реализована файловой системой, ассоциированной с filedes.
- ENXIO
- Выполнено одно из следующих условий:
- Запрос выполнен к несуществующему устройству или неподдерживающему данную функцию.
- Возникла потоковая ошибка при записи.
- EPIPE
- Запись в канал (pipe) или очередь (FIFO) невозможна, поскольку ресурс закрыт; сигнал
SIGPIPE
был послан потоку. - ERANGE
- Размер передачи вне границ, поддерживаемых файлом, ассоциированным с fildes.
- ESPIPE
- fildes ассоциированн с каналом (pipe) или очередью (FIFO). Файловый указатель остается неизменным.
pwrite() — POSIX 1003.1 X/Open Systems Interfaces Extension; pwrite64() — Поддержка больших файлов
- Да
- Обработчик прерываний
- Нет
- Обработчик сигналов
- Да
- В потоке
- Да
close(), creat(), dup(), dup2(), errno, fcntl(), lseek(), open(), pipe(), pread(), read(), readv(), select(), write(), writev()
Предыдущий раздел: Описание API системной библиотеки