qu'est ce qu'un descripteur de fichier et où il est utile pour un programmeur?
Je suis en train d'apprendre le langage assembleur avec C. ce nouveau chapitre, j'ai commencé à parler de "descripteurs de fichiers', descripteurs de fichiers pour l'affichage à l'écran et les descripteurs de fichiers pour la saisie au clavier etc. Je ne sais pas ce qu'est un descripteur de fichier? Je me réfère à IBM PC la PROGRAMMATION en LANGAGE assembleur par Pierre Abel
en.wikipedia.org/wiki/Handle_%28computing%29
L'équivalent Unix est un "descripteur de fichier". C'est exactement le même concept (un entier que vous pouvez passer au noyau, où il connaît déjà ouvrir le fichier). en.wikipedia.org/wiki/File_descriptor
L'équivalent Unix est un "descripteur de fichier". C'est exactement le même concept (un entier que vous pouvez passer au noyau, où il connaît déjà ouvrir le fichier). en.wikipedia.org/wiki/File_descriptor
OriginalL'auteur KawaiKx | 2011-05-24
Vous devez vous connecter pour publier un commentaire.
Il est un concept générique qu'on appelle généralement une "poignée" dans le contexte des logiciels Api. Dans les commentaires, vous avez probablement trouvé un lien vers le Article de wikipédia sur le sujet.
Vous avez affaire à une mise en œuvre spécifique d'un descripteur de type de données -- l'IBM PC/DOS des descripteurs de fichier retourné à partir de la
int 0x21
interface. Si vous souhaitez en savoir plus sur ces descripteurs de fichiers, vous pouvez consulter le livre Sans-papiers DOS, qui détaille les structures de données en mémoire qui vous permettent d'étudier ces poignées plus loin.Un autre type spécifique de la poignée est la descripteur de fichier retourné à partir de la POSIX standard de l'interface nommée
open()
. Cette fonction est implémentée dans la bibliothèque run-time C sur des plateformes telles que Linux, Windows NT, Mac OS, et de nombreux autres systèmes. L'entier renvoyé par un appel àopen()
ne peut pas être un nombre négatif.Sauf si vous exécutez sous DOS, votre descripteurs de fichiers sont probablement fournis par le Système d'Exploitation Windows NT. Ces descripteurs de fichiers sont retournés à partir de
CreateFile()
(qui est utilisé pour ouvrir et de créer des fichiers), et la seule valeur illégale pour un handle retourné par cette fonction estINVALID_HANDLE_VALUE
. I. e., l'API de Windows NT peut revenir ce qui serait considéré (par coulage) un "négatif" en entier, même si elle a ouvert le fichier.Dans tous ces cas, le descripteur de fichier est utilisé pour se référer à une structure de données qui garde une trace de la façon dont le fichier est ouvert. Une chose importante qui est suivie est le fichier actuel position. La position ou pointeur est définie dans la norme POSIX par le
lseek()
fonction et est lu par letell()
fonction. Toutread()
ouwrite()
a lieu à partir de la position de l'pointeur de fichier.Votre programme peut ouvrir le fichier de même, en vertu de deux poignées. Dans ce cas, le pointeur de fichier pour chaque poignée est distinct. Mise à jour le pointeur de fichier d'une poignée à l'aide de
lseek()
n'affectera pas le pointeur de fichier de l'autre poignée pour le même fichier.OriginalL'auteur Heath Hunnicutt
Un descripteur de fichier est une valeur entière qui est utilisé pour traiter un fichier ouvert. Ces poignées sont très spécifiques au système d'exploitation, mais sur les systèmes de soutien de l'open (), vous créez une poignée comme ceci:
Vous pouvez ensuite utiliser la poignée avec les appels de lecture/écriture. La non-transférabilité des poignées de dire que la plupart des gens à éviter et à la place utiliser le flux des fonctions de la bibliothèque C, comme fopen, fread, fwrite, etc.
Quoi, vous pensez que la plupart des gens utilisent open()? Pas en mon expérience.
Attendez, whait, il y a des gens qui en fait l'utilisation de open()??? 🙂 Oui, OK, je suis l'un d'entre eux, mais uniquement pour les OS dépendante des choses que vous ne pouvez pas le faire avec fopen()d fichiers...
Je suis sûr que les gens utilisent ouvert, je suis sûr que Linus l'utilise tout le temps 🙂 je suis également sûr que la plupart des gens ne le font pas.
Ce n'est pas le "système" qui prend en charge open(), c'est la bibliothèque d'exécution.
open()
fonctionne aussi bien sous Windows NT (sans cygwin) comme c'est le cas sous Linux.OriginalL'auteur Neil Butterworth
Une poignée est quelque chose que le noyau utilise en interne pour accéder à certaines ressources. Seulement le noyau sait vraiment ce qu'il signifie, le processus utilisateur est seulement dit ce que la valeur à utiliser lorsque l'on veut accéder à cette ressource. Ils ont un autre avantage, c'est que les descripteurs de fichiers peuvent être partagées entre les processus - alors que vous ne pouvez pas faire cela avec des pointeurs.
Windows utilise des poignées de partout... des fichiers, des images, des contextes de périphérique, les polices, etc.
OriginalL'auteur James