Scroll to navigation

OPEN_MEMSTREAM(3) Руководство программиста Linux OPEN_MEMSTREAM(3)

ИМЯ

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

СИНТАКСИС

#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:
_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), то произойдёт ошибка).

ДЕФЕКТЫ

В glibc до версии 2.7 перемещение за конец потока, созданного open_memstream(), не приводило к увеличению буфера; вместо этого вызов fseek(3) завершался с ошибкой, возвращая -1.

ПРИМЕРЫ

Смотрите fmemopen(3).

СМ. ТАКЖЕ

fmemopen(3), fopen(3), setbuf(3)

ЗАМЕЧАНИЯ

Эта страница является частью проекта Linux man-pages версии 5.10. Описание проекта, информацию об ошибках и последнюю версию этой страницы можно найти по адресу https://www.kernel.org/doc/man-pages/.

ПЕРЕВОД

Русский перевод этой страницы руководства был сделан 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.

9 июня 2020 г. GNU