ОБЗОР
#include <stdio.h>#include <stdio_ext.h>
size_t __fbufsize(FILE *stream);
size_t __fpending(FILE *stream);
int __flbf(FILE *stream);
int __freadable(FILE *stream);
int __fwritable(FILE *stream);
int __freading(FILE *stream);
int __fwriting(FILE *stream);
int __fsetlocking(FILE *stream, int type);
void _flushlbf(void);
void __fpurge(FILE *stream);
ОПИСАНИЕ
В Solaris были представлены процедуры, представляющие переносимый способ доступа к внутренностям структуры FILE, в glibc они также реализованы.Функция __fbufsize() возвращает размер буфера, использующегося в данным момент указанным потоком.
Функция __fpending() возвращает количество байт в буфере вывода. В потоках с широкими символами единицей является широкий символ. Эта функция не определена для буферов, находящихся в процессе чтения, или открытых в режиме только для чтения.
Функция __flbf() возвращает ненулевое значение, если поток буферизируется построчно, и ноль в противном случае.
Функция __freadable() возвращает ненулевое значение, если поток доступен для чтения, и ноль в противном случае.
Функция __fwritable() возвращает ненулевое значение, если поток доступен для записи, и ноль в противном случае.
Функция __freading() возвращает ненулевое значение, если поток доступен только для чтения, или если последняя операция с потоком была операцией чтения, и ноль в противном случае.
Функция __fwriting() возвращает ненулевое значение, если поток доступен только для записи (или открыт только для добавления), или если последняя операция с потоком была операцией записи, и ноль в противном случае.
Функция __fsetlocking() может быть использована для выбора желаемого типа блокировки потока. Она возвращает текущий тип. В аргументе type может быть указано одно из трёх значений:
- FSETLOCKING_INTERNAL
- Выполнять неявную блокировку при каждой операции с заданным потоком (за исключением *_unlocked). Действует по умолчанию.
- FSETLOCKING_BYCALLER
- Вызывающий сам выполняет блокировку (возможно, с помощью flockfile(3), если есть несколько нитей), и процедуры stdio не выполняют блокировки до тех пор, пока состояние не сбросится в FSETLOCKING_INTERNAL.
- FSETLOCKING_QUERY
- Не изменять тип блокировки (только вернуть текущий).
Функция _flushlbf() сбрасывает (flushes) все буферизируемые построчно потоки (например для того, чтобы вывести всё на терминал перед чтением ввода с клавиатуры).
Функция __fpurge() удаляет содержимое поточного буфера.
АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).Интерфейс | Атрибут | Значение |
__fbufsize(),
__fpending(),
__fpurge(), __fsetlocking() | безвредность в нитях | безвредно (MT-Safe race:stream) |
__flbf(),
__freadable(),
__freading(), __fwritable(), __fwriting(), _flushlbf() | безвредность в нитях | безвредно (MT-Safe) |