Для начала, чтобы уточнить вашу терминологию, STL обычно относится к подмножеству стандартной библиотеки C ++, содержащей контейнеры, итераторы и алгоритмы.Классы потоков являются частью стандартной библиотеки C ++, но обычно не связаны вместе с STL.Некоторые пуристы будут настаивать на том, что в стандартной библиотеке C ++ нет такой вещи, как STL (поскольку технически говоря, STL является сторонней библиотекой, которая была принята в стандарт), но большинство программистов на C ++ поймут, что вы имеете в виду.
Что касается вашего вопроса, в стандарте нет способа указать режимы разрешений с помощью ofstream
.Если вы хотите создать свой собственный класс потока, например ofstream
, но с поддержкой разрешений, лучше всего сделать следующее:
Создать подкласс из basic_streambuf
это позволяет вам открывать, записывать и, возможно, читать файлы при указании разрешений Unix.Классы потоков разработаны таким образом, что детали взаимодействия с физическими устройствами, такими как диск, сети и консоль, обрабатываются классом basic_streambuf
и его производными классами.Если вы хотите создать свой собственный потоковый класс, реализация потокового буфера будет отличным первым шагом.
Определите свой собственный класс, который подклассов basic_ostream
, и установите свой собственный basic_streambuf
.По умолчанию basic_ostream
поддерживает все стандартные выходные процедуры, реализуя их в терминах базового объекта basic_streambuf
.Если у вас есть собственный потоковый буфер, создание класса basic_ostream
, который использует этот streambuf
, приведет к тому, что все стандартные потоковые операции с этим классом (например, <<
) начнут выполнять соответствующие вызовы для вашего streambuf
.
Если вам нужна более подробная информация по этому вопросу, отличным справочником будет Стандартные потоки IOS C ++ и локали .Как бесстыдный плагин, я использовал методы из этой книги для создания потокового класса, который обертывает сокетное соединение .Хотя большая часть кода в моем потоке не будет особенно полезна, базовая структура должна помочь вам начать работу.
Надеюсь, это поможет!