Cela peut sembler une question étrange, mais lorsque je vais ouvrir un fichier: Qu'est-ce que je suis de retour exactement? Je peux voir la page de l'homme dit: mais c'est qu'il? Est-ce juste un puis sur l'extrémité du noyau, le fichier Opérations de ce module (qui fournit la FD) La carte se lit dans la fonction puis le descripteur de fichier est utilisé dans le < code> n_read () code>, mais il est accessible pour obtenir des données: p> donc ... je pense que ce qui se passe ici est soit: p> < p> a) Un descripteur de fichier renvoyé à partir de Toute entrée qui pourrait aider dirige-moi? p> p>
La fonction Open () doit renvoyer un descripteur de fichier pour le fichier nommé qui est le descripteur de fichier le plus bas qui n'est pas actuellement ouvert pour ce processus code> p>
int code> ou y a-t-il des données attachées dans les coulisses? La raison pour laquelle je demande est de trouver du code (Linux / c) où nous ouvrons le fichier à partir de l'espace utilisateur: p>
n_read () code> Fonction: p>
ouvert () code> contient plus de données que d'une valeur entière descriptive
Ou de
B) le mappage entre un appel à "lire" dans l'espace utilisateur n'est pas aussi simple que je ne le fais pas et il manque un certain code dans cette équation. P>
3 Réponses :
Je pense que c'est juste un En règle générale, un descripteur de fichier est un index pour une entrée dans une structure de données de noyau-résident contenant les détails de tous les fichiers ouverts. Dans POSIX, cette structure de données s'appelle une table descripteur de fichier et chaque processus a sa propre table descripteur de fichier. P>
blockQuote> int code>.
De wikipedia : p>
En plus de la bonne réponse existante de @Nominal Aminal, il s'agit d'un entier, mais il pointe une entrée d'une structure dans le noyau appelée table descripteur de fichier. C'est au moins le cas avec Linux. Des différents champs faisant partie de cette structure, une personne intéressante est la suivante:
FILE * pointer; // descriptor to / from reference counts etc.
Table descripteur de fichier Code>,
Table de fichier Ouvrir le système Code>: Publib.Boulder.ibm.com/infocenter/Series/v5r3/index.jsp?top ic = / ...
Structures de données du noyau pour les fichiers ouverts b>: CIM.MCGILL.CA/~Franco/opsys-304-427/Lecture-notes/node27.htm l
Ceci est complètement incorrect. Sous Linux, le fichier * code> utilisé par standard I / O (et
fileno () code> et
fdopen () code>) n'a rien à voir avec le noyau
Fichier de struct code>
, sauf peut-être une similitude de passage de nom.
Descripteur de fichier n'est qu'un Lorsque vous Lorsque vous utilisez int code>. Le noyau l'utilise comme un index sur une table contenant toutes les informations associées, y compris la position du fichier, les ops de fichiers (fonctions du noyau qui fournissent le
lue () code>,
écriture () code>,
mmap () code> etc. syscalls), etc. p>
Ouvrir () CODE> Un fichier ou un périphérique, le noyau crée une nouvelle entrée de descripteur de fichier pour votre processus et renseigne les données internes, y compris le fichier OPS. P>
lisez () code>,
écriture () code>,
mmap () code>, etc. avec un descripteur de fichier valide, le noyau Tout simplement Recherchez la fonction correcte dans le noyau à appeler en fonction du fichier OPS de la table descripteur de fichier (et quels index de descripteur de fichier). C'est vraiment aussi simple. P>
Merci, belle explication simple ... Je pense que j'essayais d'essayer de compliquer cela pour moi-même. :)
Où est
fquit code> déclaré? Et oui, les descripteurs de fichiers ne sont que des entiers. Toute information sur eux doit être obtenue avec un appel système à partir de la table descripteur de fichier du noyau.
@ user1700513 - Vous pouvez assumer
fquite code> est 0.