2009-11-11 2 views
1

Je travaille avec Rad Hat 8.0, en essayant d'apporter des modifications au noyau, et j'en suis au stade de la compilation. J'ai un en-tête dans include/linux où je définis les fonctions wrapper, et ils utilisent errno. J'ai inclus errno.h en utilisant #include <errno.h>. Lorsque j'essaie de compiler, il me dit "errno.h aucun fichier ou répertoire". Quand j'essaie #include <linux/errno.h> il le trouve mais se plaint que je n'ai pas déclaré errno la variable avant utilisation. J'ai regardé errno.h et il ne l'a pas vraiment déclaré, ce qui est déroutant car j'avais l'impression que c'est là qu'il est défini.Problèmes avec errno.h

Est-ce que je cherche au mauvais endroit? Comment puis-je utiliser errno?

Répondre

0

errno est définie comme une extern dans

/usr/src/lib/linux/errno.c 

vous devez compiler ce fichier avec le vôtre

2

Pour le code du noyau, #include <linux/errno.h>. La déclaration externe pour errno est #include <linux/unistd.h>.

1

Conformément à this, la variable errno est définie automatiquement lorsque vous renvoyez une valeur négative.

Exemple:

asmlinkage long sys_foo() { 
    ... 
    if(error) 
     return -(errorcode); 
    ... 
} 

Dans ce cas, le résultat de retour dans l'espace utilisateur sera -1 et errno variable ont une valeur de errorcode.