Nun, ich habe gerade Ihr Programm ausprobiert und habe eine Vorstellung davon, was schief läuft.
Grundsätzlich funktioniert es, aber mit einem Fehler. Wenn Sie zum ersten Mal "thy fall" in die Datei schreiben, verwenden Sie einen char
Array von 4096
Bytes, und Sie schreiben das gesamte Array in die Datei. Das heißt, Sie schreiben „thy fall“ gefolgt von 4088
Zeichen des zufälligen Nichts. Später, wenn Sie anhängen, hängen Sie ab der 4097. Position an. Dies ist wahrscheinlich nicht das, was Sie beabsichtigt haben.
Wenn Sie einfach cat
In der Datei, die Sie erstellen, sehen Sie die erwartete Ausgabe "thy fall, dude". Aber wenn Sie es vollständig in Ihrem Code lesen, lesen Sie nur 4096
Figuren. Daher wird der ", dude"-Teil nie gelesen, weshalb Ihr Programm ihn nie ausgibt.
Meine Lösung, Sie müssen Ihre Array-Größe ändern. Und lesen Sie beim Lesen Teile von beispielsweise 100 oder 1000 ein, bis Sie EOF (read
) erreichen gibt -1 zurück).
Die Anzahl der Bytes, die Sie zu schreiben versuchen, ist nicht korrekt,
char buf[BUFFSIZE] = {'t', 'h', 'y', ' ', 'f', 'a', 'l', 'l'};
size_t n = sizeof(buf);
if(write (fd, buf, n) < 0){
stattdessen sollten Sie dies tun
char buf[BUFFSIZE] = {'t', 'h', 'y', ' ', 'f', 'a', 'l', 'l', '\0'};
size_t n = strlen(buf); //use strlen
if(write (fd, buf, n) < 0){
Führen Sie dies in ähnlicher Weise auch für andere Schreib- und Lesevorgänge durch. Wenn Sie nicht '\0'
schreiben in der Datei zum Beenden der Zeichenfolge, erhalten Sie sie nicht, wenn Sie Daten aus der Datei lesen.
Während des Lesens sollten Sie versuchen, bis die gesamte Datei gelesen ist, dh. Sie erhalten EOF
.
Es gibt nur einen kleinen Fehler, Sie müssen den sizeof
ändern Funktion zu strlen
weil die sizeof
Die Funktion gibt die Größe des Arrays zurück, aber den strlen
Funktion gibt nur die Länge der im Array gespeicherten Zeichenfolge zurück!