Provided by: manpages-ru-dev_4.21.0-2_all bug

ИМЯ

       open_memstream, open_wmemstream - открывает динамический буфер памяти как поток

LIBRARY

       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);

   Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

       open_memstream(), open_wmemstream():
           Начиная с glibc 2.10:
               _POSIX_C_SOURCE >= 200809L
           До glibc 2.10:
               _BSD_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
       <azamat.hackimov@gmail.com>,  Konstantin  Shvaykovskiy  <kot.shv@gmail.com>,  Yuri  Kozlov
       <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>

       Этот  перевод  является  бесплатной  документацией;  прочитайте  Стандартную  общественную
       лицензию GNU версии 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

       Если  вы  обнаружите  ошибки  в  переводе этой страницы руководства, пожалуйста, отправьте
       электронное письмо на ⟨man-pages-ru-talks@lists.sourceforge.net⟩.