Je suis intéressé de connaître les valeurs valides que je peux attendre pour un descripteur de fichier.
S'il vous plaît laissez-moi expliquer un peu. Je sais que, par exemple, lorsque j'utilise #include <unistd.h>
sur mon système linux, un appel est ensuite ouvert pour lire un fichier:
int fileDescriptor;
fileDescriptor = open("/some/filename",O_RDONLY);
une erreur peut se produire et je reçois -1 en conséquence.
Incidemment, le (-1) négatif doit avoir une signification particulière. Est-ce que toutes les autres valeurs sont des descripteurs de fichier valides? c'est-à-dire aussi des négatifs comme -2 et -1023?
En supposant que int soit 4 octets (sizeof(int)==4
), alors
(-1) = 10000000 0000000 00000000 00000001
serait le seul descripteur de fichier invalide détectable? Est-ce que d'autres aimeraient:
(0) = 00000000 0000000 00000000 00000000
(-2) = 10000000 0000000 00000000 00000010
(2) = 00000000 0000000 00000000 00000010
être d'accord? Puisque le descripteur de fichier peut stocker 4 octets, je pourrais donc avoir un maximum de (2 ^ (8 * 4) -1) descripteurs de fichier valides et, par conséquent, ce serait le nombre maximum de fichiers que je peux avoir ouverts, correct?
Pour le dire encore:
À quoi dois-je m'attendre d'un descripteur de fichier (valide)?
toute valeur sauf -1?
De la page de manuel :
open()
renvoie un descripteur de fichier, un petit entier non négatif .
et alors:
open()
etcreat()
renvoient le nouveau descripteur de fichier, ou -1 en cas d'erreur
Lorsque open
fail, il renvoie -1
ou 0xffffffff
. Cela n'a pas de sens mais open
a échoué:
En cas de succès, la fonction doit ouvrir le fichier et renvoyer un entier non négatif représentant le descripteur de fichier non utilisé ayant le plus petit numéro. Sinon, -1 doit être renvoyé et errno contient le code d'erreur. Aucun fichier ne doit être créé ou modifié si la fonction renvoie -1.
La raison de l'échec est stockée dans errno
, vous pouvez lire sa valeur et vérifier s'il s'agit de l'une des causes d'échec possibles EACCES
, EEXIST
, EINTR
.. etc, ou utilisez simplement perror
pour imprimer le message d'erreur.
Voici ce que Linux page de manuel dit:
open()
etcreat()
renvoient le nouveau descripteur de fichier, ou-1
en cas d'erreur (auquel cas,errno
est défini correctement).
D'autres systèmes peuvent renvoyer d'autres valeurs négatives en cas d'erreur.
La plage de valeurs possibles des descripteurs de fichier va de 0 à 1023 pour les systèmes Linux (systèmes 32 bits ou 64 bits).
Vous ne pouvez pas créer de descripteur de fichier dont la valeur est supérieure à 1023. Dans le cas d'un descripteur de fichier de valeur 1024, une erreur EBADF sera renvoyée (descripteur de fichier incorrect, erreur no-9).
Lorsqu'une valeur négative de descripteur de fichier est renvoyée, cela signifie qu'une erreur s'est produite.