Zunächst einmal, um Ihre Terminologie zu klären: Die STL bezieht sich in der Regel auf die Teilmenge der C++-Standardbibliothek, die die Container, Iteratoren und Algorithmen enthält. Die Streams-Klassen sind Teil der C++-Standardbibliothek, werden aber normalerweise nicht mit der STL gebündelt. Einige Puristen werden darauf bestehen, dass es so etwas wie die STL in der C++-Standardbibliothek nicht gibt (da die STL technisch gesehen eine Bibliothek eines Drittanbieters ist, die in den Standard aufgenommen wurde), aber die meisten C++-Programmierer werden wissen, was Sie meinen.
Was Ihre Frage betrifft, so gibt es innerhalb des Standards keine Möglichkeit, Erlaubnismodi mit ofstream
. Wenn Sie Ihre eigene benutzerdefinierte Stream-Klasse erstellen möchten, die wie folgt aussieht ofstream
aber die Berechtigungen unterstützt, ist es am besten, wie folgt vorzugehen:
-
Erstellen Sie eine Unterklasse von basic_streambuf
die es Ihnen ermöglicht, Dateien zu öffnen, zu schreiben und möglicherweise zu lesen, wobei Sie Unix-Berechtigungen festlegen können. Die Streams-Klassen sind so konzipiert, dass die Details der Kommunikation mit physischen Geräten wie Festplatten, Netzwerken und der Konsole alle von der basic_streambuf
Klasse und ihrer abgeleiteten Klassen. Wenn Sie Ihre eigene Stream-Klasse erstellen möchten, wäre die Implementierung eines Stream-Puffers ein ausgezeichneter erster Schritt.
-
Definieren Sie Ihre eigene Klasse, die Unterklassen von basic_ostream
und installiert Ihre benutzerdefinierte basic_streambuf
. Standardmäßig wird die basic_ostream
unterstützt alle Standard-Ausgaberoutinen, indem es sie in Form der zugrunde liegenden basic_streambuf
Objekt. Sobald Sie Ihren eigenen Stream-Puffer haben, können Sie ein basic_ostream
Klasse, die diese streambuf
bewirkt, dass alle Standard-Stream-Operationen für diese Klasse (wie <<
), um mit den entsprechenden Aufrufen an Ihre streambuf
.
Wenn Sie mehr darüber erfahren möchten, finden Sie eine ausgezeichnete Referenz unter Standard C++ IOStreams und Locales . Als schamlose Werbung habe ich die Techniken aus diesem Buch verwendet, um die eine Stream-Klasse, die eine Socket-Verbindung umhüllt . Obwohl ein Großteil des Codes in meinem Stream nicht besonders nützlich sein wird, sollte die Grundstruktur Ihnen den Einstieg erleichtern.
Ich hoffe, das hilft!