Книга: Основы программирования в Linux
write
write
Системный вызов write
предназначен для записи из buf
первых nbytes
байтов в файл, ассоциированный с дескриптором fildes
. Он возвращает количество реально записанных байтов, которое может быть меньше nbytes
, если в дескрипторе файла обнаружена ошибка или дескриптор файла, расположенный на более низком уровне драйвера устройства, чувствителен к размеру блока. Если функция возвращает 0, это означает, что ничего не записано; если она возвращает -1, в системном вызове write
возникла ошибка, которая описывается в глобальной переменной errno
,
Далее приведена синтаксическая запись.
#include <unistd.h>
size_t write(int fildes, const void *buf, size_t nbytes);
Благодаря полученным знаниям вы можете написать свою первую программу, simple_write.c:
#include <unistd.h>
#include <stdlib.h>
int main() {
if ((write(1, "Here is some datan", 18)) != 18)
write(2, "A write error has occurred on file descriptor 1n", 46);
exit(0);
}
Эта программа просто помещает сообщение в стандартный вывод. Когда она завершается, все открытые дескрипторы файлов автоматически закрываются, и вам не нужно закрывать их явно. Но в случае буферизованного вывода это не так.
$ ./simple_write
Here is some data
$
И еще одно маленькое замечание: вызов write
может сообщить о том, что записал меньше байтов, чем вы просили. Это не обязательно ошибка. В ваших программах вам придется для выявления ошибок проверить переменную errno
и еще раз вызвать write
для записи оставшихся данных.
- Forced writes - палка о двух концах
- Forced Writes
- Working with OpenOffice.org Writer
- Листинг 14.2. Использование параметра XMLWriteMode при сохранении объекта ADO.NET DataSet
- Глава 3 Работа с ПО интерактивной доски Interwrite Board
- 9.10.8 CANWrite
- Interpreting and Writing Rewrite Rules
- 15.7.4 Using Condition Variables to Synchronize between Readers and Writers
- 15.7.6 Implementing Reader-Writer Locks Using Condition Variables
- Запись в файл в Python. Метод write().
- 10.4.4.1. Пример: GNU Coreutils safe_read() и safe_write()
- Функции write(2) и writev(2)