problem mit char buffer und write()
-
rosehoch10 schrieb:
Hallo ich will einen char buffer[1024], den ich übermittelt bekomme in eine Datei schreiben (die Datei existiert im idealfall noch nicht)
Umsetzen wollte ich das so:
char buffer[1024]; ssize_t size_; int file_new; file_new = fopen("new_folder/test.txt", "a+"); size_ = buffer; if(NULL == file_new) { perror("Fehler beim erstellen der Datei "); } if(write(file_new, buffer, size_) != size_) perror("Fehler bei write()");
Die Datei wird erfolgreich geöffnet bzw. angelegt.
Das Problem tritt bei write() auf. Da gibt er mir zurück
Fehler bei write(): Bad file descriptor
Ich glaube, dass der Fehler irgendwas mit dem buffer[] zu tun hat, da es kein pointer ist, kann das sein?
Könnte mir bitte wer helfen.
Lg
Versuchs mal so:
char buffer[1024]; FILE *file; file = fopen("new_folder/test.txt", "a+"); // falls die datei überschrieben werden soll "r" if (!file) .. if (fwrite(buffer, 1 , sizeof(buffer), file) != sizeof(buffer)) ..
-
Arrays und Pointer sind (bis auf wenige Ausnahmen) gleichwertig.
Fehler bei write(): Bad file descriptor
Das sagt doch eigentlich alles aus.
Das Manual sagt zu man: write(2):
ssize_t write(int fd, const void *buf, size_t count);
Und ein
int fd
ist keinFILE*
.
Wenn du write willst, musst du man: open(2) verwenden.
-
Du bist hier bei C
rosehoch10 schrieb:
char buffer[1024]; ssize_t size_; ... size_ = buffer;
In irgendeiner Programmiersprache klappt das sicher, aber nicht in C
-
DirkB schrieb:
In irgendeiner Programmiersprache klappt das sicher
z.Bsp. Perl
-
Hallo,
HighLigerBiMBam schrieb:
FILE * pFile; char buffer[] = { 'x' , 'y' , 'z' }; pFile = fopen ( "new_folder/test.txt", "a+" ); if(pFile != NULL) { fwrite (buffer , 1 , sizeof(buffer) , pFile ); fclose (pFile); }
cooky451 schrieb:
Versuchs mal so:
char buffer[1024]; FILE *file; file = fopen("new_folder/test.txt", "a+"); // falls die datei überschrieben werden soll "r" if (!file) .. if (fwrite(buffer, 1 , sizeof(buffer), file) != sizeof(buffer)) ..
hallo, danke erstmal für die hilfe.
ich bin schon auf dem richtigen weg, cooky bei dir fehlt halt noch das fclose(), aber macht ja nichts. ich nehme mal an, dass er schon was in die datei test.txt reinschreibt nur ist das problem dass mir dann mein ubuntu rechner sagt (sobald ich einen doppelklick auf die datei mache):
Die Datei test.txt konnte nicht geöffnet werden.
Die Zeichenkodierung konnte nicht festgestellt werden. ...
In dem Buffer steht ein ganz normaler Wort mit Buchstaben, dass ich von einem Server mittels send() bekomme.Warum kann ich die Datei nicht öffnen?
-
dann mach doch mal im Terminal cat test.txt und schau was drin ist.
... und ein close hattest du in deinem Code auch nicht
-
DirkB schrieb:
dann mach doch mal im Terminal cat test.txt und schau was drin ist.
... und ein close hattest du in deinem Code auch nicht
ok, also das wort steht in der test.txt aber danach lauter komische zeichen. folglich denke ich mir:
ich lese aus einer datei aus und speichere es in buffer[1024]. wenn das ausgelesene zum Beispiel "baum" ist lese ich von der eine datei bis EOF aus. der buffer hängt aber nach baum irgendwelche random zeichen mit dran und befüllt ihn.
somit stehe ich eigenetlich vor einem ganz anderen problem: wie sage ich dem buffer dass er nur baum nehmen soll und danach ein 0 macht?
oder ist mein gedankengang völlige daneben?
Lg
-
strlen(buffer) statt sizeof(buffer)
oder fputs(buffer,file) oder fprintf(file,"%s\n",buffer)
-
Nachtrag:
rosehoch10 schrieb:
somit stehe ich eigenetlich vor einem ganz anderen problem: wie sage ich dem buffer dass er nur baum nehmen soll und danach ein 0 macht?
Die '\0' sollte sowieso am Ende vom Text stehen. (Schon nach dem eingeben/einlesen).
Und die '\0' hat im Textfile auch nichts zu suchen. Da steht dann '\n'.
-
danke an alle die mir geholfen haben!!!
es funktioniert
kann zu :xmas1: