Как создать C++ fstream из дескриптора файла POSIX?

Я в основном ищу версию C++ fdopen (). Я провел немного исследования на этом, и это - одна из тех вещей, которая кажется, что это должно быть легко, но оказывается очень сложным. Я пропускаю что-то в этой вере (т.е. это действительно легко)? В противном случае есть ли хорошая библиотека там где-нибудь для обработки этого?

Править: Перемещенный мое решение в качестве примера отдельного ответа.

88
задан BD at Rivenhill 26 February 2013 в 15:54
поделиться

3 ответа

AFAIK, в стандартном C ++ это невозможно сделать. В зависимости от вашей платформы ваша реализация стандартной библиотеки может предлагать (как нестандартное расширение) конструктор fstream, принимающий файловый дескриптор (это случай для libstdc ++, IIRC) или FILE * в качестве входных данных.

Другой альтернативой было бы использование устройства boost :: iostreams :: file_descriptor , которое вы могли бы обернуть в boost :: iostreams :: stream , если хотите иметь std :: stream к нему.

40
ответ дан 24 November 2019 в 07:36
поделиться

Насколько я понимаю, в объектной модели C++ iostream нет связи с указателями FILE или дескрипторами файлов, чтобы сохранить переносимость кода.

Тем не менее, в нескольких местах я видел ссылки на mds-utils или boost, чтобы помочь устранить этот пробел.

-4
ответ дан 24 November 2019 в 07:36
поделиться

Есть большая вероятность, что ваш компилятор предлагает конструктор fstream на основе ФАЙЛОВ, даже если он нестандартный. Например:

FILE* f = fdopen(my_fd, "a");
std::fstream fstr(f);
fstr << "Greetings\n";

Но, насколько мне известно, портативного способа сделать это не получится.

8
ответ дан 24 November 2019 в 07:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: