Записать блоки данных в файл
#include <unistd.h>int writeblock( int fd,size_t blksize,unsigned block,int numblks,const void *buff );
0
.libc
Функция writeblock() записывает numblks данных в файл, дескриптор которого передан в fd, из области памяти, указатель на которую передан в buf, начиная с блока с номером block.
Функция полезна для прямого доступа к необработанным блокам на специальном блочном устройстве (например, к необработанным дисковым блокам), но также может использоваться, например, для высокоскоростного доступа к файлам базы данных. Прирост скорости достигается засчет комбинированного поиска/чтения, неявного в этом вызове.
Если numblks равно нулю, writeblock() возвращает ноль.
При успешном завершении writeblock() возвращает количество блоков, фактически записанных на диск чере дескриптор fd. Это число никогда не превышает numblks, но может быть меньше numblks, если происходит одно из следующих событий:
O_SYNC
или O_DSYNC
— см. open() при открытии файла. Если ошибка записи появилась в первом блоке и один из флагов синхронизации был выставлен, writeblock() возвращает -1
и устанавливает переменной errno значение EIO
.
Если один из флагов синхронизации установлен, writeblock() не завершается до момента, пока все блоки не будут фактически перенесены на устройство. Если ни один из флагов не установлен, writeblock() помещает блоки в кэш и помечает их к немеделенной записи, но завершает выполнение до того, как сама запись произошла.
![]() | В последнем примере, для приложения невозможно узнать, была ли запись завершена успешно или нет (в случае проблем системы, или поврежденных секторов диска). Использование флагов синхронизации значительно влияет на скорость работы writeblock(), но гарантирует, что данные могут быть восстановлены. |
Количество фактически записанных блоков. Если происходит ошибка, возвращается -1
, устанавливается errno для обозначения ошибки, а содержимое указателя буфера, на который указывает buff остается неизменным.
O_DSYNC
или O_SYNC
. 0
или меньше нуля) или находится за пределами конца файла. ЗОСРВ «Нейтрино»
Предыдущий раздел: Описание API системной библиотеки