Ich lerne etwas über Dateideskriptoren und habe diesen Code geschrieben:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
int fdrd, fdwr, fdwt;
char c;
main (int argc, char *argv[]) {
if((fdwt = open("output", O_CREAT, 0777)) == -1) {
perror("Error opening the file:");
exit(1);
}
char c="x";
if(write(fdwt, &c, 1) == -1) {
perror("Error writing the file:");
}
close(fdwt);
exit(0);
}
aber ich bekomme: Error writing the file:: Bad file descriptor
Ich weiß nicht, was falsch sein könnte, da dies ein sehr einfaches Beispiel ist.
Was ist der Wert von fdwt bei der Rückkehr von open()? Es sollte eine kleine Ganzzahl sein, z. B. kleiner als 5. Da in diesem Code keine anderen fds offen sind, sollte es tatsächlich 3 sein (dh STDERR + 1).
– Peter Wilson
5. Juni 2011 um 20:11 Uhr
Übrigens hat Ihr Code mehrere problematische Bits. Diese Variablen müssen nicht global sein (nur wenige tun dies), Sie sollten sie in deklarieren
main
. Sie erklären auchc
zweimal braucht man das nichtchar
inchar c
das zweite Mal. Gleichzeitig wird die zweite Erklärung vonc
in der Mitte der Funktion ist nur in C99 gültig, aber Sie deklarierenmain
ohne Rückgabetyp — was in C99 ungültig ist, wodurch die “implicit int”-Regel beseitigt wird, die in C89 und früheren Versionen von C vorhanden war. Die meisten Compiler sollten dafür Warnungen ausgeben, einige werden einen Fehler ausgeben und sich weigern zu kompilieren.– Nikolaus Ritter
5. Juni 2011 um 20:27 Uhr
Sie sollten eine Antwort akzeptieren!
– Gsamaras
18. Februar 2015 um 17:24 Uhr