Mauvais descripteur de fichier

J'apprends sur les descripteurs de fichier et j'ai écrit ce code:

#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);

}

mais je suis arriver: Error writing the file:: Bad file descriptor

Je ne sais pas ce qui pourrait être mauvais, puisque c'est un exemple très simple.

Qu'est-ce que le val de fdwt sur le retour de open( )? Il doit être un entier plus petit, moins de 5. En fait, parce qu'aucune autre fds sont ouverts dans ce code, il devrait être de 3 (c'est à dire, STDERR + 1).
Par ailleurs, votre code a plusieurs problématiques bits. Ces variables n'ont pas besoin d'être global (quelques jamais le faire), vous devez les déclarer dans main. Vous déclarez également que vous c deux fois, vous n'avez pas besoin de la char dans char c la deuxième fois. Dans le même temps, la deuxième déclaration de c dans le milieu de la fonction n'est valide que dans C99, mais vous déclarer main sans type de retour -- ce qui n'est pas valide en C99, ce qui élimine le "implicite int" la règle qui était présent dans C89 et les versions antérieures de C. la Plupart des compilateurs doivent émettre des avertissements pour que, certains lèvera une erreur et refuse de compiler.
Vous devez les accepter une réponse!

OriginalL'auteur Lucy | 2011-06-05