-
Notifications
You must be signed in to change notification settings - Fork 4
Open file descriptors
Un processus utilisateur qui utilise la libc peut ouvrir et utiliser des fichiers de deux façons. Soit le fichier est ouvert avec fopen et dans ce cas, une structure de type FILE est allouée, soit le fichier est ouvert avec open et dans ce cas, on obtient juste un numéro.
Dans le cas où on utilise fopen et les fonctions associées (fread, fwrite, fseek, etc.), les lectures et écritures sont buffurisées pour limiter le nombre d'appels systèmes. À l'intérieur de la structure FILE, on retrouve un buffer, des indices pour gérer le buffer, des flags et enfin le numéro de fichier ouvert. Pour résumer, fopen fait un appel à open et alloue en plus une structure pour faire buffer.
Chaque processus contient une table des descripteurs de fichiers ouverts. En tout, un processus ne peut ouvrir que FOPEN_MAX fichiers. Chaque entrée de cette table contient 2 informations : si l'entrée est utilisée et l'adresse du descripteur de fichier ouvert (ofd). L'indice d'une entrée correspond au numéro renvoyé par la fonction open. Initialement, chaque processus possède 3 entrées dans cette table (entrée standard, sortie standard et sortie d'erreur).
Un descripteur de fichier ouvert contient toutes les informations utiles pour décrire un fichier, préciser l'octet actuel, l'inode, le cluster, etc. L'ofd est alloué et initialisé lors du open puis il sera passé en argument à chaque fonction du type read, write, seek, etc.