Stream
-
Hi,
bin schon etwas aus der Übung in Sachen Streams.
Problem: Ich möchte in eine Datei schreiben. Nun kommt es vor, dass z.B. auf dem USB Stick nicht genügend Speicher vorhanden ist. Das Programm versucht dennoch zu schreiben. Mir gehen dadurch Daten verloren.
Gibt es überhaupt eine Möglichkeit, bevor ich etwas auf dem Stream schicke, zu überprüfen ob das auch tatsächlich geschrieben werden kann?
Momentan wird open - ausgeführt.
int file; file = open(mpsFilename, O_RDWR | O_TRUNC | O_BINARY | O_CREAT, S_IREAD | S_IWRITE);und mit write - geschrieben:
write(file, GetOID()); write(file, mpsName); write(file, mpsAlias);Bin um jeden Tipp dankbar,
Merci
-
Ordentliche Menschen überprüfen den Rückgabewert von write, der sagt einem nämlich ob die Daten angekommen sind und wenn nein warum nicht.
BTW: Mit Streams hat open/write/close eigentlich herzlich wenig zu tun, das sind POSIX-Files

-
Laut MSDN liefert _write -1 zurück falls der Speicherplatz nicht ausreichend ist.
Bei mir liefert _write die Anzahl der geschriebenen Bytes zurück, auch wenn die Festplatte voll ist, anschließend bekomme ich eine Fehlermeldung: "delayed write not succedeed"!?
Ich mache (Pseudo-Code):
int file; file = open("file", ..) _write(file, .. , sizeof(int)); _write(file, .. , sizeof(buffer)); _close(file);Es gibt die Möglichkeit, vor _close(file) einen _commit(file) auszuführen. Der Rückgabewert von _commit gibt an, ob das Schreiben erfolgreich war oder nicht. Das hilft mir schon weiter.
Mir sind zwei Sachen unklar:
1. Weshalb liefert _write() immer -1 zurück?
2. Wie läuft das Ganze ab? Es wird doch in einem Puffer geschrieben. Wann werden die Daten tatsächlich auf die Festplatte gespeichert?EDIT:
Mit Streams hat open/write/close eigentlich herzlich wenig zu tun, das sind POSIX-Files
Werd mich jetzt mal im Netz etwas schlauer machen. Blicke noch nicht ganz durch.
-
Tanzfreak schrieb:
2. Wie läuft das Ganze ab? Es wird doch in einem Puffer geschrieben. Wann werden die Daten tatsächlich auf die Festplatte gespeichert?
Ja, die Daten werden zunächst nur in einen Cache gepackt - das geht schneller als jedes Byte einzeln zur Festplatte zu schicken. Tatsächlich gespeichert werden die Daten, wenn dieser Cache voll ist (meist lässt sich die Größe einstellen) oder das Programm einen flush() Befehl absetzt (spätestens im close() ist einer enthalten).