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
       или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

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

Linux man-pages 6.03                           15 декабря 2022 г.                              open_memstream(3)