Люди говорят, что Словарь совпадает с хэш-таблицей.
Это не обязательно верно. Хэш-таблица является одним путем к реализация словарь. Типичный в этом, и это может быть по умолчанию в.NET в Dictionary
класс, но это не по определению единственное.
Вы могли одинаково хорошо реализовать словарь с помощью связанного списка или дерева поиска, это просто не будет как эффективное (для некоторой метрики эффективных).
Если ваш «пользовательский поток» не является чем-то, что вы можете представить с помощью дескриптора файла или дескриптора файла, то вам не повезло. Тип FILE
определяется реализацией, поэтому нет стандартного способа связать другие вещи с одним.
Если вы можете получить дескриптор файла C для того, что вы пытаетесь записать, тогда вы можете вызвать на нем fdopen
, чтобы превратить его в ФАЙЛ *
. Это не стандартные C или C ++, но они предоставляются Posix. В Windows это пишется _fdopen
.
Если вы используете Windows и у вас есть HANDLE
, то вы можете использовать _open_osfhandle
, чтобы связать дескриптор файла с ним, а затем используйте оттуда _fdopen
.
Вы действительно привязаны к fputs
? Если не, затем замените его использованием C ++ IOStream. Затем вы можете предоставить своего собственного потомка std :: basic_streambuf
, обернуть его в std :: ostream
и использовать на нем стандартный ввод-вывод C ++.
Нет, это не так. ФАЙЛ - это так называемый непрозрачный тип - в нем нет ничего, что можно было бы настроить.
Стандартного способа с интерфейсом FILE не существует. Обратите внимание, что код C ++ обычно должен использовать IOStream для ввода-вывода, с интерфейсом IOStream, решение вашей проблемы - написание пользовательского streambuf.
Если вы можете отказаться от соответствия стандарту, посмотрите документацию по вашей реализации.
POSIX имеет функцию popen (), которая создает ФАЙЛ * для чтения из вывода или записи на вход процесса;
В POSIX есть функция fdopen (), которая может создавать ФАЙЛ * из файлового дескриптора;
По крайней мере, для GNU libc, используемой Linux, существует возможность определения пользовательского потока C (см. Раздел «Программирование пользовательских потоков Awn» в информационной документации).
Если вы компилируете с библиотекой GNU C, вы можете использовать fmemopen (3):
fmemopen, open_memstream, open_wmemstream - открыть память как поток
Возможно. Но вы должны связать свое приложение с вашей версией fputs () и т. Д. Вместо тех, которые поставляются со стандартными библиотеками. Большинство компиляторов по умолчанию ссылаются на стандартные библиотеки ввода-вывода. Вы должны придумать, как это обойти.