25
S. Domas Système d’Exploitation Accès aux fichiers en C 1ère année IUT Belfort-Montbéliard

S ystème d’ E xploitation

Embed Size (px)

DESCRIPTION

IUT Belfort-Montbéliard. 1ère année. S ystème d’ E xploitation. Accès aux fichiers en C. S. Domas. S. Domas. Définitions (1). Un fichier est une suite logique , structurée ou non, d’octets. C’est la plus petite unité que manipule un utilisateur du système. - PowerPoint PPT Presentation

Citation preview

Page 1: S ystème d’ E xploitation

S. Domas

Système d’Exploitation

Accès aux fichiers en C

1ère annéeIUT Belfort-Montbéliard

Page 2: S ystème d’ E xploitation

2

Définitions (1)

S. Domas

• Un fichier est une suite logique, structurée ou non, d’octets. C’est la plus petite unité que manipule un utilisateur du système.

• Sous Unix, il existe plusieurs types de fichiers : ordinaires, répertoires, spéciaux, liens symboliques,...

• Tous ces types sont représentés par une structure nommée inode (de index node).

Page 3: S ystème d’ E xploitation

3

Définitions (2)

S. Domas

• Un inode contient toutes les informations essentielles à la manipulation d’un fichier :• sa taille (en octets et nombre de blocs),• le nombre de liens physiques vers ce fichier,• son type,• l’identifiant utilisateur/groupe du propriétaire,• les droits d’accès,• les dates de dernier accès, modification,

changement,• des pointeurs vers les blocs du disque qui

contiennent les données du fichier.

Page 4: S ystème d’ E xploitation

4

Définitions (3)

S. Domas

• Les inode sont stockés de manière séquentielle dans des blocs réservés du disque et les données du fichier sont stockées dans les blocs libres du disque (pas forcément contigus -> fragmentation).

• Chaque fichier reçoit un numéro unique d’inode. Pour avoir ce numéro, on utilise la commande ls -i nom_fich, ou bien la routine C stat().

• Attention ! les noms de fichier sont stockés dans les entrées de répertoires et pas dans l’inode. C’est pourquoi plusieurs noms peuvent se rapporter au même données donc inode (= lien physique).

Page 5: S ystème d’ E xploitation

5

Types de fichiers

S. Domas

• Les principaux types de fichiers sont :• les fichiers ordinaires,• les répertoires,• les liens symboliques,• les fichiers spéciaux.

• Les fichiers ordinaires sont des suites d’octets structurées ou non. Ils contiennent du texte, des images, du code exécutable, etc.

• Les répertoires sont des fichiers qui contiennent une suite d’entrées de taille variable. Chaque entrée est un triplet <taille, nom, inode>.

Page 6: S ystème d’ E xploitation

6

Types de fichiers

S. Domas

• Les liens symboliques sont des fichiers qui contiennent le chemin d’accès (relatif ou absolu) à un fichier. Ce dernier n’a pas besoin d’exister pour créer le lien.

• Les fichiers spéciaux sont des tampons d’entrée/sortie pour les périphériques physiques (carte son, souris,...) ou logiciels (socket, pipe,...). Lire dans un tel fichier revient à lire les données en provenance du périphérique. Ecrire dans ce fichier envoie des données au périphérique.

Page 7: S ystème d’ E xploitation

7

Propriétaire et droits d’accès

S. Domas

• N’importe quel fichier appartient à un utilisateur répertorié du système.

• En général, les fichiers spéciaux représentant des périphériques physiques appartiennent à root (=sécurité).

• Les fichiers ordinaires et répertoires appartiennent généralement à ceux qui les ont créés.

• L’utilisateur propriétaire d’un fichier X gère les droits d’accès à X grâce à la commande chmod. Sauf root, personne ne peut modifier les droits d’accès d’un fichier qui ne lui appartient pas !

Page 8: S ystème d’ E xploitation

8

Propriétaire et droits d’accès

S. Domas

• Les droits d’accès sont paramétrables pour le propriétaire lui-même, pour les utilisateurs de son groupe et pour le reste du monde.

• Pour chacune de ces trois catégories, le propriétaire peut permettre ou non 3 types d’accès au fichier.

• Pour les fichiers ordinaires, accès en : lecture, écriture, exécution.

• Pour les répertoires, accès en : listage, modification (donc création et suppression), traversée.

Page 9: S ystème d’ E xploitation

9

Propriétaire et droits d’accès

S. Domas

• Attention ! La création ou la suppression d’un fichier dans un répertoire entraîne une modification des entrées du répertoire. Ces opérations sont donc possibles uniquement si les droits de modification du répertoire sont accordés.

• Accorder l’accès en écriture à un fichier donne uniquement le droit de modifier son contenu mais en aucun cas de l’effacer ! Si les droits du répertoire sont corrects, on peut même l’effacer sans avoir de droit d’écriture dessus.

Page 10: S ystème d’ E xploitation

10

Propriétaire et droits d’accès

S. Domas

• On utilise deux types de notation pour les droits d’accès : symbolique et numérale.

• Par exemple, un fichier ordinaire accessible en lecture/écriture/exécution pour le propriétaire, lecture/écriture pour le groupe, et lecture seule pour le reste du monde, on note :

rwx rw- r--

7 6 4

en symbolique

en numérale

propriétaire groupe le reste

Page 11: S ystème d’ E xploitation

11

Propriétaire et droits d’accès

S. Domas

• Ces droits d’accès sont stockés dans les neuf premiers bits d’un entier stocké dans l’inode. Les autres bits sont utilisés pour indiquer le type de fichier ainsi que trois autres droits spéciaux : le bit setuid, le bit setgid et le sticky bit.

• Le sticky bit ne s’utilise que pour les répertoires. Il signifie que seul le créateur d’un fichier (ou root) du répertoire peut l’effacer. Par exemple, le répertoire /tmp a les droits 777 + sticky bit. Cela implique que n’importe qui peut écrire dans ce répertoire mais seul le créateur d’un fichier peut l’effacer.

Page 12: S ystème d’ E xploitation

12

Propriétaire et droits d’accès

S. Domas

• Le bit setgid s’utilise essentiellement pour les répertoires. Il signifie que tout nouveau fichier du répertoire prend des droits de groupe identique à celui du répertoire.

• Le bit setuid s’utilise avec les fichiers exécutables. Il signifie que le processus qui exécute le fichier a les droits du créateur du fichier et non ceux de l’utilisateur qui a créé le processus. On parle respectivement d’identité effective et réelle que l’on récupère grâce aux fonctions C geteuid() et getuid().

Page 13: S ystème d’ E xploitation

13

Dates

S. Domas

• Trois dates sont stockées dans l’inode : dernier accès, dernière modification, dernier changement.

• Un accès est une consultation du fichier, que ce soit en lecture ou écriture,...

• Une modification est un accès en écriture.• Un changement est un accès pour créer le fichier,

modifier ses droits, changer le nombre de liens physiques, etc...

• On peut changer les deux premiers, sans pour autant modifier le contenu du fichier, grâce à la commande touch ou à la fonction C utime().

Page 14: S ystème d’ E xploitation

14

Types d’accès

S. Domas

• Dans tous les cas, pour accéder au contenu d’un fichier (ou le créer), il faut qu’un processus « l’ouvre » et le « ferme » lorsque les traitements sur le fichier sont terminés.

• Ouvrir un fichier permet de récupérer un descripteur de fichier qui est utilisé dans tous les appels en lecture, écriture et fermeture.

• Le type du descripteur ainsi que les routines employées dépendent du type d’accès : bas niveau ou haut niveau.

Page 15: S ystème d’ E xploitation

15

Accès bas niveau

S. Domas

• Pour ouvrir un fichier, on appelle la routine open() qui renvoie un descripteur de fichier entier.

• Les paramètres de open() dépendent du type d’ouverture (lecture et/ou écriture)

• Le descripteur de fichier permet de lire, écrire et fermer le fichier grâce aux appels aux routines read(), write() et close().

• Ces routines ne permettent de lire que des suites d’octets, à charge au programmeur d’identifier des structures dans le flux.

Page 16: S ystème d’ E xploitation

16

Accès bas niveau : exemple

S. Domas

int main ( int argc, char **argv) { int fd; char buf[50]; int nblu; // ouvre toto en lecture fd = open ( "toto", O_WRONLY | O_CREAT, S_IRWXU); strcpy (buf, "bonjour %s il est %d heure\n", "le monde"  , 3); write (fd, buf, strlen(buf)); close (fd); // ferme toto fd = open ( "toto", O_RDONLY); // ouvre toto en lecture nblu = read (fd, buf, 15); // lit 15 caractères buf [nblu] = ‘\0’; printf ( "%s\n", buf); // affiche : bonjour le mond close (fd);}

Page 17: S ystème d’ E xploitation

17

Accès haut niveau

S. Domas

• Les routines d’accès haut niveau appellent les routines bas niveau mais permettent de lire de types de données (int, double, string, …).

• L’ouverture se fait grâce à fopen() qui renvoie un descritpeur du type FILE * .

• Le descripteur s’utilise dans des routines telles que fread(), fwrite(), fclose(), fscanf(), fprintf(),...

Page 18: S ystème d’ E xploitation

18

Accès haut niveau : exemple

S. Domas

• Par exemple :int main ( int argc, char **argv) { FILE *fd; char buf[50]; int nblu; fd = fopen ( "toto", "w"); // ouvre toto en création/écriture fprintf (fd, "bonjour %s il est %d heure\n", "le monde"  , 3); fclose (fd); // ferme toto fd = fopen ( "toto", "r"); // ouvre toto en lecture fscanf(fd, "%s" , buf) // lit une chaînes de caractères printf ( "%s\n", buf); // affiche : bonjour fclose (fd);}

Page 19: S ystème d’ E xploitation

19

Descripteurs bas niveau (1)

S. Domas

• Un descripteur bas niveau est un simple entier qui détermine une case dans un tableau appelé table des descripteurs.

• Il n’appartient qu’à un seul processus : si deux processus récupèrent le descripteur 5, ils n’ont pas pour autant ouvert le même fichier. Cela implique également que chaque processus a sa propre table des descripteurs.

• Une entrée dans la table des descripteurs est en gros un pointeur vers l’inode du fichier.

Page 20: S ystème d’ E xploitation

20

Descripteurs bas niveau (2)

S. Domas

• A chaque fichier ouvert, le processus récupère le premier numéro libre dans la table en partant de 0. Par exemple, si le processus a 0, 1, 2 et 4 comme descripteurs occupés, alors le prochain fichier ouvert aura le descripteur 3.

• Quand un processus en crée un autre, il lui donne une copie de sa table des descripteurs. Le fils n’a donc pas besoin de réouvrir les fichiers pour y accéder.

Page 21: S ystème d’ E xploitation

21

Descripteurs par défaut

S. Domas

• Important ! Tout processus, lors de sa création hérite au moins de 3 descripteurs : 0, 1 et 2.

• Le descripteur 0 est nommé entrée standard. Il correspond au fichier par défaut dans lequel le processus peut lire des données.

• Le descripteur 1 est nommée sortie standard. Il correspond au fichier par défaut dans lequel le processus écrit des données.

• Le descripteur 2 est nommée sortie d’erreur standard. Il correspond au fichier par défaut dans lequel le processus écrit les données d’erreur.

Page 22: S ystème d’ E xploitation

22

Descripteurs par défaut

S. Domas

• Dans le cas d’un terminal, son entrée standard correspond généralement au fichier représentant le clavier, la sortie (normale & erreur) standard au fichier représentant la zone de l’écran où s’affiche la fenêtre du terminal.

• Un shell interactif étant un processus fils d’un terminal, il a les mêmes entrées et sorties standard que le terminal. C’est ainsi que le shell reçoit ce qu’on tape au clavier et affiche le résultat dans la fenêtre du terminal.

• Pour changer ce comportement par défaut, on utilise le principe des redirections.

Page 23: S ystème d’ E xploitation

23

Redirections (1)

S. Domas

• Une redirection consiste à changer le fichier correspondant à une entrée de la table des descripteurs.

• L’exemple le plus courant consiste à remplacer le fichier correspondant à la sortie standard, généralement une fenêtre terminal, par un fichier ordinaire. Au lieu d’afficher les données dans le terminal, le processus les écrit dans le fichier ordinaire sur le disque.

• La difficulté de cette opération vient du fait qu’il faut garder le même descripteur : le 1, mais changer le fichier qu’il représente.

Page 24: S ystème d’ E xploitation

24

Redirections (2)

S. Domas

• En C, la redirection se fait grâce à une combinaison d’appels aux routines open(), dup() et close(). Par exemple :

...fd = open ("toto");close(1);dup(fd);close(fd);...

permet de faire une redirection de la sortie standard du processus dans le fichier nommé toto.

Page 25: S ystème d’ E xploitation

25

Redirections (3)

S. Domas

• La routine dup() permet de dupliquer le descripteur fourni en paramètre. La copie est mise dans la première case libre de la table des descripteurs. On obtient ainsi deux descripteurs qui représentent le même fichier.

• Dans l’exemple précédent, le fait de fermer le descripteur 1 ferme le fichier correspondant à la sortie standard. La première case libre de la table des descripteurs devient donc la 1. En appelant immédiatement après la routine dup(fd), le descripteur 1 devient une copie du descripteur fd et représente alors le fichier toto.