Назва

write - здійснює запис до дескриптору файлу

Огляд

#include <unistd.h>

ssize_t write(int fd, const void *buf, size_t count);

Опис

Функція write записує до count байтів до файлу, на який посилається дескриптор fd у буфер, починаючи з buf. POSIX вимагає, щоб операція read(), яка може відбутися після завершення функції write(), повернула нові дані. Зауважте, що не всі операційні системи відповідають POSIX.

Повернені значення

При вдалому виконанні, повертається кількість записаних байтів (нуль вказує на те, що нічого не вдалося записати). У випадку помилки, повертається -1 і errno набуває відповідного значення. Якщо count дорівнює нулю і дескриптор файлу посилається на звичайний файл, повертається 0 без додаткових ефектів. У випадку спеціальних файлів, результат системозалежний.

Коди помилок

EBADF : fd не є дійсним дескриптором файлу або не відкрито для запису.

EINVAL : fd приєднано до об'єкту, що не підходить для запису.

EFAULT : buf знаходиться поза межами досяжного простору адрес.

EFBIG : Відбулася спроба записати файл, чий розмір перевищує дозволений максимальний розмір файлу або розмір файлу процесу, або спроба запису у позиції, поза максимальне зміщення.

EPIPE : fd приєднано до конвеєру або сокету, читальну сторону якого закрито. Якщо це станеться, записуючий процес отримає також сигнал SIGPIPE. (Таким чином, повернене значення write можна побачити лише, якщо програма вловить, блокує або ігнорує цей сигнал.)

EAGAIN : Було вибрано не-блокуючий режим читання/запису за допомогою O_NOBLOCK і запис блокуватиме.

EINTR : Виклик було перервано сигналом до того, як бідбувся запис якихось даних.

ENOSPC : На пристрою, що містить файл, на який посилається fd, не залишилось місця для даних.

EIO : Відбулася помилка низького рівня під зас зміни індексного вузла.

Інші помилки також можуть мати місце, в залежності від об'єкту, приклріпленого до fd.

Відповідність стандартам

SVr4, SVID, POSIX, X/OPEN, 4.3BSD. SVr4 згадує додаткові умови помилок EDEADLK, ENOLCK, ENOLNK, ENOSR, ENXIO й ERANGE. На SVr4 запис може перерватися і повернути EINTR у будь-який момент, не тільки до того, як дані буде записано.

Примітки

Вдале повернення функцією write не гарантує, що дані збережено на диску. Насправді, на деяких невдалих втіленнях, навіть не гарантовано, що було відведено місце під запис. Єдиний спосіб бути певним, це викликати fsync(2) після того, як ви закінчили запис ваших даних.

Дивіться також

close(2), ?fcntl(2), ?fsync(2), ioctl(2), ?lseek(2), open(2), read(2), select(2), ?fwrite(3), ?writev(3)