Leeres Char array in .txt Datei schreiben



  • Hallo,
    Ich stehe vor dem Problem, dass ich ein leeres Char array mehrfach in eine .txt Datei schreiben möchte - ohne, dass Speicher belegt wird.

    int fd = ::open("test.txt", O_APPEND | O_WRONLY | O_CREAT, S_IRWXU);
    char buf[4096];
    for(int i = 0; i < 4096; i++){
    buf[i] = '\0';
    }
    
    for (int i = 0; i < 10; i++){
    ::pwrite(fd,buf,4096,i*4096);
    }
    

    Nachdem der Code ausgeführt ist, ist die Datei ~ 40kb groß (10*4096 chars reingeschrieben). Wenn ich die Datei mit dem Editor öffne, speichere und schließe ist sie 0 Byte groß. Diesen Zustand möchte ich ohne das öffnen, speichern, schließen erreichen.
    Gibt es da eine Möglichkeit, dass das Dateisystem direkt "merkt" dass die Datei leer ist.

    Liebe Grüße



  • Es gibt keine leeren Arrays. Die Datei, die du da erzeugst, ist auch nicht leer.

    Wenn du eine leere Datei erzeugen willst, dann schreib halt nicht rein.



  • Du verwendest POSIX-Funktionen, der Thread müsste eigentlich in das UNIX/Linux-Unterforum.

    BillyTheKit schrieb:

    Ich stehe vor dem Problem, dass ich ein leeres Char array mehrfach in eine .txt Datei schreiben möchte - ohne, dass Speicher belegt wird.

    ... was meinst du mit "ohne, dass Speicher belegt wird"?
    Und warum willst du ein leeres Array in eine Datei schreiben?

    BillyTheKit schrieb:

    Nachdem der Code ausgeführt ist, ist die Datei ~ 40kb groß (10*4096 chars reingeschrieben).

    Soweit kann ich noch folgen. Und die Einheit, die du suchst, nennt sich Kibibytes - 40 KiB (nicht KB) hast du dann in deiner Datei.

    BillyTheKit schrieb:

    Wenn ich die Datei mit dem Editor öffne, speichere und schließe ist sie 0 Byte groß. Diesen Zustand möchte ich ohne das öffnen, speichern, schließen erreichen.

    ... was?

    BillyTheKit schrieb:

    Gibt es da eine Möglichkeit, dass das Dateisystem direkt "merkt" dass die Datei leer ist.

    ... wozu?
    Und wenn du prüfen willst, ob eine Datei leer ist - wenn wir eh schon bei POSIX sind - dann nimmt doch stat .

    Ordne deine Gedanken, und dann versuche es noch mal, denn ich verstehe nur Bahnhof.

    EDIT: wenn du ein Array mit NULL initialisieren willst, dann nimm doch direkt:

    static const char c[4096] = {0};
    int main(void)
    {
        /*bla*/
    }
    

    Das ist der schnellste Weg, so ein Array zu erstellen, weil der Compiler das zur Compilierzeit erledigen kann.



  • dachschaden schrieb:

    EDIT: wenn du ein Array mit NULL initialisieren willst, dann nimm doch direkt:

    static const char c[4096] = {0};
    int main(void)
    {
        /*bla*/
    }
    

    Das ist der schnellste Weg, so ein Array zu erstellen, weil der Compiler das zur Compilierzeit erledigen kann.

    Bei globalen und static Variablen ist das noch nicht einmal nötig. Die werden, wenn nichts anderes angegeben ist, immer mit 0 initialisiert.

    Bei lokalen Variablen kann man dann bei der Definition das erste Element initialisieren. Der Rest wird mit 0 gefüllt.


Anmelden zum Antworten