open_memstream, open_wmemstream -
открывает
динамический
буфер
памяти как
поток
Standard C library (
libc,
-lc)
#include <stdio.h>
FILE *open_memstream(char **ptr, size_t *sizeloc);
#include <wchar.h>
FILE *open_wmemstream(wchar_t **ptr, size_t *sizeloc);
open_memstream(),
open_wmemstream():
Since glibc 2.10:
_POSIX_C_SOURCE >= 200809L
Before glibc 2.10:
_GNU_SOURCE
Функция
open_memstream()
открывает
поток для
записи в
буфер
памяти.
Буфер
выделяется
динамически
и при
необходимости
автоматически
увеличивается.
Первоначально
размер
буфера
равен
нулю.После
закрытия
потока
вызывающий
должен
освободить
буфер с
помощью
free(3).
Аргументы
ptr и
sizeloc
используются
для
определения
текущего
положения
и размера
буфера,
соответственно.
Положение
обновляется
при каждом
сбросе
потока (
fflush(3)) и
его
закрытии (
fclose(3)). Эти
значения
остаются
корректными,
пока
вызывающий
не
произведёт
вывод в
поток.
После
выполнения
вывода,
перед тем
как
обращаться
к этим
переменным,
поток
снова
должен
быть
сброшен.
Байт null
поддерживается
в конце
буфера.
Этот байт
не
учитывается
в значении
размера,
хранящемся
в
sizeloc.
Для потока
существует
понятие
текущего
положения,
которое
изначально
равно нулю
(начало
буфера).
Каждая
операция
записи
неявно
изменяет
положение
буфера.
Положение
буфера
потока
можно
изменить
явно с
помощью
fseek(3)
или
fseeko(3).
Перемещение
положения
буфера за
конец уже
записанных
данных
приводит к
заполнению
промежутка
символами null.
Функция
open_wmemstream() похожа
на
open_memstream(), но
работает с
широкими
символами,
а не с
байтами.
При
успешном
выполнении
open_memstream() и
open_wmemstream()
возвращается
указатель
FILE. В
противном
случае
возвращается
NULL и
errno
присваивается
код ошибки.
Функция
open_memstream()
была
доступны
уже в glibc 1.0.x.
Функция
open_wmemstream()
доступна в
glibc начиная с
версии 2.4.
Описание
терминов
данного
раздела
смотрите в
attributes(7).
Интерфейс |
Атрибут |
Значение |
open_memstream(), open_wmemstream() |
Безвредность
в нитях |
MT-Safe |
POSIX.1-2008. Эти
функции не
определены
в POSIX.1-2001 и не
широко
распространены
в других
системах.
У
файлового
потока,
возвращаемого
этими
функциями,
отсутствует
файловый
дескриптор
(т. е., если
файловый
поток
передать в
fileno(3), то
произойдёт
ошибка).
Before glibc 2.7, seeking past the end of a stream created by
open_memstream() does not enlarge the buffer; instead the
fseek(3) call fails, returning -1.
Смотрите
fmemopen(3).
fmemopen(3),
fopen(3),
setbuf(3)
Русский
перевод
этой
страницы
руководства
был сделан
Azamat Hackimov <
[email protected]>, Konstantin Shvaykovskiy
<
[email protected]>, Yuri Kozlov <
[email protected]> и
Иван
Павлов <
[email protected]>
Этот
перевод
является
бесплатной
документацией;
прочитайте
Стандартную
общественную
лицензию GNU
версии 3
или более
позднюю,
чтобы
узнать об
условиях
авторского
права. Мы не
несем
НИКАКОЙ
ОТВЕТСТВЕННОСТИ.
Если вы
обнаружите
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
отправьте
электронное
письмо на
[email protected]