How To Append To File in C, Einsatz von Open in O_APPEND-Modus unter linux?

Dies ist ein Teil einer Hausaufgabe. Nun, ich konnte nicht alles, die Dinge in meine Hausaufgaben, damit habe ich gezogen ein snippet raus und begann zu spielen mit ihm, um herauszufinden, was falsch ist.

Unter linux in C ich versuche zu öffnen/erstellen Sie eine Textdatei, etwas dazu schreiben, schließen Sie es, öffnen Sie es in read/write und append-Modus, und fügen Sie alles das Ende der es (in diesem Beispiel der string "dude"). Wird nichts angehängt, aber, aber die write-Methode ist auch nicht werfen eine Fehlermeldung. Ich bin mir nicht sicher, was Los ist.

Hier der code:

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <errno.h>

#define BUFFSIZE 4096

int main(){
    mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;

    int fd = open("tempfile.txt", O_RDWR | O_CREAT, mode);

    char buf[BUFFSIZE] = {'t', 'h', 'y', ' ', 'f', 'a', 'l', 'l'};

    size_t n = sizeof(buf);
    if(write (fd, buf, n) < 0){
        printf("Error in write\n");
        printf("%s", strerror(errno));
        return 1;
    }

    close(fd);

    int fd2 = open("tempfile.txt", O_RDWR | O_APPEND);

    printf("appending dude:\n");
    char buf2[6] = {',', ' ', 'd', 'u', 'd', 'e'};
    size_t p = sizeof(buf2);
    if(write (fd2, buf2, p) < 0){
        printf("Error in write\n");
        printf("%s", strerror(errno));
        return 1;
    }

    char buf3[BUFFSIZE];
    lseek(fd2, 0, SEEK_SET);
    if(read (fd2, buf3, BUFFSIZE) < 0){
        printf("Error in read\n");
        printf("%s", strerror(errno));
        return 2;
    }
    int i;
    for (i = 0; i < strlen(buf3); ++i){
        printf("%c", buf3[i]);
    }
    printf("\n");

    close(fd2);

    return 0;
}

Ich habe versucht, um die Möglichkeit auszuschließen, dass es unbedingt ein Problem mit Berechtigungen von messing mit ein paar verschiedene Kombinationen, ändern Sie den Modus variable, S_IRWXU | S_IRWXG | S_IRWXO, vorbei an der mode als ein drittes argument in meinem zweiten open-Anweisung, nur das öffnen der Datei im append-Modus in der zweiten open-Anweisung übergeben, die append-Modus als drittes argument in der zweiten open-Anweisung, etc.

Die besten, die ich tun kann, ist, öffnen Sie es in RDWR ohne das APPEND-Modus, und dann schreiben Sie direkt in den vorhandenen text... aber das ist nicht das, was ich will. Und der Hinweis, ich bin mir dessen bewusst, Dinge wie lseek, aber der Zweck ist hier streng mit der append-Modus, hinzufügen von text am Ende der Datei. Ich will nicht von lseek.

Irgendwelche Hinweise zu suchen? Ich bin mir sicher, dass es etwas offensichtlich, dass ich einfach nicht verstehen.

Vielen Dank.

InformationsquelleAutor Deranger | 2013-10-03

Schreibe einen Kommentar