Vous êtes sur la page 1sur 77

3me anne Licence MIAGE

Programmation systme &


Rseaux
Philippe Lahire
Universit de Nice Sophia-Antipolis
Octobre 2012

Ce cours fait de nombreux emprunts celui de R. Rousseau

N2

Version Octobre 2012

Organisation du cours
Planning :
Cours: 12 sances (1h30)
TP: 12 sances (1h30)

Contrle continu :
TP: deux trois TP nots
un ou deux contrles courts + contrle terminal (1h30)

Note complmentaire :
Le travail : Motivation,
Motivation Comprhension,
Comprhension Progression,
Progression
La tenue : Assiduit, Respect,

Matriel : PC sous linux

N3

Version Octobre 2012

Programme

Systme de Fichiers
Entre sortie + API (read,
Entre-sortie
(read write)
write )
Notion de processus + API (fork, exec)
Tubes + API (pipe)
Signaux + API

Langage :
principalement C

N4

Version Octobre 2012

Organisation des enseignements


cours

Semaine

TP

Introduction + Entres-Sorties

42

Introduction + Entres-Sorties

42

Systmes de Fichiers

43

TP N1 : E/S (1h30)

Systmes de Fichiers (prog)

45

TP N1 : E/S (1h30)

Processus

46

TP N2 : Syst. Fich. (1h30)

Processus (prog)

48

TP N2 : Syst. Fich. (1h30)

Tubes

49

TP N3 : Processus Fork (1h30)

Tubes

50

TP N4 : Processus exec (1h30)

Signaux

51

TP N4 : Processus exec (1h30)

10

Signaux

TP N5 : Tubes (1h30)

TP N6 : Signaux(1h30)

TP N6 : Signaux(1h30)

11

Rvision/Rattrapage

12

Contrle Terminal

TP Rvision/ Rattrapage
TP Rvision / Rattrapage

Version Octobre 2012

N5

Tentative de bibliographie

Windows

Uniix

Concepts

1.

S. Harbison & G. Steele Jr. C, a reference manual (1st ed. 1984) Prentice
Hall, 2nd edition, 1987, 404 p.
g
& D. Ritchie The C Programming
g
g Language
g g ((1st ed. 1978),
) ,
2. B. Kernighan
Prentice Hall, 2nd ed., 1988. Traduction franaise Masson, 1990.
3. A. Tannenbaum Systmes dexploitation : systmes centraliss,
systmes distribus MacGraw Hill, 1990. Traduction franaise (2e ed)
Dunod, 1999
4. A. Siberschatz & P. Galvin Operating Systems Concepts , 5e ed,
Addison-Wesley, 1998.
5. J. Beauquier & B. Berard Systmes dexploitation : concepts et
algorithmes MacGraw Hill, 1990.
6. W. Stevens Advanced Programming in the Unix environment Addison
Wesley 1992,
Wesley,
1992 744 p
p.
7. M.J. Bach Conception du systme Unix, Prentice Hall, 1986. Traduction
franaise Masson, 1991.
8. J.M. Rifflet La programmation sous Unix, Ediscience intern., 3me d.,
1993, 630 p.
9. U. Vahalia Unix Internals : the new Frontiers Prentice Hall, 1996
10. A.D. Solomon Le guide officiel sur larchitecture et le noyau Windows
NT 2nd ed., Microsoft Press, 1998.
11. Site microsoft

Version Octobre 2012

N6

Documentation en ligne
Sur le langage C
En L2MI ((Gilles Menez)) :
www-mips.unice.fr/menez/L2/L2cours.html
Cours vido sur le langage C de lUniversit de Paris VI :
www.infop6.jussieu.fr/cederoms/Videoc2000/

Sur la programmation rseau :


Cours rseau du CNRS : www.urec.fr/cours
Cours programmation rseau avec sockets, de Brian "Beej" Hall :
www.ecst.csuchico.edu/beej/guide/net/html/.
hi
d b j
id
h l

A propos de lUE Programmation systme et rseau :


Site web officiel de cet enseignement :
http://deptinfo.unice.fr/~lahire/enseignement/SYSL3

Chapitre 1: Prsentation gnrale

Version Octobre 2012

N8

Chapitre 1: Prsentation gnrale

Historique des systmes UNIX


Vers une normalisation: POSIX
Unix propritaires ou Linux
Survol de l'architecture
Noyau du systme
Principales caractristiques
Rappels des notions de base: le Shell
Principales commandes
Interprtation de commande
Notion de base: La session, le manuel,
Parallle avec Windows

N11

Version Octobre 2012

Vers une normalisation: POSIX


Portable Open System Interface eX
Xchange
Norme IEEE & Description:

1003.0: Guide et prsentation


1003.1: Bibliothque de fonctions
1003.2: Shell et utilitaires
1003.3: Mthode de tests et conformit
1003.4: Extension temps rel
1003.5: Form. appels systmes en ADA
1003 6: Scurit
1003.6:
1003.7: Administration systme
1003.8: Accs commun aux fichiers
1003.9: Interface sous Fortran 77
1003.10: Interface supercalculateurs

Normes: ISO 9945-1 (P1003.1)

N12

Version Octobre 2012

Unix propritaires ou Linux


Linus Torvald (FIN-91 sur i386)
p
Philosophie
Un noyau et des outils de base
Indpendant de tout constructeur

Libre et Bas sur des contributions bnvoles (GPL)


Organisation en projets ambitieux (FSF, SourceForge)
Un grand nombre d'utilisateurs motivs
Un excellent produit: stable et code original libre de droits

Port un grand nombre d'architectures :


SPARC, INTEL, ALPHA, MAC,

Quelques projets:
Apache
Gnome
GNU

N13

Version Octobre 2012

De nombreuses distributions Linux


Les diffrences
Nom: Debian, Redhat, Suse, Mandrake,
Prix (commerciale ou pas),
Nombre de logiciels, Versions des logiciels,
Pilotes supports,
Organisation des fichiers de configuration,
Procdures d'installation,
Srieux de la gestion (site web, mise jour, etc.),
q
des versions
Frquence
Certifications,

Mais encore:
Debian: de 4500 9000 Logiciels,
Orient informaticien,
Une drive vers l'automatisation,

N14

Version Octobre 2012

Survol de l'architecture (1)


UTILISATEUR
Interface Utilisateur

PROGRAMMES UTILITAIRES STANDARD


Shell, diteur, compilateur,
Interface Bibliothques

BIBLIOTHEQUE STANDARD
fopen, fclose, fread, fwrite,
Interface Appels Systmes

SYSTEME DEXPLOITATION UNIX


Gestion des processus, de la mmoire, des E/S,
MATERIEL: UC, mmoire, disques, terminaux, etc

Autre systme en couche : logiciels rseaux suivant norme - OSI

N17

Version Octobre 2012

Noyau du systme
Programme Utilisateur

Bibliothques

Interface des appels systmes

Sous-systmes
de contrle
de fichiers

Sous-systmes
de contrle
des processus

Communication interprocessus
Ordonnanceur
Gestion mmoire

Cache Buffer
Caractre
Bloc
Contrleurs de priphriques

Contrle de la partie matrielle

PARTIE MATERIELLE

Version Octobre 2012

N19

Principales caractristiques
Langage de haut niveau
y :p
plus d'1 million de lignes
g
de C
Le noyau
Expressivit et simplicit de l'interface
Construction de programmes: des primitives
lmentaires
Un systme de fichiers hirarchique
Un format cohrent de fichier (octet)
Accs
ccs aux
au p
priphriques
p ques
Multi-utilisateurs et multitches
Indpendance avec l'architecture matrielle
54 % du code
Mmoire virtuelle (versions actuelles)

N21

Version Octobre 2012

Notion dinterprte de commandes


Shell : Interface textuelle vers le systme
Fonctionnalits
Message d'invitation (prompt)
Attend la saisie d'une commande
Commandes internes
Commandes externes (charg. + exec. programmes)
Historique des commandes prcdentes
Redirections et tubes
Structures de contrles (boucles, tests, fonctions, ...)
Mcanisme d'alias, variables d'environnement
Gestion de processus

N22

Version Octobre 2012

Diffrents shells unix possibles


Bourne shell (historiquement, le 1er)
Toujours utilis par les scripts internes du systme
C-shell (csh, tcsh)
syntaxe diffrente
volutions du Bourne shell
ksh (Korn shell)

O indiquer le shell par dfaut ?

bash (Bourne Again shell): le shell du projet GNU


zsh: volution prtendument "ultime" du bourne shell
Amliorations : historique, compltion, ...
Possibilit de (demander ) changer le shell par dfaut
lanc automatiquement au dbut de session

N23

Version Octobre 2012

Quelques lments dadministration


/etc/passwd

nom_du_compte : mot_de_passe : numero_utilisateur : numero_de_groupe :


commentaire : rpertoire : programme_de_demarrage
programme de demarrage

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/bash
daemon:x:2:2:daemon:/sbin:/bin/bash
news:x:9:13:News system:/etc/news:/bin/bash
user1:x:500:100:Mr User 1......:/home/user1:/bin/bash
/etc/group
nom_de_groupe : champ_special : numero_de_groupe : membre1, membre2
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:
users:x:100:

N28

Version Octobre 2012

Caractres spciaux du shell


Pas en C
Certains caractres ont une signification spciale pour le shell
* : 0 ou p
plusieurs caractres q
quelconques
q
t*o : nom de fichier qui dbute par t et finit par o
? : 1 (et un seul) caractre quelconque
t?t? : dsigne toto ou titi ou ttta, ...
\ : enlve la signification spciale du caractre qui suit
t\*to : dsigne t*to
Certaines constructions ont une signification spciale
[a-z] : un caractre entre a et z (a ou b ou c ... ou z)
[aefgij] : un caractre (et un seul) parmi a,e,f,g,i,j
t[oau]t[oau] : toto, ou totu, ou tata, ou tato, ...
{mot1,mot2} : soit mot1, soit mot2

N34

Version Octobre 2012

Notions de base: Le manuel


Principales sections (environ 20 Mo)
taille dpendante des paquetages - nyx : (20 Mo de .gz)

man1: Commandes utilisateurs partir shell (1800)


man2: Primitives du noyau (250)
man3: Routines C (1400)
man4: Fichiers spciaux: les pilotes des priphriques (disque dur,
clavier/cran, graveur, lecteur de dvd, zip, mmoires usb...) (90)
man5: Formats de fichiers et protocoles (200)
man7: Format des systmes de fichiers, jeux de caractres, macros,
nroff... (80)
man8: Commandes dadministration partir shell (450)
man9: routines du noyau non standards (90)

Attention : Un ordre d'valuation


Base whatis: recherche de commandes
apropos: recherche de mots cls

N35

Version Octobre 2012

Anatomie dune page de manuel (1)


Section
Br ve d e scr ip t ion

Syn t a xe s possible s

De scr ipt ion d t a ill e de la com m a n de

De s c r ip t ion d t a ill e d e s
op t ion s (or d r e a lp h a b .)

P r om p t d u P AGE R

' q ' : q u it
'b ' : r e tou r 1 p .
< s p c > : d fil 1 p .
< e n t e r > : d fil 1 l.
/xy : r e c h e r c h e r xy

10

N36

Version Octobre 2012

Anatomie dune page de manuel (2)

Au t r e s pages iin t ressa


A

ntes
su r un su jet voisin

N u l n ' e s t p a r fa it ...

Pa r fois a m bigu s ou con fu se s


Ve r sion a ngla ise (d fa u t ) :
unset LANG LC_ALL
pu is m a n n ouve a u...

N38

Version Octobre 2012

Principe gnral d'utilisation


/* Fichier Z2.h */
Zlib.a
R1 (int i)

man r1

Z1.o

PREPROCESSEUR
/* Fichier Y.c */

Z2.o
........
R1 (int i) {......}
.......
Z3.o

#include "Z2.h"
main ()
{ /* MAN !!!!! */
R1 (23)
........
}
a.out
COMPILATION
Y.o
EDITION DE LIEN

11

N39

Version Octobre 2012

Traitement standard des erreurs (1)


Exception vs compte-rendu
Presque toutes fonctions/appels systmes

entier
pointeur

normale : positive ou nulle, non void ,


anormale : ngative ou void

Utilisation de errno :
Syntaxe : extern int errno ;
n dernire erreur dtecte par un appel systme
n
pas remise zro chaque appel.
intro(2) : liste des diffrents codes

Mthodologie : test compte-rendu + errno

Version Octobre 2012

N40

Traitement standard des erreurs (2)


Fonctions associes
#include <string.h>
string.h
char* strerror (int errnum)
retourne message en clair associ errnum
#include <stdio.h>
void perror (const char* message)
affiche message + message associ errno (stderr
stderr)

Mthodologie :
utiliser en sappuyant sur man (Errors / Erreurs)
ou traitement ad hoc (ex: gestion paramtres de main )

12

N41

Version Octobre 2012

Traitement standard des erreurs (3)


Exemple
#include <string.h>
g
#include <stdio.h>
int main (int argc, char* argv[]) {
FILE* fichier;
if (argc != xxx) { ici > 1
fprintf(stderr, nombre paramtres incorrect );
exit(1
exit(
1)
}
if ( (fichier = fopen(argv[1], rw )) == NULL) {
fprintf(stderr,Erreur %i:%s \n , errno, strerror(errno));
exit(2
exit(
2); }
}

N42

Version Octobre 2012

Traitement des erreurs de W. Stevens (1)


+ return
+ exit(1)

+ abort

format message derreur


avec nb % + nb arguments

Affiche aussi le message associ errno


Macros : en majuscule et sans paramtre
Pas de message pass en paramtre mais :
Affichage: Nom du fichier + numro de ligne

13

N43

Version Octobre 2012

Traitement des erreurs de W. Stevens (2)


Exemple
#include <stevens.h>
Pas par dfaut dans linux
#include <stdio.h>
int traiter_fichier (char* f) {
FILE* fichier; char tab[30];
if ( (fichier = fopen(f, rw )) == NULL)
ERR_EXIT;;
ERR_EXIT

if (fclose(fichier)) != 0)
ERR_RETURN;
ERR_RETURN
}

Chapitre 2: Entres - Sorties

14

N45

Version Octobre 2012

Plan de travail
Principes gnraux

Structures internes
Hirarchie de descripteurs
Tables pour la gestion des entres-sorties

Principaux appels systmes


Ouverture / fermeture de fichiers: open,
open close
Entres-sorties: read, write
Positionnement : lseek, fseek
Duplication en vue de redirection : dup, dup2

N46

Version Octobre 2012

Mise au point / Survol


bash

gcc

FILE* fopen (.) { }

int open (.) { }

Bien sur on se sert


aussi du shell
pour lancer un
programme

int read (.) { }

Systme exploitation

Consulte / met jour


appelle / excute

emacs

Tables :
Fich. Ouvert
Volumes
Blocs
.
processus

15

Version Octobre 2012

N47

Principes gnraux (1)


Exemples :
hardware (/dev)
Sous UNIX: tout est fichier
Accs au rseau (sockets)
Priphrique rseau,
Priphrique,
rseau mmoire
mmoire... Tubes
T b persistants
i t t (FIFO)
Tables du noyau (TDF)
Fichier = une suite doctets

Organisation : Hirarchie de
Montage :
Systme de fichiers (partitions)
local
rpertoires
distant
Fichiers normaux ((en anglais
g
Regular)
g
)
Liens entre fichiers (symboliques et physiques)
Fichiers virtuels (/proc)
Fichiers spciaux (priphriques,FIFO,)

Version Octobre 2012

N48

Principes gnraux (2)


Mthodes daccs
q
((read))
Squentiel
Direct - unit: loctet (lseek)
Protection
propritaire, groupe dutilisateurs, les autres
Pas de journal (log) mais possibilit de verrous
Gnralit + simplicit
Implantation de SGBD : bonne aptitude
fichiers trou, accs direct, octets
mcanismes additionnels non intgrs:
volution (gestion des versions), typage des
donnes, systme transactionnel (SGBD),

16

N49

Version Octobre 2012

Principes gnraux (3)


Deux points de vues
Utilisateur ((commandes, applications,)
pp
)
Programmeur (C et appels systmes)
Utilisateur
changes entre un processus et des entits :
disque, machine distante, autre processus,
terminal...
Fichier au sens large
Programmeur
Echanges avec nimporte quelle entit par des
flots doctets conscutifs
Accs direct possible sur des disques locaux
ou distants (curseur lecture/criture)

N50

Version Octobre 2012

Principes gnraux (4)


Disque

Une suite doctets

Curseur
Tampon

Descripteur de fichier :
Prdfini (fich.
(fich Stand.)
Stand )
A associer (open)

F.D.

Simple numro
Mmoire

Programme

17

N51

Version Octobre 2012

Principes gnraux (5)


Dans le programme

Appel du programme

Association ((open)
p
)
nom externe / Desc. Fichier
chemin relatif
chemin absolu
Pas de caractre gnrique

Utilisation (read, write)

chemin relatif
chemin absolu

Desc. Fichier: numro de voie


obtenu par association
prdfini :

On nutilise jamais
directement
Le clavier ou lcran

0 : voie standard dentre


1 : voie standard de sortie
2 : voie standard derreur

N52

Version Octobre 2012

Un modle dE/S adaptable aux langages

Impact:
Performance
Utilisation

Un modle dentre sortie de bas niveaux

Langage C
Java

18

Version Octobre 2012

N53

Modle langage C vs Modle UNIX


Appels systmes (1)
open, lseek, write, stat...
Mcanismes de base
Streams et routines C (2)
isastream, fopen, fseek, fread, fwrite, fgets, feof, ...
Notion de stream
Remarques et Conclusion
Mode noyau
y et Premption
p
struct FILE vs numro d'entre dans la TDF
lect./cr. d'enregistrement vs d'octet
(2) utilise (1)
signatures de (2) indpendantes du systme, mais
l'implmentation dpend elle, du systme ...
qu'en concluez vous ?

Version Octobre 2012

N54

Qu'est-ce qu'un processus


Dfinitions
Instruction = indcomposable et indivisible
Processeur = ...
Processus = excution d'un programme
(instructions + donnes)
Approche intuitive
UNIX = systme "temps partag
Plusieurs processus en mme temps
Un seul processus actif
Attente des autres (dans/hors mmoire)

19

N55

Version Octobre 2012

Tables pour grer les fichiers


Position :
tat :
Nombre :

N inode :
Nb. copies :

Inode Infos

Position :
t t :
tat
Nombre :

N inode :
Nb. copies :

Processus P
P2

Inode Infos

Position :
tat :
Nombre :

Tables Descripteurs Fichiers


0
1
2
3
4
5

N inode :
Nb. copies :

0
1
2
3
4
5

Tables partages

Processus P1

Priv

Espace utilisateur

Inode Infos

Position :
tat :
Nombre :

Table fichiers

Table inodes

N56

Version Octobre 2012

Modle UNIX - Synthse


Trois points de vues
Le p
processus
Lusage
Le fichier

Rles :
Gestion des voies dchange
g
Gestion du curseur
Gestion des protections

Deux abstractions (par point de vue)


Processus : Usage et nature du fichier
Usage : raison de lutilisation par le processus
et la nature du fichier
Fichier : raison de lutilisation et usage du fichier

Permettre le partage
Dun mme usage par un/plusieurs processus
Dun mme fichier par un/plusieurs processus
Dune mme fichier par un/plusieurs usages

20

N57

Version Octobre 2012

Ouverture/Cration dun fichier: open


Descripteur de
fichier
Nom fichier
Mode douverture
Lors de la cration:
f(perm,umask)

Mise jour des tables internes (processus + noyau)


Oflags/perm : 9/15 macros dans les fichiers .h
Un petit ensemble de combinaisons valides
Les incohrences ne sont pas dtects

Version Octobre 2012

N58

Ouverture/Cration: open (oflags)


Valeurs possibles
O_CREAT: cration, si le fichier nexiste pas
O_EXCL: combin avec O_CREAT
CREAT,, cration si le fichier nexiste
pas, erreur sinon
O_RDONLY: ouverture en lecture seule.
O_WRONLY: ouverture en criture seule (cration ou ajout)
O_RDWR: ouverture en lecture et criture (mise jour
nimporte o)
O_TRUNC: libration du contenu du fichier,, sil existe + curseur
plac en dbut de fichier
O_APPEND: contenu du fichier non touch + curseur plac en
EOF
O_SYNC: attend la fin dcriture sur le mdia aprs chaque
write (pas de cache)
O_NONBLOCK: E/S non bloquantes.

21

N59

Version Octobre 2012

Ouverture/Cration: open (oflags)


Rgles et choix incohrents
Choisir lun des 3 types exclusifs daction :
O_RDONLY, O_WRONLY,
O_RDONLY
O_WRONLY O_RDWR

+
O_CREAT si la cration est permise O_RDONLY
O_EXCL si le fichier ne doit pas dj exister O_WRONLY +
O_CREAT
O_TRUNC ou O_APPEND pour placer le curseur au dbut (resp. la
O_EXCL)
fin) du fichier (doit donc dj exister O_EXCL
O_RDONLY.
O_SYNC si les critures doivent tre immdiates O_RDONLY

Version Octobre 2012

N60

Ouverture/Cration: open (oflags)


Exemples
open (nomFichier, O_RDONLY)
Curseur au dbut du pour lire

open (nomFichier, O_WRONLY | O_CREAT | O_TRUNC


O_TRUNC, )
[Cration + effacement] si ncessaire + curseur au dbut pour crire

open (nomFichier, O_WRONLY | O_APPEND,


O_APPEND )
Curseur en fin pour crire

open (nomFichier, O_WRONLY | O_CREAT | O_APPEND


O_APPEND, )
Cration si ncessaire + curseur en fin pour crire

open (nomFichier, O_WRONLY | O_CREAT | O_EXCL


O_EXCL, )
Cration si nexiste pas (erreur sinon) + curseur au dbut pour crire

open (nomFichier, O_RDWR


O_RDWR)
Doit exister + curseur au dbut pour lire ou crire nimporte o

22

N61

Version Octobre 2012

Ouverture/Cration: open (perm)


Rgle
Les permissions associes un fichier lors de sa cration
sont fixes par la conjonction de deux points de vue :
Point de vue :
du programmeur, qui propose des permissions logiques
Ex: Compilateur: excution / Editeur: lecture et criture
de lutilisateur, propritaire des fichiers crs, qui
peut interdire certaines permissions
umask : pas de lecture/criture pour les autres
Masque interdictions

Permission applique = perm & ~umask


umask

N62

Version Octobre 2012

Ouverture/Cration: open (perm)


Valeurs possibles

Pour donner des droits


Le propritaire

Lee G
Groupe
oupe p
propritaire
op ta e

Les autres

23

N63

Version Octobre 2012

Ouverture/Cration: open (perm)


Exemple

open ( f , O_WRONLY | O_CREAT,


) 1 1 1 0 0 0 0 0 0

|
0 0 0 1 1 1 0 0 0
|
0 0 0 0 0 0 1 1 1

umask
022 0 0 0 0 1 0 0 1 0
Group
p = write
Other = write

1 1 1 1 1 1 1 1 1
~ 1 1 1 1 0 1 1 0 1

&

=
1 1 1 1 0 1 1 0 1

755

Version Octobre 2012

N64

Cration d'un fichier


Equivalences
open (path, O
O_WRONLY
WRONLY | O
O_CREAT)
CREAT)
creat (path, mode)
mknod : Fichier spciaux (FIFO, ...)
Deux Phases: cration et ouverture
Voir Communication inter-processus
Paramtres oflag = 010000 | 001000 (O_RDONLY,...)
Commande(s) associe(s): emacs, gcc, cp, ...
Structure(s) interne(s): tables, super-bloc

24

N65

Version Octobre 2012

Cration d'un fichier:


mcanisme interne
Etapes
Localisation inode parent (I.P
I.P),
Recherche nom fichier
...
Si le nom nexiste pas alors:
Verrouillage I.P.
I.P., liste des inodes libres
Allocation inode: inode-mmoire = get (inode-disque)
I.P.: Informations fichier
Modification I.P.

Sinon (le nom existe) :


Dsallocation blocs: contenu fichier
Non-Modification I.P.

Importance des verrous et du mode noyau

N66

Version Octobre 2012

Ouverture/Cration d'un fichier (1)


Processus 1
#include <sys/types.h>
y yp
#include <sys/stat.h>
#include <fcntl.h>
int main ()
{ int rfd, wfd, rwfd;

Attention !

if ((rfd = open
open("/etc/bashrc",O_RDONLY)) < 0)
erreur;
if ((rwfd = open
open("/etc/bashrc", O_RDWR)) < 0)
erreur;
if ((wfd = open
open("/.bashrc",O_WRONLY | O_CREAT)) < 0)
erreur;

}
Action: ouverture: rfd, rwfd - cration/ouverture: wfd

25

N67

Version Octobre 2012

Ouverture/Cration d'un fichier (2)


Processus 2
#include <sys/fcntl.h>
#include <sys/stat.h>
<sys/stat h>
#include <sys/types.h>
int main ()
{
int rfd, wfd;
if ((wfd = open
open("/etc/bashrc",O_WRONLY)) < 0)
erreur;
open("/.bash_profile",O_RDONLY)) < 0)
if ((rfd = open
erreur;
}
Deux processus indpendants
Des tables partages et prives
Action: ouverture: rfd - ouverture: wfd

N68

Version Octobre 2012

Ouverture d'un fichier: Vision interne

Position :
tat :
Nombre :

Position :
tat :
Nombre :
Position :
tat :
Nombre :

Espace utilisateur

Position :
tat :
Nombre :

/etc/bashrc

N inode :
Nb. copies :

I d Infos
Inode
I f
O_RDWR
1

/.bashrc

N inode :
Nb. copies :
O_WRONLY

Inode Infos

1
O_WRONLY
1
O_RDONLY
1

Table fichiers

Processus P2

Position :
tat :
Nombre :

1
2

0
1
2
3
4
5

0
1
2
3
4
5

O_RDONLY

Processus P1

Attention : partage possible dup/fork

/.bash_profile
N inode :
Nb. copies :

Inode Infos

Table inodes

26

N69

Version Octobre 2012

Fermeture dun fichier: close


Descripteur de
fichier

Mise jour des tables internes (processus + noyau)


fd est une entre dans la TDF :
open, fork
open
fork, voie standard
Fermeture par le noyau des fichiers la terminaison dun
processus (exit
exit(?))

Version Octobre 2012

N70

Fermeture d'un fichier


Processus 2
#include <unistd.h>
int main ()
{
int rfd, wfd;
/* Ouverture et utilisation */
...
close (rfd); /* exit: fermeture implicite */
close (wfd); /* exit: fermeture implicite */
}
Tables
T
bl fichiers/inodes
fi hi /i d
Dcrmentations compteurs
Dsallocations lments
Libration complte si le compteur atteint 0
Commande(s) associe(s): exit, diteur
Structure(s) interne(s): tables, buffers

27

N71

Version Octobre 2012

Fermeture d'un fichier: Vision interne


/etc/bashrc

null
null

Espace utilisateur

Position :
tat :
Nombre :
Position :
tat :
Nombre :
Position :
tat :
Nombre :

N inode :
Nb. copies :

I d Infos
Inode
I f
O_RDWR

/.bashrc

N inode :
Nb. copies :
O_WRONLY

Inode Infos

1
O_WRONLY
1
O_RDONLY
1

Table fichiers

Processus P2

Position :
tat :
Nombre :

1
2

0
1
2
3
4
5

Position :
tat :
Nombre :

0
1
2
3
4
5

Processus P1

O_RDONLY

/.bash_profile
N inode :
Nb. copies :

Inode Infos

Table inodes

N72

Version Octobre 2012

Lecture dun fichier: read


Nombre octets lus
Descripteur fichier
Nombre octets lire
Lieu de stockage
donnes lues

Mise jour des tables internes (noyau)


fd est une entre
d
dans lla TDF ouverte en llecture :
open, fork
open
fork, voie standard
Allocation de buffer imprative
Nb octets lus Nb octets lire (EOF, priphrique,)
Dbut = position du curseur Aprs = position + nb oct.lus

28

Version Octobre 2012

N73

Lecture d'un fichier


Processus 1
#include <sys/types.h>
#include <unistd.h>
<unistd h>
int main ()
{
int rfd, nb; char tabp[30]; char tabg[1024];
/* Ouverture rfd */
...
nb = read (rfd, tabp, 30);
nb = read (rfd, tabg, 1024);
nb = read (rfd, tabp, 20);
}
Lecture travers une mme entre
Commande(s) associe(s): cat, more, emacs, ...
Structure(s) interne(s): tables, blocs, buffers

Version Octobre 2012

N74

Lecture d'un fichier: Commentaires


Verrouillage/partage
Dure d
d'un
un read
Verrouillage explicite possible
Schma lecteur/crivain possible
Plusieurs descripteurs possibles

Lecture relle
Attention: Lecture bloc par bloc
Bloc dans le "buffer cache" ou sur le disque?
Lecture anticipe

29

Version Octobre 2012

N75

Lecture d'un fichier


Processus 1
#include <sys/types.h>
#include <unistd.h>
<unistd h>
int main ()
{
int rfd1, rfd2, nb;
char tab1[30], tab2[30];
/* Ouverture rfd1, rfd2 */
...
nb = read (rfd1, tab1, 30);
nb = read (rfd2,
(rfd2 tab2,
tab2 30);
}

Lecture travers plusieurs entres attention


Ici: 2 descripteurs indpendance
fork
fork: "2" descripteurs dpendance

Version Octobre 2012

N76

Lecture dun fichier (2)

30

N77

Version Octobre 2012

Ecriture dans un fichier: write


Nombre octets crits
Descripteur fichier
Nombre octets
crire
Donnes crire

Mise jour des tables internes (noyau)


fd est une entre dans la TDF ouverte en criture :
open, fork
open
fork, voie standard

Nb octets crits Nb octets crire


EOF, priphrique (imprimante, rseau), signal, mdia/quota plein

Dbut = position du curseur


Aprs = position + nb octets crits

Version Octobre 2012

N78

Ecriture dans un fichier


Processus 1
#include <sys/types.h>
#include <unistd.h>
<unistd h>
int main ()
{
int wfd, nb;
char tab[30];
/* Ouverture wfd */
/* Remplissage de tab */
...
nb = write (wfd,
(wfd tab,
tab 30);
/* Remplissage partir de tab */
...
nb = write (wfd, tab, 30);
}
Commande(s) associe(s): cat, emacs,
Structure(s) interne(s): Tables, blocs, buffer

31

N79

Version Octobre 2012

Ecriture dans un fichier (2)

N80

Version Octobre 2012

Ecriture d'un fichier: commentaires


Verrouillage/partage

Dure d
d'un
un write
Verrouillage explicite possible
Schma lecteur/crivain possible
Plusieurs descripteurs possibles

Ecriture relle
Allocation de blocs par ncessit (indirect, donnes)
Ecriture partielle Lecture du bloc
Ecriture diffre des blocs: "buffer cache"

32

N81

Version Octobre 2012

Positionnement dans un fichier: lseek


position
Descripteur fichier

Entier 64 bits

dplacement
Rfrentiel

Mise jour des tables internes (noyau)


fd est une entre dans la TDF ouverte en criture :
open, fork
open
fork, voie standard

Retour = position par rapport au dbut du fichier


Rfrentiel = SEEK_SET, SEEK_CUR, SEEK_END
dplacement positif/ngatif
avant (resp. aprs) le dbut (resp. fin)

N82

Version Octobre 2012

Positionnement : commentaires
Rfrentiel :
SEEK SET : par rapport au dbut
SEEK_SET
SEEK_CUR: par rapport au curseur
SEEK_END :par rapport la fin
Comment connaitre la position courante?

O peut se positionner
On
i i
aprs
lla fi
fin
Toute criture cre des trous
La lecture de trous rend des octets nuls

Une position ngative est souvent une erreur

33

N83

Version Octobre 2012

Positionnement dans un fichier


#include <sys/types.h>
#include <unistd.h>
int main () {
int fd, pos;
char tab[30];
/* Ouverture fd */
...
pos = lseek (fd, 1000, SEEK_CUR); // voir aussi SEEK_SET
pos = lseek (fd, -50, SEEK_END);
}
read
read/write
write accs squentiel

lseek accs direct


Pas d'accs disque
Commande(s) associe(s): diteur
Structure(s) interne(s): tables des fichiers

N84

Version Octobre 2012

Duplication dentre: dup2


Descripteur fichier
dupliquer

Descripteur fichier
o copier
Mise jour des tables internes (processus et noyau)
fd1 est une entre
d
dans lla TDF
fd2 est une entre libre (ou qui sera ferme)
le contenu de fd1 est recopi dans fd2 + MAJ de
compteurs de rfrences
dup ralise la copie dans la premire entre libre

34

N85

Version Octobre 2012

Duplication dentre: dup


Descripteur fichier
dupliquer

Dmarche
1. Sauvegarde de fd2 (dup)
2. Recopie de fd1 dans fd2
p + close))
3. Restauration ((dup2

Idem dup2
La copie se fait dans la 1re entre libre fl
le contenu de fd1 est recopi dans fl + MAJ de compteurs
de rfrences
Il est ncessaire de connatre ltat de la TDF

N86

Version Octobre 2012

dup: mcanismes de base (1)


0
1
2
3
4
5

Position :
tat :
Nombre :
Position :
tat :
Nombre :

/etc/bashrc
N inode :
Nb. copies :

I d Infos
Inode
I f

Processus P1

O_RDONLY

O_RDWR
21

Espace utilisateur

Table fichiers

Table inodes

35

Version Octobre 2012

N87

dup: mcanismes de base (2)


Fonctionnement gnral
D li i d
Duplication
du d
descripteur
i
d
de fi
fichier
hi
Table des fichiers (ouverture): incrmentation des
rfrences
Table des fichiers (fermeture): dcrmentation des
rfrences
Table des inodes: pas de modification
D
Deux
accs
au mme

b
buffer
ff
Utilisation
dup et dup2 (routine)
Implmentation du shell: redirections E/S
Liens avec les structures internes: voir open

Version Octobre 2012

N88

dup: exemple simple


#include <sys/types.h>
#include <unistd.h>
#i l d <fcntl.h>
#include
f tl h
int main () {
int fd, nfd;
char tab1[512], tab2[512];
fd = open ("/etc/bashrc", O_RDONLY);
/* ex: fd = 3 */
...
nfd
fd = dup
d (fd);
(fd) /* ex: nfd
fd = 6 */
read (fd, tab1, 512);
read (nfd, tab2, 512);
close (fd);
read (nfd, tab2, 512);
...
}

36

N89

Version Octobre 2012

dup2: exemple simple


#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
<fcntl h>
int main () {
int fd, nfd;
char tab1[512], tab2[512];
fd = open ("/etc/bashrc", O_RDONLY);
/* ex: fd = 3 */
nfd = dup2 (fd, 4); /* nfd = 4 */
//* si non libre: "4"
4 est ferm avant *//
read (fd, tab1, 512);
read (nfd, tab2, 512);
close (fd);
read (nfd, tab2, 512);
...
}

Version Octobre 2012

dup:
exemple de la redirection en shell

N90

#include <sys/types.h>
#include <unistd.h>
#i l d <fcntl.h>
#include
f tl h
int main () {
int pid, fd, nfd;
...

if ( (pid = fork ()) < 0) erreur;


if (pid == 0) { /* Traitement fils */
if (/* redirection */) {
fd = open (fichier,
(fichier ...);
) /* cration ... */
close (stdout);
nfd = dup (fd); /* nfd = stdout */
close (fd);
exec de la commande}
...

} ... }

37

N91

Version Octobre 2012

A propos de fcntl
Descripteur fichier
C
Commande
d sur fd
Arguments de la
commande

Commande :
fcntl
f l (fd1,
(fd1 F_DUPFD,
F DUPFD 0) dup
d (fd1) sii 0 est libre
lib
F_GETFL : attributs positionns lors de open
F_SETFL : nouveaux attributs - dans arg. Seuls O_APPEND,
O_NONBLOCK et O_ASYNC
Gestion de verrous, Signaux (interruptions IO), PID
processus concern... relatifs au fichier

N92

Version Octobre 2012

A propos de ioctl
Descripteur fichier
C
Commande
d sur fd
Arguments de la
commande

Commande :
Oprations sur un priphrique
Pas une commande POSIX
Grand nombre de commande qui dpendent du matriel

38

Version Octobre 2012

N93

Oprations atomiques ou pas ?

Attention :
Programmation mono ou multi processus
On peut tre interrompu entre deux instructions

Chapitre 3: Systmes de fichiers

39

N96

Version Octobre 2012

Structures dun systme de fichiers


Position :
tat :
Nombre :

Processus P
P2

Espace utilisateur

Position :
tat :
Nombre :

Table fichiers

Inode Infos

N inode :
Nb. copies :

Inode Infos

Position :
t t :
tat
Nombre :

0
1
2
3
4
5

Tables Descripteurs Fichiers

Position :
tat :
Nombre :

N inode :
Nb. copies :

0
1
2
3
4
5

Tables partages

Processus P1

Priv

N inode :
Nb. copies :

Inode Infos

Table inodes

Version Octobre 2012

N97

Les priphriques
Quelques informations pour commencer
Priphriques = fichiers spciaux
Fichiers b et c
Priphriques caractres
terminal, rseaux
Priphriques blocs
Disques, bandes, Cd-rom
Interface commune: appels systmes

40

N99

Version Octobre 2012

Proprits dun systme de fichiers


Technologie diffrentes (disques, CD-ROM, CLE USB)
Montage local ou distant (NFS)
Proprits globales spcifiques
Protections, exportation
Montage/dmontage dynamique
mount, umount (commande ou appel systme)
Une hirarchie de noms
Fichiers normaux,
norma
rpertoires,
rpertoires spciaux,
spcia
liens,
liens ttubes
bes
Partitionnement des sous-hirarchies
Allocation du mdia associ (blocs libre)
Deux niveaux dorganisation:
Logique (suite de blocs, unit dallocation 1k?)
Physique (secteurs, pistes, cylindres)

N100

Version Octobre 2012

Arborescence
et volumes

/dev/rz0a
/
shared

Root filesystem
y
Swap

usr

/dev/rz0g

/dev/rz2a
+ partition de swap

oracle

Syst. Fic. virtuel

etud

/dev/rz1a

/dev/rz2g

+ partition de swap

41

Version Octobre 2012

N101

Cration/utilisation Systme de fichiers


EXT2
Fiable,, mature
Cration
Support pour fsck
mkfs (Syst. Fichiers)
Pr allocation
Taille des blocks
Liens symboliques rapides
Nombre dinodes
Redmarrage aprs crash lent

EXT3
Utilisation
Compatible avec EXT2
mount
mount/umount
umount
Mmes structures de donnes
Type Systme de
EXT2 + Journalisation
fichier
Ecriture dans un journal
Ecriture dans le syst. fichiers

Version Octobre 2012

N102

Montage et dmontage
Commande mount / umount
Montages locaux / distants
Visualisation: df
exemple:
mount -t ext2 -o nodev,nosuid,noexec /dev/sda3 /usr
Automatisation
Fichiers: /etc/fstab
/etc/init.d/*

42

N104

Version Octobre 2012

Le super-bloc

Gr. Blocs 0
Super-bloc
Descr. De gr.

Gestion des blocs


Nombre blocs libres

Bitm. blocs

Bitm. inodes
Liste blocs libres

Tab. inodes
Bitmap blocs libre/occ.
Gestion des inodes
Blocs
Blocs
Tab. blocs
Nombre total inodes
libres
Fichiers
Compteur inodes libres

Liste inodes libres


Bitmap inode libre/occup
Gr. Blocs n
Gestion globale
Taille systme fichiers
Indicateur de modification
Duplication dans les groupes

1b
nb
1b
1b
nb
nb

Version Octobre 2012

N105

Maintien de la cohrence FSCK 1/2


Qui ?: L'administrateur
Pourquoi ?: Synchronisation (sync)
Blocs: cache buffer disque
Inode: Copie en mmoire disque
Super-bloc: Copie en mmoire disque
Quand ?:
Rparation: Crash, Coupure alimentation
Prvention: Au reboot
Rparation: Attention aux pertes de donnes !!

43

N106

Version Octobre 2012

Maintien de la cohrence FSCK 2/2


Objectifs: Vrifications, rparations
Blocs:
Appartenances plusieurs inodes
Non rfrencs
Inodes:
Tailles fichier/rpertoire incohrentes
Nombres de liens incorrects
Mauvais formats
Non rfrencs
Super-bloc:
Plus de blocs que possible
Mauvais format de la liste des blocs libres
Total des blocs/inodes libres incohrents
Blocs libres manquants

N107

Version Octobre 2012

Montage/dmontage et structures
internes

mount

/dev/sda3

-t ext2

SuperBloc :
Inode cible :
Inode monter :
Syst. Fichier :

N inode :
Nb. copies :

Inode Infos
N inode :
Nb. copies
p
:

Inode Infos

/dev/sda7

N inode :
Nb. copies :

/usr
copie mmoire

Inode Infos

mount

N inode :
Nb. copies :

-tt eext2
t2

SuperBloc :
Inode cible :
Inode monter :
Syst. Fichier :

Inode Infos

Table volumes

Table inodes

44

N108

Version Octobre 2012

Principales arborescences 1/2


Rpertoire

Description

/bin

Binaires

/dev

Priphriques

/etc

Fichiers de configuration

/lib

Bibliothques de base

/tmp

Fichiers temporaires

/mnt

Montages nfs

/var

Fichiers de log, mail, impression,

/home

Rpertoires utilisateurs

N109

Version Octobre 2012

Principales arborescences 2/2


Rpertoire

Description

/usr/X11R6

Noyau X Window

/usr/bin

Binaires autres paquetages

/usr/include

En-ttes

/usr/lib

Bibliothques autres paquetages

/usr/man

Manuels en ligne

/usr/src

Source noyau,

/usr/local

Installation locales au site

/usr/share

Fichiers paquetages de l'instal.

/usr/sbin

Binaires administration

45

N110

Version Octobre 2012

Filesystem Hierarchy Standard (2004)


Root filesystem

(extrait)

Bin : Essential command binaries


Boot : Static files of the boot loader
dev : Device files
etc : Host-specific system configuration
lib : Essential shared libraries and kernel modules
media : Mount point for removeable media
mnt : Mount point for mounting a filesystem temporarily
opt : Add-on
Add on application software packages
sbin : Essential system binaries
srv : Data for services provided by this system
tmp : Temporary files
usr : Secondary hierarchy
var : Variable data

Uniformisation des distributions

Version Octobre 2012

N111

Organisation logique: la ralit


Une fort de liens
Un nom = un lien
Liens:
Entre pre et fils
Entre frres
Mise en oeuvre
Commandes associes: ln et unlink
Liens: dur et symboliques
Par rapport aux inodes:
lien en dur [N:1] un inode
lien symbolique [1:1] un inode

46

N112

Version Octobre 2012

Organisation logique: la ralit


/

Lien en dur
Mme partition

usr
shared

Un seul fichier

home
etud

oracle

Lien symbolique

etud1

Raccourci
Pas de vrification

Gprofile
etud2

.profile
etud2
d2
.profile
etud1

Lien en dur
Lien symbolique

Version Octobre 2012

N113

Protections: groupes / utilisateurs


Principaux lments
Grain: le fichier
Oprations:
lecture, criture,
excution/traverse
Objet: utilisateur, groupe, autres
Ne pas confondre:
Groupe de l'utilisateur
l utilisateur et groupe d
d'un
un fichier
Fichier /etc/group
Commande newgrp (processus)
Commande chgrp (fichier)
Liens symbolique / physique

47

N114

Version Octobre 2012

Protections: de fichier/rpertoire
Les fichiers

u
g
o
r: permission de lire le fichier
w: permission dcrire le fichier, i.e. ajouter, supprimer ou
modifier les donnes quil contient
x: permission dexcuter le fichier

Les rpertoires
r: permission de lire, donc de lister le rpertoire
mais pas forcment den lire les fichiers
w: permission dcrire dans le rpertoire et donc de supprimer
l fichiers
les
fi hi
quil
il contient
i
x: permission de traverser le rpertoire. Sans cette permission,
toute opration est interdite. Cette interdiction est hrite par
tous les fichiers et rpertoires quil contient
Un fichier est protg contre une modification par ses propres permissions,
et contre la suppression par les permissions du rpertoire qui le contient.

N115

Version Octobre 2012

Protections:
exemple
REP-1/REP-2/REP-4/REP-6

rwxrwxrwx REP-1
PL,PROF

rwxrwxrwx REP-2
PL,PROF

rwxrwxrwx REP-3
PL,PROF

rwxrwxrwx FIC-1
rwxr-----

PL,PROF

REP-4

PL,PROF
rwxr-xr-PL,PROF

REP-1/REP-3/REP-5/LIEN-1

LIEN-1 =

REP-5

rwxrwxrwx LIEN-1
PL,PROF

REP-1/REP-2/REP-4/REP-6
REP
1/REP 2/REP 4/REP 6

rwxrwxrwx FIC-2

Les droits qui comptent


(voir chmod)

r-xr-xr-x

REP-6

PL,PROF

PL,PROF

Utilisateurs: RC, PROF / JPP, ETUD1


Commandes: ls, cd, touch

48

Version Octobre 2012

N118

Structure gnrale d'un fichier


Qualits requises:
Evolution de la taille des fichiers
Accs efficace
Nombre de fichiers ?
Accs multi-processus
Accs multi-utilisateurs
Une structure interne
Des appels systmes appropris

Version Octobre 2012

N119

Structure gnrale d'une inode 1/2


Copie disque:
disque
p
Propritaire
Groupe propritaire
Type fichier
Droits d'accs
Dates (accs, modification, inode)
Nombres de liens
Adresses disque (blocs)
Taille fichier
Rfrence ACL au fichier et rpertoire
inode = anglais (i-noeud)

49

N120

Version Octobre 2012

Structure gnrale d'une inode 2/2


Copie mmoire = Copie disque +
Verrouill ?
Processus en attente
Copie et image disque diffrentes
Priphrique logique
Numro inode
Pointeurs inodes (une par liste)
liste des inodes libres
liste des inodes (adressage calcul)
Nombre copies actives

Copie disque
du super bloc

N121

Version Octobre 2012

Inode de fichier/rpertoire

aaaaaaaaaaa
bbbbbcccccc
ddddddddddd

UID
5007
GID
105
T
Type
fichier
fi hi
rpertoire
t i
Protections
rwxr-xr-Date lecture
19/10/2005
Date modification 10/10/2005
Date inode
12/10/2005
Nombre liens
3
Contenu
01
10
Taille
345

contenu

contenu

5007
105
ordinaire
di i
rwxr-xr-19/10/2005
10/10/2005
12/10/2005
5
01
10
65345

Nom

Un format
ls, cd,

50

N122

Version Octobre 2012

Arborescence et inodes

2010

Infos inode

.
..

2010
8010
1003

D1

Infos inode
1067
1003

.
..

D2
F1

5790

1067

10
003

Infos inode
1003
2010
1067
5790

.
..

Infos inode
aaaaaaaaaaaccccccc
bbbbbbbbbbbbbbbb

N123

Version Octobre 2012

Organisation physique
Blocs de donnees

Taille max (blocs) =


10 +
256 +
2562 +
2563

1
2
3
4
5
6
7
8
9
simple

..
.

double
triple

Taille max (blocs) =


10 + 256 + 2562 + 2563
ls il

..
.

..
.

..
.

..
.

..
.

51

N124

Version Octobre 2012

Organisation physique:
Comprendre les choix
Choix d'organisations
Blocs contigus
Table des blocs
Compactage, nettoyage
Taille de blocs
Accs indirect
Rpertoire
p
/ fichier

Consquences
Fragmentation
Efficacit (espace / temps)
Limite des fichiers

N125

Version Octobre 2012

Information sur fichiers: norme POSIX


Nom attribut
st_mode
st_ino
st_dev
st_nlink
st_uid
st_gid
st_size
st_atime
i
st_mtime
st_ctime

Description
Mot = bits de p
protection
Identif. Fich.: num. i-node
Priphrique du fichier
Nombre de liens
Ident. utilisateur
Ident. groupe
Taille en octets
D
Date
dern.
d
accs
llecture
Date dern. accs criture
Date dern. modification

52

N126

Version Octobre 2012

Accs aux fichiers: norme POSIX


Routine
fd = creat (nom,mode)
fd = open (fichier,mode)
e = close (fd)
n = read (fd,buff,nb)
n = write (fd,buff,nb)
p = lseek (fd,dep,deb)
e = stat (nom,&buff)
fd = mkdir
kdi (nom,mode)
(
d )
e = rmdir (nom)
e = link (nom1,nom2)
e = unlink (nom)
e = chdir (nom_rep)
e = chmod (nom,mode)

Description
cration nouveau fichier
ouverture fichier lecture/ecriture
fermeture fichier ouvert
lecture fichier --> tampon
criture tampon --> fichier
dplacement dans fichier
rcupration info. fichiers
cration
i rpertoire

i
suppression rpertoire
cration nouvelle Entre
suppression Entre
changement rpertoire de Travail
modification protection de fichier

N127

Version Octobre 2012

Contenu inode: stat


stat, fstat
fstat, lstat
Descripteur fichier
Informations
inode
Nom fichier

lstat: informations sur le lien symbolique luilui-mme


fstat: accs direct par le descripteur ce fichier
lstat accs par le nom de fichier
Mise jour des tables internes (noyau)

53

N128

Version Octobre 2012

Informations sur un fichier


#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
<unistd h>
int main ()
{
int fd, e;
struct stat buf;
...
e = stat ("/etc/passwd",&buf);
/* autre possibilit */
fd = open ("/etc/passwd",
("/ t /
d" ...);
)
e = fstat (fd, &buf);
printf ("Nombre liens: %d", buf.st_nlink);
}
Macros POSIX: S_ISREG
S_ISREG(m), S_ISDIR(m),
S_ISDIR
I_SRWXU
Commande(s) associe(s): ls
Structure(s) interne(s): inode

N129

Version Octobre 2012

stat, fstat
stat
fstat, lstat (complments)
Protections + type de fichiers
Numro dans /etc/passwd
p
Numro dans /etc/group
Taille en octets
Dates : modification Inode,
accs et modifications du
contenu
N inode sur disque

!!

Nombre liens en dur

+ st_dev et r_dev : majeur/mineur


+ st_blksize et st_blocks

54

N130

Version Octobre 2012

Obtenir le type dun fichier

struct stat
.
.

st_mode
.
.

<sys/stat.h>
Extraire le type

N131

Version Octobre 2012

Obtenir les droits dun fichier


if(st->st_mode & S_IRUSR)
if(st->st_mode & S_IWUSR)

st_mode

if(st->st_mode & S_IXGRP)

.
.

if(st->st_mode & S_IXUSR)

struct stat
.
.

if(st->st_mode & S_IXOTH)

<sys/stat.h>
Macros sur les protections : voir open

55

N132

Version Octobre 2012

Obtenir le nom de login / groupe


lahire:x:1543:34:Philippe Lahire:/home/lahire:bin/bash

struct
t t passwd*
d* getpwuid
t
id ((uid_t
id t uid)
id)
struct stat
.
=
.

st_uid
st gid
st_gid

/etc/group
=

/etc/passwd

+/etc/shadow

struct group* getgrgid (gid_t gid)


prof:x:34:Professeurs:lahire

Version Octobre 2012

Voir getpwent (3)

N133

Synthse getpwent(3)

Adresse de la structure si rsultat OK


NULL si uid ou gid nexiste pas
Champs passwd , passwd_gr : adminstrateur

56

N134

Version Octobre 2012

Information sur les priphriques


struct stat
.
.

st_dev

st_rdev

macros

#include <sys/types.h>
int minor (dev_t d)
int major (dev_t d)

st_dev:
_
du S.F. q
qui contient le fichier
st_rdev: du fichier spcial (si /dev/)
Majeur = classe de lappareil
Mineur = numro dinstance de la classe
cration par mknod(8) ou /dev/MAKEDEV

N135

Version Octobre 2012

Manipuler des dates (1)


struct stat
.
.

st_atime
st_mtime
st_ctime

fonctions

Retour: NULL si OK

#include <time.h>
struct tm* localtime (const time_t t)
struct tm* gmtime (const time_t t)

Dates GMT : nb sec. depuis


p
01/01/1970 12 PM
st_atime (read), st_mtime (write)
st_ctime (creat, chmod, chown)
localtime : fuseau (config. Syst.) + heure t/hiver
gmtime : temps GMT universel

57

N136

Version Octobre 2012

Manipuler des dates (2)


Passer dun Format un autre
time

mktime
ctime,
ctime_r
asctime,
asctime_r

N137

Version Octobre 2012

Manipuler des dates (3)


en secondes
partir dun
struct tm
fourni par
lutilisateur

ctime_r + asctime_r: rsultat = pointeur sur buf


Transformation de la date (seconde ou struct tm) en
chane de caractres
Le rsultat est internationalis

58

N138

Version Octobre 2012

Manipuler des dates (4)


Si NULL:
modification
d la
de
l date
d t
Heure du
systme
Date au format
struct tm
Date au format
time_t

date(1) = printf( %s\n , ctime(time()))


ctime(time())

N139

Version Octobre 2012

Manipuler des dates (5)


Buffer + taille
pour la sortie
Heure
formater

Exemple de
format
Voir

strftime (3)

59

N140

Version Octobre 2012

Internationalisation (1)
Agir sur les variables denvironnement :
LC_TIME
LC TIME : conventions utilises pour les dates
LC_MONETARY, LC_COLLATE, LC_TYPE,
LC_NUMERIC, LANG
Signe montaire, jeu de caractres, ordre alphabtique

LC_ALL: Sapplique tous

en (anglais)

de (allemand)

Version Octobre 2012

N141

Internationalisation (2)
Paramtrer un programme pour linternationalisation :
#include <locale.h>
Laisser la libert
setlocale (LC_ALL, );
Imposer
setlocale (LC_ALL, fr_FR );

time_t
struct tm
char
[MAX]

60

N142

Version Octobre 2012

Manipuler les dates dun fichier (1)


Nom du fichier

Nouvelles
dates
st_atime
t ti
st_mtime

La date associe linode est mise jour


times = NULL date courante
il faut avoir les droits en criture sur le fichier

Version Octobre 2012

N143

Manipuler les dates dun fichier (2)


#include <sys/types.h>
#include <utime.h>
i t main
int
i ()
{
int fd, e;
struct utimbuf tbuf;
...
tbuf.actime = ...
tbuf.modtime = ...
p
, &tbuf);
f);
e = utime (("/etc/passwd",
}
Commande(s) associe(s): ls, touch
Structure(s) interne(s): inode

61

N144

Version Octobre 2012

Grer le propritaire d'un fichier(1)


Kernel: CAP_CHOWN
Nom du
d fichier
f h
Propritaire
& groupe
Descripteur de
fichier

Il y a aussi chgrp
chown fchown
lchown (lien symbolique) chown (fichier rfrenc)
MAJ de st_ctime (cest normal?)

Version Octobre 2012

N145

Grer le propritaire d'un fichier (2)


#include <sys/types.h>
#include <unistd.h>
int main ()
{
int fd, e;
...
e = chown ("/etc/passwd", 1014, 50);
/* autre possibilit */
fd = open ("/etc/passwd", ...);
e = fchown (fd, 1014, 50);
}
Commande(s) associe(s): chown
Structure(s) interne(s): inode

62

N146

Version Octobre 2012

Crer un lien (en dur)


Nom initial

Nom du
lien

Sorte dalias
Incrmentation du nombre de liens en dur
Appartenance au mme Systme de Fichiers
Pas de liens en lair (gestion par le systme)
Efficacit: pas de fichier intermdiaire
Mais: retrouver les noms la main

N147

Version Octobre 2012

Crer un lien symbolique


Nom initial

Nom du
lien

nombre de liens en dur sur newpath


newpath: 1
2 inodes : celle du lien et celle du fichier
Efficacit vs lisibilit
Liens en lair possibles
Lien travers les systmes de fichiers

63

N148

Version Octobre 2012

Supprimer un lien
Nom du
d fichier
f h

Effacement dun lien en dur


Effacement du fichier si cest le dernier
Il faut avoir les droits

Version Octobre 2012

N149

Cration/suppression d'un lien


#include <unistd.h>
int main ()
{
int e;
...
Le fichier lien symbolique
e = link ("/etc/passwd", "/tmp/passwd");
e = symlink ("/etc/passwd", "/tmp/passwd");
e = symlink ("/etc", "/tmp/etc");
e = unlink ("/tmp/passwd");
e = unlink ("/tmp/etc");
}
Commande associe(s): ln, unlink, rm
Structure(s) interne(s): inode

64

N150

Version Octobre 2012

Rappel sur les droits daccs (open)


Pour donner des droits
Le propritaire

Lee G
Groupe
oupe p
propritaire
op ta e

Les autres

N151

Version Octobre 2012

Vrifier laccs un fichier


Nom du
fichier
Droits
demands

mode = droit de
R_OK
R_OK: lecture
W_OK
W_OK: criture
X_OK
X_OK: excution ou traverse
F_OK
F_OK: existence

65

N152

Version Octobre 2012

Grer les protections dun fichier (1)


Nom du
fichier
droits
Descripteur
De fichier

mode = combinaison des 3 permissions pour les 3 catgories


et de 3 indicateurs
S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IROTH
S_ISUID | S_IRGRP | S_IROTH
Indicateurs

N153

Version Octobre 2012

Grer les protections dun fichier (2)


Fichier
normal

( *)
Rpertoire

3 indicateurs : interprtation (fichier normal / rpertoire)


(*) gestion de verrou si excutable (voir cours)

66

N154

Version Octobre 2012

Grer les protections d'un fichier (3)


#include <sys/types.h>
#include <sys/stat.h>
int main ()
{
int fd, e;
...
e = chmod ("/etc/passwd", S_IRWXU);
/* autre possibilit */
fd = open
p (("/etc/passwd",
p
, ...);
);
e = fchmod (fd, S_IRWXU);
}

Commande(s) associe(s): chmod


Structure(s) interne(s): inode

N155

Version Octobre 2012

Manipuler le masque de protection


Nouveau
masque

Utilisation des 9 macros


3 permissions pour les 3 catgories
mode = idem chmod
S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IROTH
Mais : marque une interdiction
Se combine avec ce qui est donn par open: ET
Sapplique au futur fichiers crs

67

N156

Version Octobre 2012

Protections de fichier et processus (1)


Processus P
real user-id

real group-id
RUID
EUID
SUID

effective
user-id

RGID
EGID
SGID

effective
group-id
sa ed set
saved
group-id

saved set
user-id

N157

Version Octobre 2012

Protections de fichier et processus (2)


=
Sauf si
set-user-id

login + group(s)

Processus P
RUID
EUID
SUID

RGID
EGID
SGID

owner
group

Fichier de P
ou

Contrainte (si EUID != 0):

new = RUID/SUID

Diffrents effets :
cours sur les processus

=
sauf si
set-group-id

Restaurer aprs
set/drop privilege
OU: utilisation de :
setuid, setgid (posix)
setreuid, setregid

Avoir les privilges

68

N158

Version Octobre 2012

Appels systmes et liens symboliques


Sapplique sur
sur
Le fichier lien symbolique :
lchown, chown, lstat, readlink, unlink
remove, rename

Le fichier luilui-mme :
chmod, creat, chown, link, mkdir, open, stat
access, chdir, exec, mkfifo, opendir, pathconf,
truncate, rename

N159

Version Octobre 2012

Crer/Supprimer un rpertoire (1)

droits
Nom du
rpertoire

S_ISGID : droits du gr. Du rpertoire = droits de ses fichiers


S_ISVTX : cration de fichiers renommer & supprimer
S_IX : X est pour traverser
rmdir
rmdir: le rpertoire doit tre vide
rmdir : fonctionne comme unlink

69

N160

Version Octobre 2012

Crer/supprimer un rpertoire (2)


#include <sys/types.h>
#include <sys/stat.h>
i t main
int
i ()
{
int e;
...
e = mkdir ("/tmp/myrep", S_IWUSR);
e = rmdir ("/tmp/myrep");
}
Commande(s) associe(s): mkdir, rmdir, rm
Structure(s) interne(s): inode

N161

Version Octobre 2012

Ouvrir un rpertoire
Nom du
rpertoire

DIR : un peu comme FILE (section 3)


Curseur plac sur la 1re entre
Combien dentre minimum?

70

N162

Version Octobre 2012

Parcourir un rpertoire
descripteur

N inode
Nom fichier

Et le chemin ?

Seul endroit o est stock un nom de fichier


Avance le curseur

N163

Version Octobre 2012

Rinitialiser/Fermer un rpertoire
descripteur

(*)

(**)
(*) Position sur la 1re entre (affecte table noyau)
(**) Affecte la TDF et les tables du noyau
(**) rend les ressources aux systme

71

N164

Version Octobre 2012

Rinitialiser/Fermer un rpertoire
descripteur

(*)

(**)
(*) Position sur la 1re entre (affecte table noyau)
(**) Affecte la TDF et les tables du noyau
(**) rend les ressources aux systme

Version Octobre 2012

N165

Accs au contenu d'un rpertoire


#include <sys/types.h>
#include <dirent.h>
i t main
int
i () {
DIR* dir;
struct dirent * entry;
dir = opendir ("/var");
entry = readdir (dir);
printf ("%s - %d", entry->d_name, entry->d_ino);
closedir(dir);
closedir
}
seekdir
seekdir, telldir
telldir, ...
Commande(s) associe(s): ls, mv,
Structure(s) interne(s): tables des fichiers

72

N166

Version Octobre 2012

Manipuler le rpertoire courant (1)


Nom de
fichier

descripteur

Chemin
absolu

Affecte le contenu dun processus


Allocation de buf + taille alloue

Version Octobre 2012

N167

Manipuler le rpertoire courant (2)


#include <unistd.h>
int main ()
{
int fd, e;
...
e = chdir ("/etc");
/* autre possibilit */
fd = open ("/etc", ...);
e = fchdir (fd);
}
Table des fichiers: Changement nombre de rfrences
Commande(s) associe(s): cd
Structure(s) interne(s): Tables des fichiers, processus

73

N168

Version Octobre 2012

Renommer / Dplacer un fichier


Fichier de
dpart
Fichier
darrive

newpath dans le mme systme de fichiers


Autres liens en du non affects
Si cible existe elle est crase
Nombreuses restrictions
Chemin correct, cible: rpertoire non vide,
Commande mv

N169

Version Octobre 2012

Synchronisation Disque/buffer

Descripteur de fichier

sync
sync: synchronise les buffers (criture) et disques
fsync
fsync: idem mais pour un fichier
Diffrer lcriture acclrer les changes
Toutes les xx sec. + arrt de la machine

74

N170

Version Octobre 2012

Synchronisation Disque/buffer
#include <unistd.h>
int main ()
{
int fd, e;
...
/* Ouverture fichier en criture */
fd = open ("/etc/passwd", ...);
...
e = fsync
f
(fd)
(fd);
sync () /* S. F. */
}
Commande associe(s): sync
Structure(s) interne(s): Tables, buffer, inode

N180

Version Octobre 2012

Systme de fichier /proc (1)


Processus en cours

Autres informations : mmoire, noyau, paramtres systmes,

75

N181

Version Octobre 2012

Systme de fichier /proc (2)

Systmes de fichiers
supports

Information sur la mmoire

N182

Version Octobre 2012

Systme de fichier /proc (3)

Information sur la table des volumes monts

76

N183

Version Octobre 2012

Systme de fichier /proc (4)

Propritaire, PID
Rpertoire courant
Excutable
Rpertoire Racine
Variables environnement

77

Vous aimerez peut-être aussi