Я в основном ищу версию C++ fdopen (). Я провел немного исследования на этом, и это - одна из тех вещей, которая кажется, что это должно быть легко, но оказывается очень сложным. Я пропускаю что-то в этой вере (т.е. это действительно легко)? В противном случае есть ли хорошая библиотека там где-нибудь для обработки этого?
Править: Перемещенный мое решение в качестве примера отдельного ответа.
AFAIK, в стандартном C ++ это невозможно сделать. В зависимости от вашей платформы ваша реализация стандартной библиотеки может предлагать (как нестандартное расширение) конструктор fstream, принимающий файловый дескриптор (это случай для libstdc ++, IIRC) или FILE *
в качестве входных данных.
Другой альтернативой было бы использование устройства boost :: iostreams :: file_descriptor , которое вы могли бы обернуть в boost :: iostreams :: stream , если хотите иметь std :: stream к нему.
Насколько я понимаю, в объектной модели C++ iostream нет связи с указателями FILE или дескрипторами файлов, чтобы сохранить переносимость кода.
Тем не менее, в нескольких местах я видел ссылки на mds-utils или boost, чтобы помочь устранить этот пробел.
Есть большая вероятность, что ваш компилятор предлагает конструктор fstream на основе ФАЙЛОВ, даже если он нестандартный. Например:
FILE* f = fdopen(my_fd, "a");
std::fstream fstr(f);
fstr << "Greetings\n";
Но, насколько мне известно, портативного способа сделать это не получится.