Réponses
Trop de publicités?En termes simples, lorsque vous ouvrez un fichier, le système d'exploitation crée une entrée pour représenter ce fichier et stocker les informations sur ce fichier ouvert. Donc si il y a 100 fichiers ouverts dans votre système d'exploitation puis il y aura 100 entrées en OS (quelque part dans le noyau). Ces entrées sont représentées par des nombres entiers comme (...100, 101, 102....). Ce numéro d'entrée est le descripteur de fichier. C'est juste un nombre entier unique qui représente un fichier ouvert dans le système d'exploitation. Si votre processus ouvert de 10 fichiers ensuite, votre Processus de table à 10 entrées pour les descripteurs de fichier.
De même, lorsque vous ouvrez un socket réseau, il est également représenté par un entier et il est appelé Descripteur de Socket. J'espère que vous comprenez.
Un descripteur de fichier est opaque poignée qui est utilisé dans l'interface entre l'espace utilisateur et le noyau pour identifier le fichier/socket ressources. Par conséquent, lorsque vous utilisez open() ou socket() (appels système d'interface pour le noyau) vous êtes renvoyés sur un descripteur de fichier, qui est un entier (c'est en fait un index dans le processus en u de la structure - mais ce n'est pas important). Donc si vous voulez une interface directe avec le noyau, en utilisant le système des appels à read(), write(), close() , etc. la poignée que vous utilisez est un descripteur de fichier.
Il y a une couche d'abstraction en surimpression sur le système d'appels, c'est la stdio interface. Cela fournit plus de fonctionnalités et de fonctionnalités que le système de base, les appels. Pour cela, l'interface de l'opacité de la poignée que vous obtenez est un FICHIER*, qui est retourné par la fopen() de l'appel. Il ya beaucoup de fonctions qui utilisent la stdio interface fprintf(), fscanf(), fclose(), qui sont là pour rendre votre vie plus facile. En C stdin, stdout, stderr sont FICHIER* qui, dans UNIX d'abord la carte pour les descripteurs 0, 1 et 2.
L'entendre de la Bouche des Chevaux : APUE (Richard Stevens).
Pour le noyau, tous les fichiers ouverts sont visés par des Descripteurs de Fichiers. Un descripteur de fichier est un nombre non négatif.
Lorsque l'on ouvre un fichier existant ou créer un nouveau fichier, le noyau renvoie un descripteur de fichier pour le processus. Le noyau maintient une table de tous les descripteurs de fichiers ouverts, qui sont en cours d'utilisation. L'attribution de descripteurs de fichier est généralement séquentielles et ils sont attribués dans le fichier comme le prochain descripteur de fichier de la piscine de libre descripteurs de fichiers. Quand on ferme le fichier, le fichier descripteur obtient libéré et est disponible pour plus de ventilation.
Voir cette image pour plus de détails :
http://lh6.ggpht.com/honestyhuang/SGTZuft4tXI/AAAAAAAAAmA/JBqgZq2dBAU/s800/two%20process%20same%20file.jpg
Lorsque l'on veut lire ou écrire un fichier, nous identifions le fichier descripteur de fichier qui a été renvoyé par open() ou à créer() appel de fonction, et l'utiliser comme un argument read() ou write().
C'est par convention que, UNIX Système de coquilles associe le descripteur de fichier 0 avec l'Entrée Standard d'un processus, d'un descripteur de fichier 1 avec sortie sur la Sortie Standard, et le fichier desciptor 2 avec Erreur Standard.
Descripteur de fichier varie de 0 à OPEN_MAX.
Pour plus d'informations, allez à la 3ème chapitre de APUE Livre.