.TH MPU_SETVBUF 3 "Август 2026" "libmpuio" "Руководство программиста LIBMPUIO" .SH ИМЯ mpu_setvbuf, mpu_setbuf, mpu_setlinebuf, mpu_feof, mpu_ferror, mpu_clearerr \- буферизация и состояние потока .SH ОБЗОР .nf #include int mpu_setvbuf( mpu_FILE *stream, unsigned char *buf, int mode, size_t size ); void mpu_setbuf( mpu_FILE *stream, unsigned char *buf ); void mpu_setlinebuf( mpu_FILE *stream ); int mpu_feof( mpu_FILE *stream ); int mpu_ferror( mpu_FILE *stream ); void mpu_clearerr( mpu_FILE *stream ); .fi .SH ОПИСАНИЕ .B mpu_setvbuf выбирает полную буферизацию (MPU_IOFBF), построчную буферизацию (MPU_IOLBF) или отсутствие буферизации (MPU_IONBF). Буфер, предоставленный вызывающей стороной, используется непосредственно до закрытия или перенастройки потока. .PP .B mpu_setbuf выбирает полную буферизацию с размером MPU_BUFSIZ, если buf не равен NULL, и небуферизованный режим, если buf равен NULL. .PP .BR mpu_feof , .BR mpu_ferror и .B mpu_clearerr проверяют или очищают индикаторы состояния потока. .SH ИНДИКАТОРЫ СОСТОЯНИЯ И ОШИБОК .BR mpu_feof () сообщает состояние индикатора EOF; функция не предсказывает, встретит ли следующая операция чтения конец файла. Индикатор устанавливается только после того, как операция ввода фактически обнаружит конец файла. .BR mpu_ferror () сообщает состояние индикатора ошибки потока. .BR mpu_clearerr () очищает оба индикатора. .PP EAGAIN/EWOULDBLOCK для неблокирующего дескриптора устанавливает индикатор ошибки, а не EOF. После изменения условия можно вызвать clearerr и повторить операцию ввода. .SH БЛОКИРУЕМЫЕ И НЕБЛОКИРУЕМЫЕ ОПЕРАЦИИ СОСТОЯНИЯ mpu_feof_unlocked, mpu_ferror_unlocked и mpu_clearerr_unlocked имеют ту же семантику индикаторов, но не захватывают mutex потока. Используйте их только при эксклюзивном доступе к потоку либо при удержании mpu_flockfile(). .PP Функции настройки буферизации не имеют вариантов unlocked. Буферизацию следует настраивать как операцию изменения состояния потока, а не выполнять одновременно с активным вводом-выводом. .SH ТРАНЗАКЦИОННАЯ ПЕРЕНАСТРОЙКА Для потоков на основе дескрипторов и cookie новое хранилище подготавливается до синхронизации или освобождения текущего буфера. Если выделение внутреннего буфера завершается неудачей, mpu_setvbuf() возвращает ошибку, оставляя прежний буфер, активное направление и ожидающие буферизованные данные пригодными для дальнейшего использования. Более поздняя ошибка синхронизации всё же может изменить состояние backend в ходе предпринятой синхронизации. .SH СМ. ТАКЖЕ .BR mpu_fopen (3), .BR mpu_fflush (3), .BR mpu_flushlbf (3), .BR libmpuio (3) .SH SETLINEBUF .BR mpu_setlinebuf () \- вспомогательный интерфейс в стиле glibc, эквивалентный выбору .B MPU_IOLBF с внутренне выделяемым буфером размером .B MPU_BUFSIZ символов/байтов, соответствующим backend с байтовым буфером. Как и setbuf(3), эта функция не возвращает значение; если вызывающей стороне требуется явное сообщение об ошибке, используйте mpu_setvbuf(). .SH СБРОС ПОСТРОЧНО БУФЕРИЗОВАННЫХ ПОТОКОВ .BR mpu_flushlbf (3) сбрасывает все потоки, которые в данный момент выполняют запись и настроены с MPU_IOLBF, не затрагивая полностью буферизованные потоки.