Vous êtes sur la page 1sur 242

Maher SELLAMI

2013-2014 1 L'environnement de programmation Unix/Linux


Objectifs de ce module
Prsenter l'architecture logicielle des systmes d'exploitation,
Dcouvrir le systme UNIX
Etudier les outils de dveloppement des programmes.
Maitriser les interfaces systme: SHELL, API
Apprhendrer les fondements de base des systmes de gestion de
fichiers
Introduction Objectifs
2013-2014 2
L'environnement de programmation
Unix/Linux
SOMMAIRE
0. Architecture et Bloc !onctionnel
". #r$entation g$n$rale de %t&me d'exploitation
($!inition et o)*ecti! d'un %t&me d'exploitation
+volution de %t&me d'exploitation
,onction d'un %t&me d'exploitation
-tructure d'un %t&me d'exploitation
.aract$riti/ue de -%t&me d'exploitation moderne
TD : Etude de Cas ,
La Structure de
Windows
"". +nvironnement U0"1
Le -%t&me de !ichier
Le hell
TP: LE SHELL dUNIX
Scripts,
Introduciton
Le hell
Le !iltre grep2ed2 a342 !ind2 ort
Scripts,
outils: rep, sed aw!,"
""". #rogrammer ou 50U/L"0U1
+nvironnement d'ex$cution
"nteraction avec l'environnement d'ex$cution
5etion de erreur
+crire et utilier de Bi)lioth&/ue
TP : Co#piler a$ec cc
#a!e, d%,
estion des erreurs,
&i%liot'()ues
"6. Le %t&me de getion de !ichier
7rganiation
#rimitive d'acc& $l$mentaire aux !ichier
-$curit$ et #rotection de !ichier
Le %t&me de !ichier d'U0"1 8Le +/- de )ae2 r$pertoire2 inode9
TD :*+T, NT*S
TP : S,* dUNIX -Linu.
2013-2014 3
L'environnement de programmation
Unix/Linux
Bibliographie
Livres pdagogiques
Systmes d'exploitation -- Concepts et algorithmes.
Joffroy Beauquier et Batrice Brard. Ediscience international, Paris, 1993.
Systmes d'Exploitation, Andrew Tanenbaum. Pearson Education, 2003.
Principes des systmes d'exploitation des ordinateurs, S. Krakowiak , Dunod 1987
Architecture des systmes d'exploitation, M. GRIFFITHS, ..., M. VASSAYADE,
Herms, 1988.
Systmes d'exploitation, concepts et algorithmes, J. BEAUQUIER, B.BERNARD, MC
Graw-Hill, 1990.
Introduciton
Graw-Hill, 1990.
Livres documentant un systme particulier
La programmation sous Unix, 3e d., J.M. Rifflet, McGraw-Hill, 1993
The Unix Programming Environment- B.W. Kernighan, R. Pike, Prentice-Hall
Conception du systme UNIX, Maurice J. Bach. Dunod, 1997.
Conception et implmentation du systme 4.4BSD.
Marshall Kirk McKusick, Keith Bostic, Michael J. Karels, et John S. Quarterman.
International Thomson Publishing France, 1997.
Le systme UNIX- S.R. Bourne InterEditions, 1985
Inside Windows NT, Helen Custer, Microsoft Press, 1992
2013-2014 4
L'environnement de programmation
Unix/Linux
ARCHITECTURE ET BLOCS
FONCTIONNELS
Bloc !onctionnel d'un ordinateur
Architecture
"nterruption
:aher -+LLA:"
O
2013-2014 ; L'environnement de programmation Unix/Linux
Blocs fonctionnels
La comprhension de certaines fonctions dun
systme dexploitation ncessite un minimum de
connaissance du matriel hardware .
ARCHITECTURE: dcoupage de la machine en
sous-ensembles, et interrelations entre ces sous-
ensembles
Choix darchitecture: compromis entre performances
Architecture fonctionnelle dun Ordinateur Blocs fonctionnels
Choix darchitecture: compromis entre performances
et cots (efficacit et facilit de construction)
Principaux blocs :
Processeur
Mmoire
Bus
E/S
2013-2014
L'environnement de programmation
Unix/Linux
6
# :
+/-
LE PROCESSEUR (CPU)
Dirige les activits de lordinateur.
A chaque cycle dhorloge, chaque unit du
processeur va ouvrir ou fermer certains ports pour
dplacer, lire, crire, comparer, additionner.
Les ordres sont donns par lunit de contrle.
Architecture fonctionnelle dun Ordinateur Blocs fonctionnels
2013-2014
L'environnement de programmation
Unix/Linux
7
La Mmoire
Stocke les informations temporairement.
Ensemble de cases de rangement ou position, chacune delles
pouvant contenir les informations et tant repr par une adresse.
Adresse: permet de mettre ou extraire la reprsentation
dinformation.
Bit : une position comprend un nombre fixe dlments (0 et 1)
Mot : un nombre dtermin de bits occupant des postions contiges;
selon modle (16, 24, 32 bits,..).
Architecture fonctionnelle dun Ordinateur Blocs fonctionnels
selon modle (16, 24, 32 bits,..).
Unit dadressage: plus petite quantit de mmoire qui spare deux
adresses conscutives.
Espace dadressage: ensemble de toutes les adresses que lunit
commande est capable de gnrer
donne par la largeur des adresses (nombre de bits dans une adresse).
Espace virtuel : nombre de cases mmoires quun programme peut
adresser
2013-2014
L'environnement de programmation
Unix/Linux
8
La Hirarchie de mmoire
Architecture fonctionnelle dun Ordinateur Blocs fonctionnels
Gre par :
-Le compilateur
- Un dispositif cbl
- Le systme
dexploitation
2013-2014
L'environnement de programmation
Unix/Linux
9
- La cration de fichiers
(SGF)
Le Bus
Les instructions sont transportes par des lignes parallles
groupes quon appelle bus.
Aspect physique:
Fils lectriques reliant les diffrents lments dun ordinateur.
Ces lments sont relis au bus par un connecteur : fond de
panier .
Aspect Logique:
Multiplexage: les donnes et les adresses peuvent tre
Architecture fonctionnelle dun Ordinateur Blocs fonctionnels
Multiplexage: les donnes et les adresses peuvent tre
multiplexs sur les mmes lignes dun bus.
Espace dadressage: Largeur des adresses que le bus peut
manipuler
Cycle du bus: dfinit par le vitesse de lhorloge, un mouvement
de donnes se produit chaque top de lhorloge.
Transaction: un change de donnes entre deux lments
connects au bus.
Dbit: nombre de mots de donnes quil est capable de
transporter par seconde.
2013-2014
L'environnement de programmation
Unix/Linux
10
les Priphriques DE/S
Assurent la communication avec lextrieur
Les mmoires de Masses (bandes, disques)
Compltent la mmoire Centrale par une capacit accrue
(sans source dnergie)
Temps de positionnement lent. (en ms)
Sauvegarde: supports accs squentiel (bande,)
Reprage : accs direct linformation (disque,..).
Architecture fonctionnelle dun Ordinateur Blocs fonctionnels
Reprage : accs direct linformation (disque,..).
Les units dEntres-Sorties
voir les rsultats et fournir les donnes
Clavier-Ecran, Imprimante, Joy-Stick , le stylo
optique, la souris, scanner, ...
Les unit de communications
relis des systmes informatiques ensembles
modems, cbles de connexion et dispositifs rseaux etc.
2013-2014
L'environnement de programmation
Unix/Linux
11
Architecture de VON NEUMANN
la performance dun lment dune machine est
lie aux autres lments qui lui sont connects
L'efficacit est lie au dbit des informations qui
circulent dans ses diffrents lments.
Architecture fonctionnelle dun Ordinateur Quelques architectures
P
M
circulent dans ses diffrents lments.
3 techniques pour placer le dispositif dE/S.
2013-2014
L'environnement de programmation
Unix/Linux
12
P
M
E/S
P
M
E/S
P
M
E/S
Structure bus commun mmoire-entres/sorties
Liaison directe des dispositifs
dentres/sorties
Interfaces dentres/sorties vues comme
une partie de la mmoire
Architecture de VON NEUMANN
Architecture fonctionnelle dun Ordinateur Quelques architectures
2013-2014
L'environnement de programmation
Unix/Linux
13
Laccs direct mmoire (DMA)
Technique qui fournit un chemin direct entre le bus dE/S et la
mmoire sans intervention du processeur.
Le DMA soulage lUC du contrle des entres-sorties
L E/S "vole" un cycle mmoire au Bus pour raliser un transfert
L'excution du programme en UC continue pendant le transfert DMA
Si conflit d'accs la mmoire priorit au DMA
Architecture fonctionnelle dun Ordinateur Quelques architectures
2013-2014
L'environnement de programmation
Unix/Linux
14
Architecture de Harvard
Augmenter le flux des informations qui circulent
dans la machine: M.I. et M.D.
Multiplier par deux la vitesse du processeur sans
changer la vitesse des mmoires.
Architecture fonctionnelle dun Ordinateur Quelques architectures
P
MD MI
BI
BD
2013-2014
L'environnement de programmation
Unix/Linux
15
BI
BD
.#U
pr$-recherche
)u
externe
contr<le du )u
getion de la
m$moire
cache
intruction
cache
donn$e
Le microprocesseur 68030
Machines microcodes
Doter un processeur dune mmoire spciale
dite mmoire de microcode destine contenir
des micro-instructions.
Une instruction lmentaire est constitue dun
micro-programme : squence de micro-
instructions
Architecture fonctionnelle dun Ordinateur Quelques architectures
instructions
Rduire les cots de ralisation des
processeurs
2013-2014
L'environnement de programmation
Unix/Linux
16
P
M
MM
BIN B
Les Interruptions
Comment lU.C. va prendre en compte les vnements extrieurs.
Les interruptions externes
dues aux priphriques ou des vnements extrieurs au systme
informatique (temps rel).
FAIRE TOUJOURS
signaler au CPU quil est prt ;
recevoir un ordre du CPU ;
excuter lordre ;
la fin de lexcution, boucler
FAIT
Pour signaler lunit centrale quils sont prts, les priphriques
Architecture fonctionnelle dun Ordinateur Les Interruptions
Pour signaler lunit centrale quils sont prts, les priphriques
connects vont utiliser le mcanisme dinterruption.
Les interruptions internes
Les interruptions dues lhorloge
Les interruptions dues aux erreurs
Un dpassement de capacit
La violation daccs mmoire
Lexcution dune instruction dont la partie fonction nest pas conforme
Lutilisation dune instruction privilgie en dehors du mode systme.
Les interruptions logicielles
2013-2014
L'environnement de programmation
Unix/Linux
17
Les interruptions logicielles
Raliss par des instructions de type SVC (Supervisor
Call) destine permettre un programme utilisateur de
faire une requte au systme
Lancement de tches
Allocation de ressources matrielles (mmoire - disque -
imprimante ...)
Provoque:
la mise en sommeil du programme
Architecture fonctionnelle dun Ordinateur Les Interruptions
la mise en sommeil du programme
La prise de contrle de lunit centrale par le S.E.
Le S.E. excute un service particulier demand par le
programme.
changer de mode dexcution et passer en mode superviseur.
Motif : vrifier la correction des arguments dappel, afin
dviter des tentatives de pntration frauduleuse
lintrieur du systme.
2013-2014
L'environnement de programmation
Unix/Linux
18
($!inition et o)*ecti! d'un %t&me d'exploitation
+volution de %t&me d'exploitation
,onction d'un %t&me d'exploitation
PRSENTATION GNRALE DES
SYSTMES DEXPLOITATION
,onction d'un %t&me d'exploitation
-tructure d'un %t&me d'exploitation
.aract$riti/ue de -%t&me d'exploitation moderne
:aher -+LLA:"
1
2013-2014 1= L'environnement de programmation Unix/Linux
Introduction
Sans logiciels, un ordinateur nest quun morceau de mtal
inutile.
Grce ces logiciels, il peut jouer son rle d'outils universels .
Problmes
L'criture des programmes doivent prendre en compte tous
les composants d'un ordinateur,
un travail extrmement difficile.
Il faut librer le programmeur de la complexit du matriel.
Prsentation gnrale des systmes dexploitation Gnralits
Il faut librer le programmeur de la complexit du matriel.
Solution
Enrober le matriel par une couche de logiciel qui gre
lensemble de systme.
Prsenter au programmeur une interface au machine virtuelle
plus facile comprendre.
2013-2014
L'environnement de programmation
Unix/Linux
20
Introduction
Prsentation gnrale des systmes dexploitation Gnralits
Utilisateurs
Programmes
Application Atelier de
($veloppement
Bae de
donn$e
0avigateur
Outils
+diteur .ompilateur +diteur de .hargeur :etteur au "nterpr$teur
#rogrammeur
L
o
g
i
c
i
e
l


d
'
A
p
p
l
i
c
a
t
i
o
n
2013-2014
L'environnement de programmation
Unix/Linux
21
+diteur .ompilateur +diteur de
lien
.hargeur :etteur au
point
"nterpr$teur
de
commande
Gestion
:$moire #roceeur ,ichier
#$riph$ri/ue
.ommunication
Matriel
Structure gnrale dun systme inormati!ue
#rogrammeur -%t&me
L
o
g
i
c
i
e
l


d
e


)
a

e
Dfinition et objectifs dun systme dexploitation
Prsentation gnrale des systmes dexploitation Gnralits
Dfinition et ralisation dune machine virtuelle
fonction de gestion de linformation : structuration,
conservation, conservation dsignation (mmoire virtuelle,
fichiers); transfert (entre-sorties),
fonction dexcution de programmes en squence , en
parallle, en concurrence, de composer et d'enchaner des
programmes, de synchroniser des excutions
service divers : aide la mise au point, traitement des
2013-2014
L'environnement de programmation
Unix/Linux
22
service divers : aide la mise au point, traitement des
dfaillances, mesure de temps, etc.
Gestion et partage des ressources
gestion des ressources physiques : allocation de mmoire
principale de mmoire secondaire, des organes dentre-
sortie,
partage et change dinformation entre usagers,
protection mutuelle des usagers,
service divers : facturation de ressources, statistiques
dutilisation, mesure de performances, etc.
Dfinition et objectifs dun S.E.
dexploitation
Prsentation gnrale des systmes dexploitation Gnralits
machine virtuelle
utilisateurs
2013-2014
L'environnement de programmation
Unix/Linux
23
machine virtuelle
matriel
systme d'explitation
ressources
volution des systmes dexploitation
Prsentation gnrale des systmes dexploitation volution des systmes dexploitation
Exploitation porte ouverte : 1945-1955
Traitement par lots : 1955-1965
Multiprogrammation et traitement par lots : 1965-1980
Multiprogrammation et partage de temps : 1965-1980
Systmes d'exploitation d'ordinateurs personnels
Exploitation en rseau
2013-2014
L'environnement de programmation
Unix/Linux
24
Exploitation en rseau
Exploitation en distribu
Systmes multiprocesseurs
Systme d'exploitation temps rel
Fonctions dun systme dexploitation
Prsentation gnrale des systmes dexploitation Fonctions dun systme dexploitation
La gestion de la mmoire
La gestion des processus
La gestion des priphriques dE/S
La gestion des fichiers
La gestion de la communication
2013-2014
L'environnement de programmation
Unix/Linux
25
La gestion de la communication
Environnement de travail
La gestion de la mmoire
Prsentation gnrale des systmes dexploitation Fonctions dun systme dexploitation
Fonctions:
connatre les parties libres et occupes de la
mmoire,
allouer de la mmoire aux processus qui en besoin,
rcuprer la mmoire utilis par un processus
traite le va-et-vient entre le disque et la M.C.
Services offerts:
rpartition de la mmoire disponible entre les
2013-2014
L'environnement de programmation
Unix/Linux
26
rpartition de la mmoire disponible entre les
diffrents processus actifs et lensemble des
utilisateurs prsents
localisation maintien des donnes pour chaque
processus,
maintien de lintgrit de certains espaces rservs,
gestion de la pagination de la mmoire, utilisation de
mmoire virtuelle.
La gestion de la mmoire
Prsentation gnrale des systmes dexploitation Fonctions dun systme dexploitation
Techniques: dcoupage de la mmoire en :
zones de taille variable (contigue)
la segmentation
La pagination
2013-2014
L'environnement de programmation
Unix/Linux
27
La gestion de la mmoire:contigue
Prsentation gnrale des systmes dexploitation Fonctions dun systme dexploitation
Allocation contigue en zone variable
La mmoire est dcoupe en partitions de taille variable , c'est--
dire adaptables la taille des programmes.
La mmoire est forme d'un ensemble de zones libres et de
zones occupes (partitions alloues).
Une zone libre est caractrise par son adresse dimplantation
(adr) et sa taille (taille).
Allouer un programme P de taille Taille(P) :
2013-2014
L'environnement de programmation
Unix/Linux
28
Allouer un programme P de taille Taille(P) :
trouver une zone libre telle que Taille (Zone Libre) >= Taille (P)
Le systme maintient une liste des zones libres en MC
First Fit : la premire zone qui convient
Best Fit : celle gnrant le moins de perte
Inconvnients: Allocations et dsallocations successives des
programmes crent des trous (zones libres de taille insuffisante)
en mmoire centrale : fragmentation
externe: l`espace inutilis est entre partitions
interne: l espace inutilis est dans les partitions
Gestion de la mmoire: Segmentation Gestion de la mmoire: Segmentation
la segmentation utilise des parties de programme qui ont une valeur
logique (des modules)
Ladresse logique est une paire: <No de segm, dcalage>
o dcalage est ladresse dans le segment
Avantages: lunit dallocation de mmoire est
plus petite que le programme entier
une entit logique connue par le programmeur
Les segments peuvent changer de place en mmoire
Fonctions dun systme dexploitation
Les segments peuvent changer de place en mmoire
Implmente ldition des liens
La protection et le partage de segments sont aiss
Dsavantage: le problme des partitions dynamiques
La fragmentation externe nest pas limine
trous en mmoire, compression?
Une autre solution est d`essayer simplifier le mcanisme en
utilisant units d`allocation mmoire de tailles gales
PAGINATION
L'environnement de programmation
Unix/Linux
29 2013-2014
Gestion de la mmoire: pagination
Prsentation gnrale des systmes dexploitation Fonctions dun systme dexploitation
L'espace d'adressage du programme est dcoup en
morceaux linaires de mme taille : page.
L'espace de la mmoire physique est lui-mme
dcoup en morceaux linaires de mme taille : la
case ou cadre de page (frame)
La taille d'un cadre est gale la taille d'une page
Charger un programme en mmoire centrale consiste
2013-2014
L'environnement de programmation
Unix/Linux
30
Charger un programme en mmoire centrale consiste
placer les pages dans n'importe quel frame
disponible.
Consquences:
un processus peut tre parpill nimporte o dans la
mmoire physique.
la fragmentation externe est limine
La mmoire virtuelle
Prsentation gnrale des systmes dexploitation Fonctions dun systme dexploitation
La capacit de la mmoire centrale est trop petite pour charger
l'ensemble des pages des programmes utilisateurs.
Ne charger que les pages utiles un instant (principes de localit).
tester la prsence d'une page en mmoire centrale :
rle du bit de validation
si un processus cherche accder une page non prsente en
mmoire centrale, il se produit un droutement de dfaut de page
Dfaut de page: le systme d'exploitation lance une entre/sortie disque
2013-2014
L'environnement de programmation
Unix/Linux
31
Dfaut de page: le systme d'exploitation lance une entre/sortie disque
pour charger la page manquante en mmoire dans une case libre.
la totalit des cases de la mmoire centrale peuvent tre occupes
le systme d'exploitation utilise un algorithme pour choisir une case librer
Loptimal est de retirer une page devenue inutile
Au hasard
FIFO (First In, First out)
LRU (Least Recently Used) : moins rcemment utilise
La gestion des processus
Prsentation gnrale des systmes dexploitation Fonctions dun systme dexploitation
Un processus est un programme en cours dexcution
un environnement processeur (CO, PSW, RSP, registres
gnraux)
un environnement mmoire appel contexte du processus
Processus: une unit de description d'une activit
pouvant s'excuter en parallle.
Multiprogrammation faire coexister plusieurs
2013-2014
L'environnement de programmation
Unix/Linux
32
Multiprogrammation faire coexister plusieurs
programmes simultanment en mmoire (multi-tches)
Le temps partag ou pseudo-paralllisme : simuler le
partage par plusieurs programmes de temps
processeur.
multitche temps partag
Multitraitement: plusieurs tches en mme temps (multi-
processeurs.)
La gestion des processus
Prsentation gnrale des systmes dexploitation Fonctions dun systme dexploitation
Multiprogrammation simple
pr>t
)lo/u$ $lu
+lection?
allocation du
proceeur
!in +/-
demande +/-
chargement
+n ex$cution
2013-2014
L'environnement de programmation
Unix/Linux
33
pr>t
)lo/u$ $lu
$lectionn$ !in +/-
demande +/-
d$!aut de page
!in tranche
de temp
chargement
Multiprogrammation en temps partags
la "rem"tion et la mie en attente !orc$e d'un proceu
La gestion des processus
Prsentation gnrale des systmes dexploitation Fonctions dun systme dexploitation
L'ordonnanceur (scheduler) dfinit l'ordre dans
lequel les processus prts utilisent l'UC et la dure
d'utilisation, en utilisant un algorithme
d'ordonnancement ( FIFO, Priorits , tourniquet, file
de priorit)
Algorithme d'ordonnancement doit avoir les qualits:
quitabilit : chaque processus reoit sa part du temps
2013-2014
L'environnement de programmation
Unix/Linux
34
quitabilit : chaque processus reoit sa part du temps
processeur
efficacit : le processeur doit travailler 100 % du temps
temps de rponse : minimiser en mode interactif
temps d'excution : minimiser l'attente des travaux en
traitement par lots (batch)
rendement : maximiser le nombre de travaux effectus
par unit de temps
La gestion des priphriques dE/S
Prsentation gnrale des systmes dexploitation Fonctions dun systme dexploitation
Fonctions
Cacher la complexit des dispositifs dE/S
Ignorer les diffrences qui existent entre les
mmes types dunits proposes par plusieurs
constructeurs
Services offerts
2013-2014
L'environnement de programmation
Unix/Linux
35
Services offerts
Fonctions lis leur emploi: paramtrage ou
configuration logicielle de ces priphriques
Fonctions lis leur utilisation: ralisation des
fonctions d'accs et de contrle des ces
priphriques.
La gestion des fichiers
Prsentation gnrale des systmes dexploitation Fonctions dun systme dexploitation
Un fichier : une collection de donnes codes,
de mme nature, et stockes sur un support
externe (disque, bande).
Fonctions
Implantation physique des fichiers
Ralisation des fonctions daccs aux fichiers
la scurit et confidentialit des informations quils
2013-2014
L'environnement de programmation
Unix/Linux
36
la scurit et confidentialit des informations quils
contiennent.
Services Offerts
fonctions lis l'existence des fichiers: cration,
duplication dition, impression, dplacement
fonctions lies lutilisation des fichiers et leur
partage
Gestion des communications
Prsentation gnrale des systmes dexploitation Fonctions dun systme dexploitation
permettre l'accs :
dautres machines virtuelles, (locales,
distantes ou mobiles) ,
des supports externes, via des E/S
des objets, des composants partageables,
2013-2014
L'environnement de programmation
Unix/Linux
37
des objets, des composants partageables,
des services,
des fichiers (locaux, distants ou mobiles)
des groupes de diffusion ou de coopration.
Environnement de travail
Prsentation gnrale des systmes dexploitation Fonctions dun systme dexploitation
le but de toute architecture est de prsenter lutilisateur
un environnement o il puisse travailler confortablement.
L'utilisateur a deux faons pour accder aux services
offerts par le systme :
crit des programmes qui font des appels au noyau (API)
utilise l'interface-utilisateur (shell ou interprteur de
commandes)
Les interfaces utilisateurs offrent souvent plusieurs
2013-2014
L'environnement de programmation
Unix/Linux
38
Les interfaces utilisateurs offrent souvent plusieurs
ergonomies, en fonction des fonctionnalits attendues, ...
ou en fonction des prfrences de lutilisateur:
Environnement graphique: ergonomie prfre par les
usagers non informaticiens (shell graphique)
Langage simplifi interactive : simple succession de lignes de
commande comportant un verbe , et des paramtres
Langage algorithmique, vritable langage de programmation,
muni de structures de contrle de programme et de variables.
Les systmes monolithiques
Prsentation gnrale des systmes dexploitation Structure dun systme dexploitation
La plus largement rpandue.
Le SE est une collection de procdures, chacune pouvant appeler tout moment
n'importe quelle autre.
Pour construire le code objet du systme, il faut compiler toutes les procdures, pas
de masquage des informations; chaque procdure est visible de toutes les autres
Systmes monolithiques avec une structure minimale
Les services offerts par le systme d'exploitation sont appels par des instructions
de type SVC (Supervisor Call )
Cette instruction commute la machine du mode utilisateur au mode noyau et
2013-2014
L'environnement de programmation
Unix/Linux
39
Cette instruction commute la machine du mode utilisateur au mode noyau et
transfre le contrle au systme d'exploitation.
proc$dure
principale
proc$dure
de ervice
proc$dure
utilitaire
Les systmes couches
Prsentation gnrale des systmes dexploitation Structure dun systme dexploitation
La gnralisation de la structuration simple
Chaque couche ne pouvant tre appele que par des procdures
qui lui sont immdiatement infrieures
Structurer le systme d'exploitation en plusieurs couches,
chaque couche s'appuyant sur celle qui lui est immdiatement
infrieure.
Exemple : THE de Dijkstra (un simple systme de traitement par
lots - batch)
2013-2014
L'environnement de programmation
Unix/Linux
40
.;- 7p$rateur
.4- #rogramme utiliateur
.3- 5etion de +/- 2 cha/ue proceu dialoguait avec de p$riph$ri/ue a)trait
.2- communication entre le proceu et la conole de l'op$rateur
.1- 5etion de la m$moire2 allocation d'epace m$moire pour le proceu 8pagination9.
.0- Allocation du proceeur par commutation de temp entre le proceu2 oit @ la
uite d'expiration de d$lai2 oit @ la uite d'interruption A multiprogrammation de )ae du
proceeur
Les Machines virtuelles
Prsentation gnrale des systmes dexploitation Structure dun systme dexploitation
Un des premiers SE grer le concept de machine virtuelle
a t l'adaptation temps partag de l'OS/360 d'IBM,
proopos vers 1968 sous le nom de VM/370 en 1979.
Dissocier les deux fonctions dun SE
Gestionnaire de ressources (multiprogrammation)
Fournir une machine tendue (interface)
Le VM/370, s'excute sur le mme matriel et fournit la
couche suprieure plusieurs machines virtuelles, copies
2013-2014
L'environnement de programmation
Unix/Linux
41
couche suprieure plusieurs machines virtuelles, copies
conformes de la machine relle (interruptions, mode
noyau/utilisateur, etc...)
Chaque machine virtuelle peut excuter son propre SE.
Lorsqu'une machine virtuelle excute en mode interactif un
appel systme, l'appel est analys par le moniteur temps
partag de cette machine, CMS.
Les Machines virtuelles
Prsentation gnrale des systmes dexploitation Structure dun systme dexploitation
2013-2014
L'environnement de programmation
Unix/Linux
42
Avantage?
- .ha/ue 6: peut ex$cuter un -+ tout comme ur le mat$rielB #lu d'un -+
par machineB
- +n $parant la machine $tendue de la multiprogrammation cha/ue
!onction et plu !acile @ entretenir
($avantage? pluieur couche de trap 8d$routement9
Le modle client-serveur
Prsentation gnrale des systmes dexploitation Structure dun systme dexploitation
Un des problmes majeurs avec les SE?
Ils sont gigantesques!
Moins que lon met dans le noyau, le plus
facile ce sera dentretenir et amlior le SE
Un trs petit noyau sapple un micronoyau
(microkernel)
2013-2014
L'environnement de programmation
Unix/Linux
43
(microkernel)
Si on enlve des fonctions du noyau du SE,
ces fonctions doivent exister dans lespace
utilisateur
reporter la plupart des fonctions du systme
dexploitation dans des processus utilisateur
Le modle client-serveur
Prsentation gnrale des systmes dexploitation Structure dun systme dexploitation
le noyau ne gre que la communication entre les clients et les serveurs.
2013-2014
L'environnement de programmation
Unix/Linux
44
le noyau ne gre que la communication entre les clients et les serveurs.
La dcomposition du SE serveur plus faciles modifier
Les serveurs sexcutent comme des processus en mode utilisateur, et
non en mode noyau,
un bogue dans un serveur naffectera pas, en gnral, lensemble de la
machine, les dgts se limitant au serveur.
Le modle client-serveur se prte, une utilisation sur des systmes
distribus .
Un client qui envoie des messages un serveur na pas besoin de savoir
si le message est trait localement ou sur une machine distante via un
rseau
Caractristiques des SE modernes
Prsentation gnrale des systmes dexploitation
Multi-threading
Processus lgers
Multi-processus
Multi-coeur, partage mmoire (multi-
processeur)
2013-2014
L'environnement de programmation
Unix/Linux
45
processeur)
Architecture micro-noyaux (micro-kernel)
Gestion de ladressage
Communication interprocess
Ordonnancement
Systme distribu
Principaux systmes dexploitation
Prsentation gnrale des systmes dexploitation
Apple
:ac 7- .laic -%t&me ; C -%t&me D C -%t&me E C :ac 7- F C :ac 7- =
($riv$ de 0e1G-G+# 0e1G-G+# C Hhapod% C (ar3in C :ac 7- 1 C i7-
($riv$ de Be7- Blue+%ed7- C Iai4u C J+GA
.ico -%tem .ico "7-
(7- (H-(7- C ,ree(7- C :--(7- C #.-(7-
"B: A"1 C :6- C 7-/2 C 7-/3D0 C 7-/3=0 C K/7- C 7-/400
:icroo!t Lindo3
Ba$ ur (7- :--(7- C 1.x C 2.x C 3.x C =; C =F C :e
Branche 0G 0G C 2000 C 1# C 2003 C 6ita C 200F C E C F
B-( ,reeB-( C 0etB-( C 7penB-( C (ragon,l% B-( C #.-B-(
2013-2014
L'environnement de programmation
Unix/Linux
46
#7-"1 / U0"1
B-( ,reeB-( C 0etB-( C 7penB-( C (ragon,l% B-( C #.-B-(
50U (e)ian 50U/Iurd C Arch Iurd
Linux 8lite9
Arch Linux C (e)ian C ,rugal3are C ,edora C ,untoo C 5entoo C
:andriva C Hed Iat C -lac43are C -U-+ C U)untu
Autre d$riv$
A"1 C I#-U1 C "H"1 C L%nx7- C :inix C M01 C -olari C -%tem 6 C
GruD4 C UnixLare C .horu7-
($riv$ de Amiga7- :orph7- C AH7-
('importance hitori/ue .#/:C .G-- C 5.7- C 5enera C "G- C :ultic C #lan = C M(7- C H-G- C G+0+1 C G7#--20 C G7- C 6:-
Autre %t&me e%e7- C ,ree(7- C "n!erno C :enuet7- C Heact7- C U0".7- C 6xLor4
-%t&me d'exploitation mo)ile
Android C Bada C Blac4Berr% 7- C i7- C 7pen:o4o C #alm 7- C I# 3e)7- C -%m)ian 7- C Lindo3 .+ C
Lindo3 :o)ile
Prsentation gnrale du systme U#I$
Le -%t&me de !ichier
LENVIRONNEMENT
UNIX/LINUX
Le -%t&me de !ichier
Le hell
Le !iltre? grep2 ed2 a342 !ind2 ort
:aher -+LLA:"
%
2013-2014 4E L'environnement de programmation Unix/Linux
SOMMAIRE
Prsentation gnrale du systme UNIX
Le Systme de fichiers
Le shell
Les filtres
grep,
sed,
awk,
find,
sort
2013-2014 48
L'environnement de programmation
Unix/Linux
Prsentation gnrale du systme UNIX Historique
1969
Version exprimentale sur PDP-7
1971
Version 1
1972
1973
UNIX en C- Bell Labs
Version 2
1974
Version 5
1974
PWB
1975
Version 6
1979
Version 7
1974
HERT temps rel
1977
BSD 2.0
Berkley
1980
2013-2014
L'environnement de programmation
Unix/Linux
49
Version 7
1980
BSD 4.1
1981
SunOs
1986
BSD 4.3
1981
System III
1983
System V AT&T
1985
System V R2.0
1986
System V R3.0
1980
XENIX
Microsoft
1987/ 88
SYSTEM V R3.2
1990
SYSTEM V R4.0
1981
XENIX 2.0
Micro/SCO
1985
XENIX 5.1
1989
SCO UNIX
System V/386
1986
AIX 1.0
IBM
1990
AIX 3.1
SUN
1987
MACH
1991
OSF/1
Les raisons du succs d'UNIIX
crit en C, et donc est facilement portable
les sources sont disponibles; adaptations
faciles aux besoins
l'environnement UNIX est particulirement
riche et fcond
Prsentation gnrale du systme UNIX Historique
riche et fcond
2013-2014
L'environnement de programmation
Unix/Linux
50
Le phnomne de standardisation
Plusieurs spcifications constituent une base
de garantie de la portabilit d'applications;
POSIX (1983) publie par l'IEEE et issu d'un
document de l'association /usr/group
X/OPEN (1984): cre par les constructeurs
europens
Prsentation gnrale du systme UNIX Historique
europens
SVID (1984) d'origine AT&T.
OSF (1984) IBM, DEC, BULL, HP... impose le
standard AIX/OSF (UNIX d'IBM)
ARCHER (AT&T) ou UNIX International, le
standard est UNIX SYSTEM V R 4
2013-2014
L'environnement de programmation
Unix/Linux
51
Caractristiques essentielles
UNIX est un systme multi-tches, multti-threads,
multi-utilisateurs en temps paratag.
Les entres-sorties sont banalises sous forme de
fichiers (priphrique, prise rseau, fichier ordinaire)
L'utilisateur a deux faons pour accder aux services
offerts par le systme :
crit des programmes qui font des appels au noyau
Prsentation gnrale du systme UNIX
Caractristiques essentielles
crit des programmes qui font des appels au noyau
utilise l'interface-utilisateur qui fourni un langage de
commande, le shell (Bourne-Shell, C-Shell, Korn-Shell, T-
Shell)
2 sortes d'utilisateurs:
l'administrateur du systme: a tous les droits; responsable
du systme (root);
les autres usagers : enregistrs par le root, rassembls en
groupes.
2013-2014
L'environnement de programmation
Unix/Linux
52
#r$entation g$n$rale du %t&me U0"1
Le Systme de ichiers
LENVIRONNEMENT
UNIX/LINUX
Le Systme de ichiers
Le hell
Le !iltre? grep2 ed2 a342 !ind2 ort
:aher -+LLA:"
%
2013-2014 ;3 L'environnement de programmation Unix/Linux
Le Shell
programme ordinaire appel interprteur
de commande
choisi par l'usager
Un programme shell est interprt
interactivement ou en mode dtach;
Prsentation gnrale du systme UNIX
Caractristiques essentielles
interactivement ou en mode dtach;
vritable langage de programmation
Les 3 fonctions intressentes sont :
Les noms de fonctions abrgs
La redirection des entes-sortie
Crer un environnement sur mesure
2013-2014
L'environnement de programmation
Unix/Linux
54
Processus
entit dynamique qui nait, qui vit en
toute indpendance ou en
communiquant avec d'autres
processus , qui son tour peut crer
des processus, et enfin qui meurt.
Un processus est caractris par
Prsentation gnrale du systme UNIX
Caractristiques essentielles
Un processus est caractris par
numro(PID);
un pre (PPID);
un propritaire (UID);
un groupe propritaire (GID),

2013-2014
L'environnement de programmation
Unix/Linux
55
Fichiers standards
Prsentation gnrale du systme UNIX
Caractristiques essentielles
P1
entre standard
sortie standard
erreur standard
1
2 0
P2
1
2
0
cran
clavier
#roceu Gh$ori/ue
2013-2014
L'environnement de programmation
Unix/Linux
56
2
0
clavier
Un proceu !il du hell initial
P3
1
2
0
cran
clavier
fs
P4
1
2
0
fs
fe
fi
le entr$e-ortie tandard redirig$e
ortie tandard redirig$
Fichiers standards
Diffrentes formes de redirection sont possibles:
1>f ou >f redirection de la sortie standard sur f, avec cration;
2>f idem, pour rediriger l'erreur standard;
1>>f ou >>f redirection de la sortie standard sur f, avec cration de f s'il
n'existait pas;
2>>f idem, pour rediriger l'erreur standard;
0<f ou <f redirection de l'entre standard partir de f;
affiche un message sur la sortie standard
Prsentation gnrale du systme UNIX
Caractristiques essentielles
$ echo ceci est mon message
le message sert initialiser le fichier f.
$ echo ceci est mon message >f
crie la liste des fichiers dans fichier.liste
$ ls >fichier.liste
$ cat f1 f2 f3 >>temp ajouter f1 f2 f3 dans temp
envoye un message des personnes provenant du fichier let
$ mail marie eric phil <let
$ sort <temp trie le contenu du fichier temp
2013-2014
L'environnement de programmation
Unix/Linux
57
Composition de processus
composition squentielle (;): C1;C2;C3
$ date; wc <fff; who am i; echo fin de commande>toto
Mon Sep Jan 27 19:08:47 PST 1993
12 33 345
jmr tty9 Jan 27 17:55
$ cat toto
fin de commande composee
composition parallle de processus indpendants (&):
Prsentation gnrale du systme UNIX
Caractristiques essentielles
composition parallle de processus indpendants (&):
C1&C2&C3
le commande wc s'excutera pendant que l'usager la
main
$ wc ch* >wc.out &
2145
$ lp ch*& cc code.c
composition parallle de processus communicants(|): C1|C2|C3
2013-2014
L'environnement de programmation
Unix/Linux
58
P1
0 1
2
P2
1
2
P3
1
2
0 0
Fichier
Un fichier est une suite non structure, stocke
sur une mmoire auxiliaire.
Plusieurs sortes de fichiers:
les fichiers ordinaires;
les rpertoires;
les priphriques accs par caractre (terminal);
les priphriques accs par bloc (disque);
Le Systme de fichiers Notion de fichier
les priphriques accs par bloc (disque);
les rfrences vers un autre volume (liens
symboliques);
les tubes mettant en communication deux processus ;
les prises rseaux, pour accder des fichiers
loigns.
Un fichier peut avoir plusieurs liens (noms)
2013-2014
L'environnement de programmation
Unix/Linux
59
Caractristiques d'un fichier
Les caractristiques statiques d'un fichier sont
stockes dans un descripteur appel i-noeud:
le type de fichier (ordinaire, rpertoire, ...);
sa taille, en octets;
le couple UID-GID; le numro du propritaire et le
numro de son groupe;
Le Systme de fichiers Notion de fichier
date de cration, la date de dernire modification et la
date de dernire consultation;
un compteur de rfrence sur le i-noeud (nombre de
liens);
la liste des blocs contenant l'information sur le disque.

2013-2014
L'environnement de programmation
Unix/Linux
60
Dsignation d'un fichier : rpertoires
La correspondance entre dsignation
externe (identificateur) et dsignation
interne (n de i-noeud) est ralise par les
rpertoires .
Un rpertoire (catalogue) est un fichier
particulier : c'est en fait un tableau deux
Le Systme de fichiers Notion de fichier
particulier : c'est en fait un tableau deux
colonnes, l'une noms des fichiers,numro
de i-noeud.
2013-2014
L'environnement de programmation
Unix/Linux
61
..
.
usr
bin
..
.
local
bin
2
25
100
150
..
.
rm
ln
2
36
50
52
36
25
2
0 2
25 36
Rpertoire
Le Systme de fichiers Notion de fichier
bin dev lib etc tmp usr
/ (racine)
2013-2014
L'environnement de programmation
Unix/Linux
62
bin dev lib etc tmp
user1 bin lib tmp usr2
courier jeux unix progc docu jeux progc
doc1 doc2 doc doc1 doc2 doc3 prog1.c pog2.c
usr
Le chemin complet du fichier prog1.c est : /usr/user1/progc/prog1.c
le chemin relatif doc : courier/doc
Les permissions
Chaque fichiers possde un ensemble de permissions, qui
dterminent qui peut faire quoi avec le fichier.
3 types de permissions associes un fichier :
lecture examen du contenu;
criture modification;
excutionfaire excuter comme un programme;
L'option -l de ls imprime les permissions :
$ ls -l /etc/passwd
-rw-r--r-- 1 root 5115 Aug 30 10 10:40 /etc/passwd
Le Systme de fichiers Notion de fichier
-rw-r--r-- 1 root 5115 Aug 30 10 10:40 /etc/passwd
$ ls -lg /etc/passwd
-rw-r--r-- 1 root 5115 Aug 30 10 10:40 /etc/passwd
$ ls -l /bin/passwd
-rwsr-xr-x 1 root 5115 Aug 30 10 10:40 /etc/passwd
Le s la place du x dans les permissions du propritaire indique
que, lorsque la commande est excute, elle doit obtenir les
permissions associes son propritaire (set-uid).
2013-2014
L'environnement de programmation
Unix/Linux
63
Les permissions
$ ls -ld
drwxrwxr-x 1 root 5115 Aug 30 10 10:40 etc/passwd
La permission d'effacer un fichier est indpendante du fichier.
chmod change les permissions d'un fichier, 2 formes :
soit un nombre octal , de la forme
chmod nnn fichiers 4:"read", 2:"write", 1:"execute"
$ chmod 666 essai # lire, crire par tous
Le Systme de fichiers Notion de fichier
soit sous forme symbolique
chmod [qui] * position [droit]+ fichiers... qui :: u|g|o|a
position :: +|-|= droit :: r|w|x
$ chmod +x commande # tout le monde peut excuter
$ chmod -w f1 # empche d'crire sur f1
Seul le propritaire d'un fichier peut en changer les
permissions (le super utilisateur aussi ).
chown, chgrp
2013-2014
L'environnement de programmation
Unix/Linux
64
Introduction
Les services offerts par UNIX sont accessibles par :
un sous-programme du noyau UNIX, appel depuis un
programme ( C, PASCAL)
un programme excutable travers un interprteur de
commande (shell) .
Le langage Bourne-Shell est un langage algorithmique.
Il permet de manipuler sont essentiellement les fichiers
et les rpertoires de l'arborescence d'UNIX.
Le shell introduction
et les rpertoires de l'arborescence d'UNIX.
Les instructions du langage de commande peuvent tre:
un appel d'un sous-programme externe: ls , rm, cp, ...
un appel d'un sous-programme interne : echo , read, ...
structure de contrle : if , while, ...
une liste de commandes ou phrases (c1;c2 ou c1|c2)
2013-2014
L'environnement de programmation
Unix/Linux
65
#r$entation g$n$rale du %t&me U0"1
Le -%t&me de !ichier
LENVIRONNEMENT
UNIX/LINUX
Le -%t&me de !ichier
Le S&ELL '(ourne shell)
Le !iltre? grep2 ed2 a342 !ind2 ort
:aher -+LLA:"
%
2013-2014 DD L'environnement de programmation Unix/Linux
Caractres gnriques
? remplace un caractre quelconque, sauf le ;
* remplace n'importe quelle chane, mme vide, de caractres ne
comportant pas
[...] remplace un caractre parmi ... , ou un caractre parmi ceux
qui ne sont pas numrs entre [...] , si le premier est un point
d'exclamation.
$ ls
t1.p t2b.p t3.p tf.p tn.p tx.p
t1a.p t2.p t4.p tn tx
Le shell Notions de base
t1a.p t2.p t4.p tn tx
$ echo Mes versions de TP sont t?.p
Mes Versions de TP sont t1.p t2.p t3.p tf.p tn.p
tx.p
$ echo les bonnes versions t[!0-9].p
les bonnes versions tf.p tn.p tx.p
$ echo Dans t1?.p les tableaux sont de la forme
t\[nx] avec nx=12 \*P
Dans t1a.p t&b.p les tableaux sont de la forme t[nx]
avec nx=12*P
2013-2014
L'environnement de programmation
Unix/Linux
67
Notions de base
Sparateurs
; sparateurs de phrases
<tab> espace sparateurs d'entits lexicales (mot)
Mots
dsignent les variables, les symboles du langage (mots-cl) et les noms de fichiers.
Un commentaire est prfix par un #.
Caractres gnriques
? remplace un caractre quelconque, sauf le ;
* remplace n'importe quelle chane, mme vide, de caractres ne comportant pas
[ ]
Le shell Notions de base
[...] remplace un caractre parmi ... , ou un caractre parmi ceux qui ne sont pas numrs
entre [...] , si le premier est un point d'exclamation.
$ ls
t1.p t2b.p t3.p tf.p tn.p tx.p
t1a.p t2.p t4.p tn tx
$ echo Mes versions de TP sont t?.p
Mes Versions de TP sont t1.p t2.p t3.p tf.p tn.p tx.p
$ echo les bonnes versions t[!0-9].p
les bonnes versions tf.p tn.p tx.p
$ echo Dans t1?.p les tableaux sont de la forme t\[nx] avec nx=12 \*P
Dans t1a.p t&b.p les tableaux sont de la forme t[nx] avec nx=12*P
Caractres spciaux & | < > $ ( ) ' " ` { } \
caractre spcial devient un caractre normal s'il est prcd du caractre \ ou s'il
est situ dans une parenthsage particulier.
2013-2014
L'environnement de programmation
Unix/Linux
68
Parenthsages
Servent regrouper des squences de mots ou isoler des mots:
{...} excute les commandes dans ... par le mme shell;
(...) excute les commandes ... par un shell fils;
'...' prend littralement ... ; aucun caractre spcial n'interprt ;
"..." prend littralement ... aprs interprtation de $, '...', et \
`...` excute les commandes dans ... ; le rsultat (sortie standard) remplace `...`
$ echo '***'
*** # idem \*\*\*
$ echo "Voici l'exemple"
Le shell Notions de base
$ echo "Voici l'exemple"
Voici l'exemple
$ echo la variable 'as$V3' contient $HOME/as\$
la variable as$v3 contient /users/fc/tp1/as$
le shell remplace $HOME par /users/fc/tp1/as, v3 par vide
$ echo "la variable as$V3 contient $HOME/as\$"
la variable as contient /users/fc/tp1/as$
$ echo 'la variable as$V3 contient $HOME/as\$'
la variable as$v3 contient $HOME/as$
$ (date ; who)>f1 <f2
wed sep 28 09:11:09
voustty2 sep 28 08:30
mhs tty4 sep 28 09:30
2013-2014
L'environnement de programmation
Unix/Linux
69
Variables
dsignes par des mots; elles ne se dclarent pas, et leurs type (numrique ou
chane) dpend de leur interprtation par les commandes.
Initialisation variable=valeur
valeur: valeur numrique, une chane de caractres, le rsultat d'un commande, une
liste de commandes ...
$ N=1 # N est une variable entire
$ ACTIF=`who` # ACTIF est une chane, rsultat en sortie par l'excution de who
$ USAGE="echo Syntaxe: $0 f1 F2; cat $help"
USAGE est une liste de commandes
Le shell Variables; Arguments et paramtres
Evaluation des variables
La prise de valeur d'une variable ou d'un paramtre est ralise par l'oprateur $ prfixant le nom de la
variable ou du paramtre.
Les accolades {} peuvent tre ncessaire autour du nom,
$ REP=${REP}miage # Concatner "miage" sans espace la valeur de REP
2013-2014
L'environnement de programmation
Unix/Linux
70
Evaluation des variables
ion des variables
{variable:-mot} substitue la variable si elle est dfinie , sinon le mot (non
valu)
$ t=${x:-60} # t aura la valeur de x, sinon 60
{variable:=mot} idem avec de plus affectation de la variable si elle n'est pas
dfinie
$ a='bonjour'
$ echo ${a:='au revoir'}
bonjour
$ echo ${b:='salut'} # b aura la valeur 'salut'
salut
{variable:?mot} si la variable est initialis et non nulle, elle sera substitue;
Le shell Variables; Arguments et paramtres
{variable:?mot} si la variable est initialis et non nulle, elle sera substitue;
autrement, imprime mot et termine le processus Shell en cours.
$ echo ${b:?Erreur} # b pour valeur initiale 'salut'
salut
$ echo ${c:?Attention!} # c n'est pas initialise
c : Attention!
{variable:+mot} si la variable est initialis et non nulle, l'interprte substituera mot
et sinon la chane vide, la variable n'tant pas modifie.
$ echo ${b:+bonjour}
bonjour
2013-2014
L'environnement de programmation
Unix/Linux
71
Paramtres des commandes
Les paramtres effectifs d'une commande ou argument sont des chanes de
caractres.
Les paramtres formels sont dsigns par des chiffres; des paramtres positionnels:
0 nom de la commande;
1 premier paramtre effectif;
2... deuxime paramtre effectif, ainsi de suite;
"$*" quivalent "$1 $2 ..." "$@" quivalent "$1" "$2" ...
Le shell Variables; Arguments et paramtres
2013-2014
L'environnement de programmation
Unix/Linux
72
Porte et environnement
ion des variables
La porte d'une variable est le processus qui l'a cre.
export rend les variables visible dans les processus Shell qui seront cres par la
suite (fils)
$ x=Bonjour
$ export x
$ sh# un autre shell
$ echo $x
Bonjour # x est connue dans le sous-shell
Le shell Variables; Arguments et paramtres
2013-2014
L'environnement de programmation
Unix/Linux
73
Variables prdfinies
# nbre de paramtres effectifs d'une commande (sous-prog.);
? code de retour d'une commande;
$ numro de du processus Shell en cours;
! numro du dernier processus lanc en arrire plan;
HOME nom du rpertoire personnel, fournit le paramtre par dfaut de cd;
PATH rgles de recherches des commandes;
TERM type du terminal utilis
PS1 valeur de premier prompt ($ par dfaut)
Le shell Variables; Arguments et paramtres
PS1 valeur de premier prompt ($ par dfaut)
PS2 valeur de second prompt (> par dfaut)
IFS caractres sparateur de chanes dans le Shell.
Une variable peut tre dtruite par la commande interne unset (sauf PATH, PS1,
PS2)
2013-2014
L'environnement de programmation
Unix/Linux
74
read, echo
ion des variables
read lit une ligne de lentre standard au clavier; chacun
des mots est affect successivement une variable (dans
l'ordre).
$ read x y z # si on tape "une deux trois quatre cinq"
une deux trois quatre cinq
On aura les variables x="une", y="deux" et z="trois quatre cinq"
echo affiche sa liste darguments sur la
Le shell Lecture et affichage
sortie standard; admet les caractres spciaux
(\t \n \f \c)
echo [-ne] [message ...]
echo {--help,--version}
-n Ne pas effectuer le saut de ligne final.
-e Interprter les squences de caractres prcdes d'un backslash '\
\a alerte (sonnerie) \n saut de ligne \c supprimer le saut de ligne final
\f saut de page \r retour chariot \b retour en arrire d'un caractre
\t tabulation horizontale \v tabulation verticale \\ backslash
\nnn le caractre de code ASCII nnn (en octal)
2013-2014
L'environnement de programmation
Unix/Linux
75
expr
ion des variables
expr - Evalue des expressions
expr expression...
expr {--help,--version}
Incrmentation de N
N=`expr $N + 1` # autres oprateurs : - * / %(mod)
Oprateurs: | & < <= == != > >= + - / * % :
match chane exp_reg
substr chane pos lg
index chane classe_caractre
length chane
Le shell Expressions
length chane
2013-2014
L'environnement de programmation
Unix/Linux
76
test
ion des variables
test - Vrifier le type d'un fichier, et comparer des valeurs.
test expr ou encore [ expr ]
test {--help,--version}
test renvoie une valeur 0 (vrai) ou 1 (faux) suivant l'valuation
de l'expression conditionnelle expr.
expr terme simple, ou suite de termes combins avec les
oprateurs logiques : -a, -o !. ; parenthses \( ...\)
Le shell Expressions
oprateurs logiques : -a, -o !. ; parenthses \( ...\)
-r f vrai si f existe et a le droit r;
-w f vrai si f existe et a le droit w;
-x f vrai si f existe et a le droit x;
-f f vrai si f existe et est un fichier ordinaire;
-d r vrai si le rpertoire r existe;
-u f vrai si f existe et a le bit set-UID;
-s f vrai si f existe et n'est pas de longueur nulle;
2013-2014
L'environnement de programmation
Unix/Linux
77
test (suite)
ion des variables
-z ch vrai si la chane ch est de longueur nulle;
-n ch vrai si la chane ch est de longueur non nulle;
c1 = c2 vrai si la chane c1 et c2 sont gales (espacement obligatoire) ;
c1 != c2vrai si la chane c1 et c2 sont diffrentes;
n1 -eq n2 vrai si les nombres n1=n2 (prdicats:-ne -ge -gt -lt -le)
f1 accssible en lecture, on affiche un message
test r f1 && echo f1 accessible en lecture
Le shell Expressions
I compris entre 10 et 20
if [ $I -ge 10 -a $I -le 20] then ...
le fichier rsultat n'est pas vide, ou R non nulle et N> NN
if test -s resultat -o \( -n $R -a $N -gt $NN \)
then ...
2013-2014
L'environnement de programmation
Unix/Linux
78
Structure de la ligne de commande
ion des variables
Commande simple:
retourne code zro si excution sans erreur ou une valeur non nul une
signification propre la commande qui l'a retourne.
Tube (pipe-line) : squence de 2 ou plusieurs commandes
spares par le "|".
Liste de commande: squence de commandes simples ou de
pipe-lines spars par l'un des caractres suivants : ; & && ||
Le shell Les Commandes
pipe-lines spars par l'un des caractres suivants : ; & && ||
C1 ; C2 excution squentielle de C1 puis C2 ;
C1 & C2 excution asynchrone;
C1 && C2 excute C1; s'il n'ya pas d'erreur , excute C2;
C1 || C2 excute C1; s'il ya une erreur , excute C2.
Structure de contrle
2013-2014
L'environnement de programmation
Unix/Linux
79
La boucle pour...
for <variable> [in <chaine> ...]
do <liste de commandes>
done
La liste de commande est excute pour chaque valeur de la
variable prise dans les mot de la chane
for prog in *.p
do echo e "\n\n$prog \n"
Le shell Les Commandes
do echo e "\n\n$prog \n"
head -1 $prog
done
affiche la liste des paramtres
for i # quivalent for i in $*
do echo $i ; done
2013-2014
L'environnement de programmation
Unix/Linux
80
La boucle tantque...
while <liste de commandes>
do <liste de commandes>
done
Tant que la dernire commande de la premire <liste de
commandes> est vrai, la deuxime <liste de commandes> est
excute
Tant que la fin du fichier nest pas atteint
Le shell Les Commandes
Tant que la fin du fichier nest pas atteint
while read ligne; do ; done
lire un choix numrique
echo "Votre choix (1-4) "
while echo "?\c"; read choix;
[ "$choix" -lt 1 -o $choix -gt 4 ]
do echo "Recommencer (1-4) "
done
2013-2014
L'environnement de programmation
Unix/Linux
81
La slection si
if <liste de commnades 1>
then <liste de commandes 2>
else <liste de commandes 3>
fi
La liste de commande 2 est excut si la liste de commandes 1
est vraie, sinon la liste de commandes 3.
if test -f $1
Le shell Les Commandes
if test -f $1
then echo $1 existe
else echo $1 n\'existe pas
fi
c1&&c2 scrit: if c1; then c2; fi
c1||c2 scrit: if c1; then :;else c2; fi
2013-2014
L'environnement de programmation
Unix/Linux
82
La slection si
if ...
then
else if ...
then
....
ou encore
if ...
then
.. .
elif ...
Le shell Les Commandes
....
fi

fi
elif ...
....
else

fi
2013-2014
L'environnement de programmation
Unix/Linux
83
La slection cas ...
case <chane> in
<motif> ) <liste de commandes>;;
<motif> ) <liste de commandes>;;

esac
excute la liste de commandes correspondant au premier motif
satisfaisant la chane , puis l'excution du case est termine.
Le shell Les Commandes
satisfaisant la chane , puis l'excution du case est termine.
aiguillage aprs la lecture du choix
case $choix in
1) sh choix1;;
2) sh choix2;;
*) echo "Pas encore au point";;
esac
2013-2014
L'environnement de programmation
Unix/Linux
84
Commandes Internes
prdfinies dans le Shell; pas de fichier excutable ayant son
nom.
break [n] sortir d'une boucle (tant que, pour), ou de n
embotements de boucles;
continue [n] continuer l'itration suivante d'une boucle,
ou la nme boucle englobante;
exit [n] quitter le programme avec en code retour celui de la
Le shell Les Commandes
exit [n] quitter le programme avec en code retour celui de la
dernire commande excute, ou n si
return [n] idem pour quitter une fonction;
. fichier excute un fichier Shell dans le Shell courant;
: commande vide du Shell. Son code de retour est 0
while :; do date; done
2013-2014
L'environnement de programmation
Unix/Linux
85
Commandes relatives aux varaibles
et paramtres
eval mot mot contient une liste de commande Shellqui seront
sont excutes.( sous-programme).
# fichier de dmarrage /etc/profile
MESSFIN="echo `logname` de \'connecte\' le ; date;"
QUOTAT='TAILLE=`du -s $HOME | cut -f1`'
MESQUIT=' echo Test des quotas en cours"
eval $QUOTAS
Le shell Les Commandes
eval $QUOTAS
if [ $TAILLE -gt $MAXQUOTAS ]
then
eval $MESSFIN
exec sh
fi
2013-2014
L'environnement de programmation
Unix/Linux
86
Commandes relatives aux varaibles
et paramtres
set [arg1]+ fournit les valeurs des paramtres effectifs
correspondant aux paramtres formels 1, 2, ...
paramtrer les sous-programmes raliss par eval
set `date` # range le jour de la semaine dans $1
mois dans $2 ...
set -u [mot] substitution d'une variable non dfinie (mot)
provoque une erreur
Le shell Les Commandes
provoque une erreur
shift [n] les paramtres $n+1.... ($2, par dfaut) sont
renomms partir de 1.
2013-2014
L'environnement de programmation
Unix/Linux
87
Redirection des E/S
>fichier dirige la sortie standard vers fichier;
>> fichier ajoute la sortie standard fichier;
< fichier prend la sortie standard fichier;
n> fichier dirige la sortie du descripteur n vers fichier;
n>> fichier ajoute la sortie du descripteur n vers fichier;
<&m le fichier de descripteur m au lieu de l'entre
Le shell Redirection des E/S
<&m le fichier de descripteur m au lieu de l'entre
standard;
>&m idem pour la sortie standard;
n> &m fusionne la sortie du descripteur n celle de m ;
n< &m fusionne l'entre du descripteur n celle de m ;
n< fichier dirige la sortie du descripteur n vers fichier
<< [-]mot l'entre est lue jusqu' une ligne contenant mot (ou
fin de fichier).- ignorer les blancs de dbut de ligne;
2013-2014
L'environnement de programmation
Unix/Linux
88
Redirection des E/S
$ (echo Message normal
> echo message pour signaler une erreur 1>&2
> echo Autre message normal
) > sortie 2>erreur
$ cat sortie
Message normal
Autre message normal
Le shell Redirection des E/S
$ cat erreur
Message pour signaler une erreur
2013-2014
L'environnement de programmation
Unix/Linux
89
Gestion des processus et des vnements
wait [n] suspend l'excution jusqu' ce que le processus n,
ou tous les processus lancs en arrire-plan, se terminent.
trap [arguments] [n]+ l'argument est une commande qui sera
excute par le Shell lorsque le signal n survient;
trap [n]+ les trappes sont remises leur tat primitif
(restaurer)
trap liste des commandes associs chaque signal.
Le shell Sous-programme
trap liste des commandes associs chaque signal.
exec [commande] lance la commande par recouvrement du
processus shell
$ exec ksh
remplacement du Shell par un processus Korn-shell
$ exec login
recommencer une session, en gardant la ligne
$ exec >session
pour ce shell, la sortie standard est le fichier
2013-2014
L'environnement de programmation
Unix/Linux
90
Sous-programme ou procdure shell
Un texte en Shell stock dans un fichier constitue une
procdure Shell. Son activation peut se faire:
sh <nom du fichier> <arguments>
<nom du fichier> <arguments> , le droit x doit tre positionn
$ sh proc1 f1 f2 f3
$ proc1 f1 f2 f3
Le shell Sous-programme
2013-2014
L'environnement de programmation
Unix/Linux
91
#r$entation g$n$rale du %t&me U0"1
Le -%t&me de !ichier
LENVIRONNEMENT
UNIX/LINUX
Le -%t&me de !ichier
Le hell
Les iltres* gre"+ sed+ a,-+ ind+ sort
:aher -+LLA:"
%
2013-2014 =2 L'environnement de programmation Unix/Linux
Recherche d'une chane dans un fichier: grep
grep, egrep et fgrep lisent ligne par ligne et affichent les lignes de
fichiers donns en paramtre et qui contiennent un motif donn.
grep [option] <motif> [<fichier> ... ]
motif est une expression rgulire dans laquelle certains caractres ont
une signification particulire.
Sauf option contraire, chaque ligne ayant cette proprit est crite sur la
sortie standard.
Le code de retour est 0 si un motif a t trouv, 1 sinon, et 2 s'il y a eu des
Les Filtres La famille grep
Le code de retour est 0 si un motif a t trouv, 1 sinon, et 2 s'il y a eu des
erreurs
2013-2014
L'environnement de programmation
Unix/Linux
93
Options
Op
-v seules les lignes ne contenant pas le motif sont affiches;
-v seules les lignes contenant pas le motif sont affiches;
-c seul le nombre de lignes satisfaisantes est affich;
-i ignore la distinction minuscule/majuscule (grep );
-l seules les noms de fichiers contenant le motif sont affichs;
-n numrote les lignes affiches;
-e motif lorsque le motif commence par un tiret;
Les Filtres La famille grep
-f fichier le motif est dans le fichier (egrep et fgrep)
$ grep -n variable *.ch cherche variable dans les source
$ grep From $MAIL affiche les messages contenant From
$ grep From $MAIL| grep -v marie ... autre que marie
$ grep -c marie $HOME/lib/annuaire trouve le n de marie
$ who | grep marie est-elle connecte?
$ ls | grep -v temp tous les fichiers sauf temp
2013-2014
L'environnement de programmation
Unix/Linux
94
expressions rgulires de grep et fgrep
c tout caractre non spcial
\c ignore la signification spciale de c
^ dbut de ligne
$ fin de ligne
. n'importe quel caractre unique
[...] n'importe quel caractre unique parmi ....;
[^...] n'importe quel caractre unique ne figurant pas parmi ....
Les Filtres La famille grep
\n ce qui a t identifi par la nime sous expression \(...\)
r* zro ou plus occurrences de r
r+ une ou plus occurrences de r
r? zro ou une occurrence de r
r1r2 r1 suivi de r2
r1| r2 r1 ou r2 (egrep seulement)
\( r \) sous expression r repre (grep seulement); voir \n;
(r) expression rgulire r (egrep seulement); peut tre imbriqu
2013-2014
L'environnement de programmation
Unix/Linux
95
Exemples
$ grep '^From' $MAIL
$ ls -l | grep '^d'
$ ls -l | grep '^.......rw'
$ grep '^[^:]*::' /etc/passwd
fgrep recherche plusieurs expressions simultanment
egrep traite des expressions rgulires avec 'ou' et des () pour grouper les
expressions.
Les Filtres La famille grep
2013-2014
L'environnement de programmation
Unix/Linux
96
Recherche d'un fichier: find
find [rpertoire]+ [expression]+
find descend rcursivement des sous-hirarchies de rpertoires donnes
par leur racine, en cherchant les fichiers rpndant certaines critres
(nom,droit,type, taille..).
rpertoire la liste des racines des sous-hirarchies explorer
expression suite de primitives exprimant la fois les critres de slection
des fichiers et les actions leur appliquer.
Les Filtres Recherche d'un fichier: find
2013-2014
L'environnement de programmation
Unix/Linux
97
expression
-name <fic> recherche le fichier fic
-user <nom> recherche un fichier appartenat l'utilisateur nom;
-atime <n> recherche un fichier utilis dans les n derniers jours;
-mtime <n> recherche un fichier modifi dans les n derniers jours;
-newer <fic> recherche un fichier modifi plus rcemment que fic;
-type <x> recherche un fichier de type <x> avec :
b pour fichier spcial bloc,
c pour fichier spcial caractre,
Les Filtres Recherche d'un fichier: find
c pour fichier spcial caractre,
d pour fichier rpertoire,
f pour fichier ordinaire,
p pour tube nomm (System III/V);
-perm <octal> recherche un fichier ayant les permissions donnes;
- links <n> recherche un fichier ayant n liens ;
-group <nom> recherche sur un groupe nom;
2013-2014
L'environnement de programmation
Unix/Linux
98
expression
- size <nc|n> recherche sur une taille en blocs ou en caractres;
- exec commande vrai si la commande restitue une valeur de sortie nulle. la
fin de la commande doit tre ponctue par \; et le nom du fichier examin
est reprsent par {};
- print le nom de fichier doit tre imprim;
- inum <n> recherche un fichier dont le i-noeud n;
-\(expression\) a pour valeur boolenne celle de l'expression
parenthse.
Les Filtres Recherche d'un fichier: find
parenthse.
Toutes ces primitives peuvent tre composes avec: !, -o , et \(\).
2013-2014
L'environnement de programmation
Unix/Linux
99
Exemple
E
find /usr/ens \( -name *.p -o -name *.f \) -mtime -30 -exec ls -i {}
\;
2135 /usr/ens/mhs/exam.p
2149 /usr/ens/mhs/scarable.f
2149 /usr/ens/rim/exp.p
2149 /usr/ens/rim/examen.p
find $HOME -newer .datesauv -print
affiche les fichiers de l'arborescence dfinie par le rpertoire
personnel de l'usage modifis aprs le fichier .datesauv
Les Filtres Recherche d'un fichier: find
2013-2014
L'environnement de programmation
Unix/Linux
100
Tri
sort [options] [cl [option]]* [<fichier1> ]*
trie les lignes et crit les rsultats sur la sortie standard (sauf -o).
options
-c (check) vrifie si le fichier est dj tri;
-u (unique) conserve un seul exemplaires des lignes identiques;
-o <fichier> (output) envoie la sortie sur fichier
Les Filtres Tri et fusion
-d (dictionary) ordre lexicographique (lettres, les chiffres, blancs);
-f traduit les majuscules en minuscules;
-n cl numrique (signe ventuellement);
-i les caractres dont le code ASCII 040-0176;
-r tri en ordre invers;
-b ignorer les blancs en dbut de champ;
-t<x> le dlimiteur de champ dans les lignes est le caractre x.
2013-2014
L'environnement de programmation
Unix/Linux
101
Notion de cl
N cl de la forme +debut - fin.
debut premier champ servant faire la cl (numrotation partir de zro)
finn du premier champ qui n'appartient pas la cl.
sort +1 -2 f trie f sur une cl format par le
deuxime champ de chaque ligne
Une cl peut tre prciser des portions de champs.
debut et fin sont de la forme m.n (ventuellement l'une des options b d f i n ou
r) o:
Les Filtres Tri et fusion
r) o:
m nombre de champs sauter depuis le dbut de ligne
n nombre de caractres sauter en dbut de champ .
2013-2014
L'environnement de programmation
Unix/Linux
102
Exemples
$ ls | sort trie les noms de fichiers en ordre
alphanumrique
$ ls -s | sort -nr trie par ordre de taille
dcroissante
$ ls -l | sort +4nr -5n trie par taille dcroissant;
aprs avoir sauter les 3 premiers champs
$ who | sort +4n -5n trie les plus anciennes connexions
$ sort +2.3 -5.0 f trie f sur une cl qui commence au
Les Filtres Tri et fusion
$ sort +2.3 -5.0 f trie f sur une cl qui commence au
troisime champ (4
me
caractre), et qui se termine la
fin du cinquime champ.
Soit f.t un fichier d'tudiants qui la format suivant:
nom, prnom, jj/mm/aa, codeBac, codeDiplme
$ sort -t, +4bf -5bf +0f -1f f.t >diplome.t
tri sur diplme, puis alphabtiquement, sortie sur
diplome.t
$ sort -t, +2.6b -2.8b +2.3b -2.5b +2.0b -2.2b f.t >age.t
tri par ge, la date tant la date de naissance, sortie
sur age.t.
2013-2014
L'environnement de programmation
Unix/Linux
103
4.3.2 Fusion
sort -m [options] [cl [option]]+ [<fichier1> ]+
Les fichiers doivent pralablement tre tris sur les cls de fusion.
Les Filtres Tri et fusion
2013-2014
L'environnement de programmation
Unix/Linux
104
L'diteur de flot sed
sed est un diteur non interactif qui permet le traitement de fichiers texte.
sed [-n] [<requte>][-e <requte>]* [ -f <script>][<fichier>]*
sed recopie le ou les fichier (par dfaut l'entre standard) sur la sortie
standard, en appliquant chaque ligne les requtes qui suivent l'option -e
(un par requte), ou les requtes qui se trouve dans le fichier script, ou la
requte s'il y en a une.
-n affichage sur la sortie des lignes sur lesquelles on applique la
commande p seulement.
Les Filtres L'diteur de flot sed
commande p seulement.
Forme gnrale des requtes de sed
[adresse1 [adresse2]] commande [arguments]
adresse peut tre
n n absolu d'un ligne de texte
$ dernire ligne
/expression/motif figurant dans la ligne adress.
2013-2014
L'environnement de programmation
Unix/Linux
105
Mode de fonctionnement
Les Filtres L'diteur de flot sed
tampon des
tampon
tampon d'dition (1 ligne)
2013-2014
L'environnement de programmation
Unix/Linux
106
fichier diter fichier rsultat
requtes auxiliaire
Les commandes de manipulation de l'espace
de travail a\ <texte> ajoute des lignes la sortie jusqu' la premire ligne ne se
terminant pas par \
b <etiq> saut la commande :etiq
c\ remplace des lignes comme pour a
d dtruit la ligne courante; lit la suivante
i\ insre le texte avant la prochain sortie
l imprime la ligne
q termine
Les Filtres L'diteur de flot sed
q termine
r fic lit fic, et copie son contenu en sortie
s/<anc>/<nouv>/f substitue l'expression rgulire <anc> par la chane de
substitution nouv. f est un indicateur :
g : remplace toutes occurrences traites;
p : le tampon est crit si une substitution est effectue;
w <fic> : crit dans fic si une substitution est effectue
t <etiq> branchement etiq si la dernire substitution a russi
w <fic> crit dans fic;
2013-2014
L'environnement de programmation
Unix/Linux
107
Les commandes de manipulation de l'espace
de travail
y/<ch1>/<ch2>/ toutes les occurrences du tampon des caractres figurant
dans la ch1 sont remplacs par ch2.
= imprime le n de la ligne;
! commande-sed commande est effectue sur les lignes non slectionnes;
{ et } associe un espace d'adressage une liste de commandes;
N la ligne courante est ajoute au tampon;
D dtruit le dbut du tampon jusqu' la premire <LF>;
P affiche le dbut du tampon jusqu' la premire <LF>;
Les Filtres L'diteur de flot sed
h le tampon est transfr dans le tampon auxiliaire;
H le tampon est ajout dans le tampon auxiliaire; le sparateur est la fin de ligne
g le tampon auxiliaire est copi dans le tampon dont le contenu est dtruit
G le tampon auxiliaire est ajout dans le tampon; le sparateur est la fin de ligne
x change entre les contenus du tampon et du tampon auxiliaire.
2013-2014
L'environnement de programmation
Unix/Linux
108
Exemples
$ sed 's/UNIX/UNIX(TM)/g' f1 f2
$ '10,/{# .*}/s/ */ /g' f >>f
$ who | sed 's/ .* / /'
$ sed '/fin/ q'
$ sed '/^***/d'
$ sed 's/$/\n'
$ sed '1,/^$/d
$ sed -n '/^$/,/^fin/p
Les Filtres L'diteur de flot sed
$ sed -n '/^$/,/^fin/p
$ sed -n '/exp/w fichier1
> /exp/!w fichier2
2013-2014
L'environnement de programmation
Unix/Linux
109
Exemples
Remplacer <LF> par le sparateur :, sauf s'il est suivi par !.
# debut de la boucle
: debut
# ajout de la suivante dans le tampon
N
# remplacer la fin de ligne par : s'il n'y a pas de !
s/ \n \([^!]\) / :\1 /
# si la substitution a russi , recommencer
Les Filtres L'diteur de flot sed
# si la substitution a russi , recommencer
t debut
# sinon , afficher la ligne d'adresse complte
P
# et dtruire le ! qui reste dans le tampon
d
2013-2014
L'environnement de programmation
Unix/Linux
110
Outil de transformation de texte: awk
outil non interactif pour traiter des textes, les transformer , les diter , faire des
calculs
manipule les fichiers ligne par ligne et adresse les champs l'intrieur des lignes
chaque ligne est soumise awk (<fprog>, <prog>) ;
awk [-F<car>] {[-f <fprog>| <prog>]} [param] [<fichier>]*
Syntaxe d'un programme slection { actions }
slection expressions, BEGIN, END
$ awk '/<expression rgulire>/ {print}' <fichier> -idem egrep
$ awk ' {print}' <fichier> ... -idem cat
Les Filtres Outil de transformation de texte AWK
$ awk ' {print}' <fichier> ... -idem cat
Traitement des champs
$1, $2, ..., $NF dsignent le premier champ, le second champ, ....
$0 enregistrement courant (ligne).
NF nombre de champs de la ligne courante.
$ who
rim tty2 Sep 29 11:53
slim tty4 Sep 29 12:15
$ who | awk '{print $1, $5} imprime les noms et heurs de connexions
rim 11:53
slim12:15
2013-2014
L'environnement de programmation
Unix/Linux
111
Les variables
Les variables utilisateurs
La dclaration et le type sont implicites (numriques, chanes).
Initialises la chane vide '
Les variables prdfinies
FILENAME nom du fichier courant d'entre
FS sparateur de champs (<espace> par dfaut)
NF nombre de champs dans l'enregistrement courant
NR n de l'enregistrement courant
Les Filtres Outil de transformation de texte AWK
NR n de l'enregistrement courant
OFMT format de sortie des nombres (dfaut %g, voir printf..)
OFS sparateur de champs de sortie(par dfaut, un espace)
ORS sparateur de lignes en sortie (par dfaut, fin de ligne)
RS sparateur de lignes en entre (par dfaut de ligne)
$ awk '{print NR, $0} file affiche le fichier avec le n de ligne
$ awk '{ printf "%4d %s\n", NR, $0 } file idem n de ligne sur 4 caract.
2013-2014
L'environnement de programmation
Unix/Linux
112
Les slections
- combinaison quelconque au moyen des oprateurs: ! || && (et)
- expression rgulire de la forme
<expression> ~ /<expression rgulire>/
<expression> !~ /<expression rgulire>/
<expression> <op> <expression> o <op> est < <= > >= == !=
$2 == "" 2me champ vide
$2 ~ /$/ 2me champ identique la chane vide
$2 !~ /./ 2me champ ne contient aucun caractre
length($2) == 0 2me champ de longueur nulle
Les Filtres Outil de transformation de texte AWK
$ awk -F: '$2 == "" {print}' /etc/passwd les gens sans mot de passe
$ awk 'BEGIN {FS = ":" } idem
> $2 == "" {print}' /etc/passwd
- intervalle de la forme: /motif1/, /motif2/
2013-2014
L'environnement de programmation
Unix/Linux
113
Les oprateurs (priorit )
= += -= *= /= %= oprateurs d'affectation
|| oprateur boolens OU; exp1 || exp2
exp2 n'est pas value que si exp1 est vraie
&& oprateur boolens ET; exp1 && exp2 est vraie si les deux le sont
! ngation
> >= < <= == != ~ !~ oprateurs relationnels ~ et !~ sont des oprateurs de
correspondance.
<espace> oprateur de concatnation de chanes
Les Filtres Outil de transformation de texte AWK
+ - plus, moins;
* / % multiplication, division, reste;
++ -- incrmentation, dcrmentation (prfix ou postfix);
2013-2014
L'environnement de programmation
Unix/Linux
114
Les fonctions
cos(expr) cosinus de expr;
exp(expr) exponentielle de expr;
getline() lit la ligne suivante; 0 si fin de fichier, 1 sinon;
index(s1, s2) position de la chane s1 dans la chane s2;
int(expr) partie entire de expr;
length(s) longueur de la chane s; $0 par dfaut.;
log(expr) logarithme naturel de expr;
sin(expr) sinus de expr;
Les Filtres Outil de transformation de texte AWK
sin(expr) sinus de expr;
split(s, a, c) dcoupe s en a[1],a[2], ..., a[n] suivant le dlimiteur c (ou FS);
sprintf(fmt,...)formate ... en accord avec la spcification fmt;
substr(s, m, n) sous-chane de s; dbut au caractre m, longueur maximale n.
2013-2014
L'environnement de programmation
Unix/Linux
115
Les instructions
apparaissent dans les actions et se terminent soit par un ; <fin de ligne> #
- Instructions d'impression
print [<expression>, <expression> ...]
printf (<format>, [<expression>, <expression> ...])
- Instruction conditionnelle
if (<expression>)
<instruction>
else
<instruction>
Les Filtres Outil de transformation de texte AWK
- Instructions itratives
while (<expression>)
<instruction>
for (<var>; <expr>; <expr>)
<instruction>
for (<var> in <tableau>)
<instruction>
break sortie de la boucle courante;
continue poursuivre l'itration suivante de la boucle;
exit sortie de awk ou passage l'action associ END;
next abondan de l'enregist. courant et passage au suivant;
2013-2014
L'environnement de programmation
Unix/Linux
116
Les tableaux associatifs
Les tableaux sont des variables qui associent des indexes avec des valeurs.
Les indexes peuvent tre soit des nombres, soit des chanes de caractres :
Les Filtres Outil de transformation de texte AWK
# imprime son entre l'envers
awk ' { ligne[NR]=$0 }
END {for (i=NR; i>0; i--) print ligne[i]}
' $*
2013-2014
L'environnement de programmation
Unix/Linux
117
# freqmot : compter les apparitions de mots
awk ' { for (i=1; i<=NF; i++) num[$i]++ }
END {for (mot in num) print mot,num[mot]}
' $*
Un autre exemple: awk
# recherche les mots doubles adjacents dans plusieurs fichiers
awk '
FILENAME != prevfile { # nouveau fichier
NR=1
prevfile=FILENAME
}
NF>0 {
if ($1 == dernmot)
printf "double %s, fichier %s, ligne %s ", $1, FILENAME, NR
Les Filtres Outil de transformation de texte AWK
printf "double %s, fichier %s, ligne %s ", $1, FILENAME, NR
for (i=2; i<=NF; i++)
if ($i == $(i-1))
printf "double %s, fichier %s, ligne %s \n", $i, FILENAME, NR
if (NF >0)
dernmot=$NF
} ' $*
2013-2014
L'environnement de programmation
Unix/Linux
118
.om"iler a/ec G..
Le con!igurateur :AN+
($)oguer avec le ($)ogueur 50U 85(B9
+nvironnement d'ex$cution
PROGRAMMER SOUS
GNU/LINUX
+nvironnement d'ex$cution
5etion de erreur
+crire et utilier de Bi)lioth&/ue
:aher -+LLA:"
0
2013-2014 11= L'environnement de programmation Unix/Linux
Traduction et interprtation des programmes
Programme interprt
Programmer sous GNU/LINUX Compiler avec GCC
Programme Interprt
+diteur
.ompilateur
#rogramme
-ource
#rogramme
o)*et
relogea)le
#rogramme
+x$cuta)le
relogea)le
Programme Compil
Compilation unique
"nterpr$teur
#rogramme
-ource
1sultat
2onnes
+diteur
.hargeur M3.3
2013-2014 120
L'environnement de programmation
Unix/Linux
Bi)lioth&/ue
Bi)lioth&/ue
-ource 1
#rogramme
-ource 1
.ompilateur
-ource 2
#rogramme
-ource 2 -ource 3
#rogramme
-ource 3
.ompilateur .ompilateur
o)*et1
#rogramme
o)*et1 o)*et2
#rogramme
o)*et2
+diteur de
lien
#rogramme
+x$cuta)le
Bi)lioth&/ue
#rogramme
o)*et3
Compilation spare
.hargeur
Mmoire
.entrale
Champs des outils
de production
chane de
production
traditionnelle
Outils de production
Compilateur
Traduit les modules sources crits en langage de haut
niveau (C, Ada, ) en modules objets qui contiennent
du langage machine mais dans lesquels les calculs
dadresses ne sont pas rsolus.
Editeur de liens (linker) :
rassemble les modules traduits sparment par les
Programmer sous GNU/LINUX Compiler avec GCC
rassemble les modules traduits sparment par les
traducteurs, les relie et produit un module chargeable
(ou relogeable - relocatable -).
Chargeur (loader) :
Le rle du chargeur est donc d'aller chercher sur un
disque les fichiers excutables (le programme) et les
donnes pour les implanter en mmoire.
2013-2014 121
L'environnement de programmation
Unix/Linux
Compilateur vs Interprteur
Diffrence entre un compilateur et un interprteur :
4hat time is it 5 .om"ilateur
6uelle heure est7il 5
2013-2014
L'environnement de programmation
Unix/Linux
122
6uelle heure est7il 5
4hat time is it 5 Inter"rteur
Il est 8h093
Compiler avec GCC
Les compilateurs disponibles sur les systmes
Linux font tous partie de la GNU Compiler
Collection, plus communment appele GCC
(http://gcc.gnu.org/.) .
GCC inclut galement des compilateurs C, C++,
Java, Objective-C, Fortran et Chill. Ce chapitre se
concentre plus particulirement sur la
Programmer sous GNU/LINUX Compiler avec GCC
concentre plus particulirement sur la
programmation C et C++.
Supposons que vous ayez un programme
reciprocal avec :
un fichier source C++ (reciprocal.cpp) et ;
un fichier source C (main.c)
Ce programme calcule l'inverse d'un entier.
2013-2014 123
L'environnement de programmation
Unix/Linux
Exemple
Fichier source C main.c
#include <stdio.h>
#include <stdlib.h>
#include "reciprocal.hpp"
int main (int argc, char **argv) {
int i;
i = atoi (argv[1]);
printf ("L'inverse de %d est %g\n", i, reciprocal (i));
return 0;
}
Programmer sous GNU/LINUX Compiler avec GCC
Fichier source C++ reciprocal.cpp
#include <cassert>
#include "reciprocal.hpp" #include "reciprocal.hpp"
double reciprocal (int i) {
assert (i != 0); // i doit tre diffrent de zro
return 1.0/i;
}
Fichier d'entte reciprocal.hpp
#ifdef %%__%%cplusplus
extern "C" {
#endif
extern double reciprocal (int i);
#ifdef %%__%%cplusplus
}
#endif
2013-2014 124
L'environnement de programmation
Unix/Linux
Compiler un Fichier Source Isol
% gcc -c main.c
Le fichier objet rsultant est appel main.o.
Le compilateur C++ s'appelle g++. (similaire gcc);
% g++ -c reciprocal.cpp
L'option -c indique g++ de ne compiler le fichier que sous
forme d'un fichier objet; sans cela, g++ tenterait de lier le
programme afin de produire un excutable.
Programmer sous GNU/LINUX Compiler avec GCC
L'option -I est utilise pour indiquer GCC o rechercher les
fichiers d'entte.
% g++ -c -I ../include reciprocal.cpp
% g++ -c -D NDEBUG reciprocal.cpp
dsactivez la vrification en dfinissant la macro NDEBUG.
Loption O optimise le code afin qu'il s'excute aussi
rapidement que possible
% g++ -c -O2 reciprocal.cpp
2013-2014 125
L'environnement de programmation
Unix/Linux
Lier les Fichiers Objet
Maintenant que vous avez compil main.c et reciprocal.cpp, vous
devez les lier.
% g++ -o reciprocal main.o reciprocal.o
Vous pouvez maintenant lancer reciprocal comme ceci:
% ./reciprocal 7
Ajout dune bibliothque (-l)
% g++ -o reciprocal main.o reciprocal.o -lpam
inclure libpam.a lors de l'dition de liens
Si vous voulez que l'diteur de liens recherche en plus dans
Programmer sous GNU/LINUX Compiler avec GCC
Si vous voulez que l'diteur de liens recherche en plus dans
d'autres rpertoires, vous devez utiliser l'option -L,
% g++ -o reciprocal main.o reciprocal.o -
L/usr/local/lib/pam -lpam
indiquer l'diteur de liens de rechercher les
bibliothques dans le rpertoire
/usr/local/lib/pam
% gcc -o app app.o -L. -ltest
indiquer l'diteur de liens de rechercher la
bibliothque test dans le rpertoire courant
2013-2014 126
L'environnement de programmation
Unix/Linux
.ompiler avec 5..
Le conigurateur MA:E
($)oguer avec le ($)ogueur 50U 85(B9
(ocumentation
+nvironnement d'ex$cution
PROGRAMMER SOUS
GNU/LINUX
+nvironnement d'ex$cution
5etion de erreur
+crire et utilier de Bi)lioth&/ue
:aher -+LLA:"
0
2013-2014 12E L'environnement de programmation Unix/Linux
Automatiser le Processus avec GNU
Make
Vous pouvez fournir toutes ces informations make en les plaant dans
un fichier nomm Makefile.
reciprocal: main.o reciprocal.o
g++ $(CFLAGS) -o reciprocal main.o reciprocal.o
main.o: main.c reciprocal.hpp
gcc $(CFLAGS) -c main.c
reciprocal.o: reciprocal.cpp reciprocal.hpp
g++ $(CFLAGS) -c reciprocal.cpp
clean:
rm -f *.o reciprocal
% make
Programmer sous GNU/LINUX GNU Make
% make
gcc -c main.c
g++ -c reciprocal.cpp
g++ -o reciprocal main.o reciprocal.o
recompiler avec les optimisations actives, vous procderiez de la faon
suivante:
% make clean
rm -f *.o reciprocal
% make CFLAGS=-O2
gcc -O2 -c main.c
g++ -O2 -c reciprocal.cpp
g++ -O2 -o reciprocal main.o reciprocal.o
Notez que le drapeau -O2 a t insr la place de $(CFLAGS) dans les rgles.
2013-2014 128
L'environnement de programmation
Unix/Linux
Le configurateur MAKE
lit une spcification de dpendances ou
mode d'emploi de fabrication, et l'interprte
pour crer une nouvelle version complte.
Il vrifie les dates de dernire modification,
pour raliser le minimum de compilation.
Exemple:
Programmer sous GNU/LINUX Le configurateur MAKE
Exemple:
$ calculer <entree >sortie
Le mode d'emploi dont a besoin make pour
fabriquer sortie (makefile) :
sortie : calculer entree
calculer <entree >sortie
2013-2014 129
L'environnement de programmation
Unix/Linux
Mode de fonctionnement: Makefile
make examine si les dpendances de l'entre sont jour; sinon, fait
excuter par des processus UNIX les commandes de fabrication en les soumettant
une par une l'interprteur shell.
Le mode d'emploi est constitu partir de six modles de lignes:
Lignes de commentairesdbutent par un # et se termine <NL>
Dfinitions d'entre nomment les entres et dfinissent les dpendances:
Cible : liste de dpendances
Exemple:
prog: def.c sp.o prog.c
Programmer sous GNU/LINUX Le configurateur MAKE
prog: def.c sp.o prog.c
Rgles de fabrication forment la recette; suivent un dfinition d'entre:
<tab><commande>
Exemple: cc -o prog prog.o def.o sp.o
Les entres gnriques
.s [ .t ]+ :
.s.t. mode d'emploi gnral appliquer pour fabriquer un fichier de suffixe .t quand on a un
fichier de suffixe .s
Les lignes d'inclusion include <fichier>
Dfinitions de macros une macro est une variable de make
<nom macro> = <texte dfinissant la macro>
2013-2014 130
L'environnement de programmation
Unix/Linux
L'appel de make
make [-f makefile] [options] [macro=valeur ] [cible]
-i Ignorer les erreurs retournes par les
commandes excutes;
-s Ne pas imprimer les commandes avant de les
excuter;
-r Ne pas utiliser les rgles implicites;
Programmer sous GNU/LINUX Le configurateur MAKE
-r Ne pas utiliser les rgles implicites;
-t Maj des dates des fichiers cibles sans excuter
les comandes;
-o Retourner un code prcisant l'tat cible
-f fic fic est le nom du fichier description
utiliser (makefile).
2013-2014 131
L'environnement de programmation
Unix/Linux
Utilisation des macros
La substitution de macro prcdant son nom entre () par $.
MISEAUPOINT = # rien: pas de mise au point
prog: def.p sp.o prog.o
pc -o prog prog.o def.o sp.o
def.o: def.p
pc -c $(MISEAUPOINT) def.p
sp.o: sp.p def.o
Programmer sous GNU/LINUX Le configurateur MAKE
pc -c $(MISEAUPOINT) sp.p
prog.o: prog.p def.o
pc -c $(MISEAUPOINT) prog.p
On obtient un module prog pour la mise au point de 2 faons:
MISEAUPOINT = -g # dans le makefile
$ make MISEAUPOINT = -g # dans lappel de make
2013-2014 132
L'environnement de programmation
Unix/Linux
Macros prdfinies
$@ nom complet du fichier cible ( faire)
$* nom du fichier cible sans prfixe;
$? liste des dpendants qui sont plus rcents que le fichier cible courant;
$< nom du fichier source associ une rgle implicite (suffixe du fichier cible);
.c.o :
gcc c $*.c
.c.o :
gcc c $<
$$@ n'a de sens que sur la ligne de dfinition de dpendances. Il se rfre l'objet
Programmer sous GNU/LINUX Le configurateur MAKE
$$@ n'a de sens que sur la ligne de dfinition de dpendances. Il se rfre l'objet
courant ($@) dfini dans l'entre.
Exemple de makefile
PASPROG = demo ex1 essai ex2
# obtention des excutables PASCAL
$(PASPROG) : $$@.p
pc -c $@ $*.p
# entre pour dtruire les xecutables
vider del :
rm -f $(PASPROG)
# entre pour recommencer tout: dtruire et refaire les excutables
re : vider $(PASPROG)
2013-2014 133
L'environnement de programmation
Unix/Linux
.ompiler avec 5..
Le con!igurateur :AN+
2;oguer a/ec le 2;ogueur G#U 'G2()
(ocumentation
+nvironnement d'ex$cution
PROGRAMMER SOUS
GNU/LINUX
+nvironnement d'ex$cution
5etion de erreur
+crire et utilier de Bi)lioth&/ue
:aher -+LLA:"
0
2013-2014 134 L'environnement de programmation Unix/Linux
Introduction
Le dbogueur est le programme que vous
utilisez pour trouver pourquoi votre programme
ne se comporte pas comme vous pensez qu'il le
devrait.
Compiler avec les Informations de
Dbogage
Programmer sous GNU/LINUX
Dboguer avec le Dbogueur GNU (GDB)
compiler en activant les informations de
dbogage, utiliser l'option -g
% make CFLAGS=-g
gcc -g -c main.c
g++ -g -c reciprocal.cpp
g++ -g -o reciprocal main.o reciprocal.o
2013-2014 135
L'environnement de programmation
Unix/Linux
Lancer GDB
% gdb reciprocal
(gdb)
lancer votre programme au sein du dbogueur.
(gdb) run
Starting program: reciprocal
Program received signal SIGSEGV, Segmentation fault.
%%__%%strtol_internal (nptr=0x0, endptr=0x0, base=10, group=0)
at strtol.c:287
Programmer sous GNU/LINUX
Dboguer avec le Dbogueur GNU (GDB)
287 strtol.c: No such file or directory.
(gdb)
Vous pouvez observer la pile en utilisant la commande where:
(gdb) where
#0 %%__%%strtol_internal (nptr=0x0, endptr=0x0, base=10, group=0)
at strtol.c:287
#1 0x40096fb6 in atoi (nptr=0x0) at ../stdlib/stdlib.h:251
#2 0x804863e in main (argc=1, argv=0xbffff5e4) at main.c:8
main a appel la fonction atoi avec un pointeur NULL ce qui est la source de l'erreur.
2013-2014 136
L'environnement de programmation
Unix/Linux
Les commandes de GDB
remonter de deux niveaux dans la pile jusqu' atteindre main
(gdb) up 2
#2 0x804863e in main (argc=1, argv=0xbffff5e4) at main.c:8
8 i = atoi (argv[1]);
GDB retrouver le fichier source main.c et il affiche la ligne contenant l'appel
Vous pouvez inspecter la valeurs des variables en utilisant la commande
print:
(gdb) print argv[1]
$2 = 0x0
Programmer sous GNU/LINUX
Dboguer avec le Dbogueur GNU (GDB)
$2 = 0x0
Cela confirme que le problme vient d'un pointeur NULL pass atoi.
Vous pouvez placer un point d'arrt en utilisant la commande break:
(gdb) break main
Breakpoint 1 at 0x804862e: file main.c, line 8.
relancer le programme avec un argument, comme ceci:
(gdb) run 7
Starting program: reciprocal 7
Breakpoint 1, main (argc=2, argv=0xbffff5e4) at main.c:8
8 i = atoi (argv[1])
Vous remarquez que le dbogueur s'est arrt au niveau du point d'arrt.
2013-2014 137
L'environnement de programmation
Unix/Linux
Les commandes de GDB
Vous pouvez passer l'instruction se trouvant aprs
l'appel atoi en utilisant la commande next:
(gdb) next
9 printf ("L'inverse de %d est %g\n",
i, reciprocal (i));
Si vous voulez voir ce qui se passe l'intrieur de la
Programmer sous GNU/LINUX
Dboguer avec le Dbogueur GNU (GDB)
Si vous voulez voir ce qui se passe l'intrieur de la
fonction reciprocal, utilisez la commande step,
(gdb) step
reciprocal (i=7) at reciprocal.cpp:6
6 assert (i != 0);
Vous tes maintenant au sein de la fonction reciprocal.
2013-2014 138
L'environnement de programmation
Unix/Linux
.ompiler avec 5..
Le con!igurateur :AN+
($)oguer avec le ($)ogueur 50U 85(B9
2ocumentation
+nvironnement d'ex$cution
PROGRAMMER SOUS
GNU/LINUX
+nvironnement d'ex$cution
5etion de erreur
+crire et utilier de Bi)lioth&/ue
:aher -+LLA:"
0
2013-2014 13= L'environnement de programmation Unix/Linux
Pages de Manuel
Les pages de manuel sont divises en sections numrotes; pour
les programmeurs, les plus importantes sont celles-ci:
(1) Commandes utilisateur
(2) Appels systme
(3) Fonctions de la bibliothque standard
(8) Commandes systme/d'administration
% man sleep
la page de manuel de la fonction sleep de la bibliothque standard,
Programmer sous GNU/LINUX Documentation
la page de manuel de la fonction sleep de la bibliothque standard,
utilisez cette commande:
% man 3 sleep
Chaque page de manuel comprend un rsum sur une ligne de la
commande ou fonction.
whatis liste toutes les pages de manuel (de toutes les sections) pour
une commande ou une fonction
recherche par mot-cl sur les rsums
man -k mot-cl.
2013-2014 140
L'environnement de programmation
Unix/Linux
Info
Info contient des informations plus dtailles pour
beaucoup de composants fondamentaux du systme
GNU/Linux et quelques autres programmes.
Les pages Info sont des documents hypertextes,
similaires aux pages Web.
Pour lancer le navigateur texte Info, tapez simplement
info l'invite de commande. Parmi les documents Info
Programmer sous GNU/LINUX Documentation
info l'invite de commande. Parmi les documents Info
les plus utiles, on trouve:
gcc Le compilateur gcc
libc La bibliothque C GNU, avec beaucoup d'appels
systme
gdb Le dbogueur GNU
emacs L'diteur de texte Emacs
info Le systme Info lui-mme
2013-2014 141
L'environnement de programmation
Unix/Linux
.ompiler avec 5..
Le con!igurateur :AN+
($)oguer avec le ($)ogueur 50U 85(B9
(ocumentation
En/ironnement de<cution
PROGRAMMER SOUS
GNU/LINUX
En/ironnement de<cution
5etion de erreur
+crire et utilier de Bi)lioth&/ue
:aher -+LLA:"
0
2013-2014 142 L'environnement de programmation Unix/Linux
La Liste d'Arguments
Interaction Avec l'Environnement
d'Excution
En lancant un programme, vous pouvez passer plus
d'informations en ajoutant un ou plusieurs mots aprs le nom
du programme
Ce sont des arguments de ligne de commande ou liste
d'arguments du programme.
% ls -s /
le programme ls reoit de trois lments :
le nom du programme lui-mme, (ls)
Programmer sous GNU/LINUX Environnement dexcution
le nom du programme lui-mme, (ls)
Les second et troisime lment sont les deux arguments de
ligne de commande, -s et /.
La fonction main de votre programme peut accder la liste
d'arguments via ses paramtres argc et argv
argc, indique le nombre d'lments dans la liste.
argv, est un tableau de pointeurs sur des caractres (taille est
argc,) qui pointent vers les lments de la liste d'arguments, qui
sont des chanes termines par zro.
2013-2014 143
L'environnement de programmation
Unix/Linux
Utiliser argc et argv
arglist.c
Programmer sous GNU/LINUX Environnement dexcution
#include <stdio.h>
int main (int argc, char* argv[])
{
printf ("Le nom de ce programme est '%s'.\n", argv[0]);
printf ("Ce programme a t invoqu avec %d arguments.\n",
argc - 1);
/* A-t-on spcifi des arguments sur la ligne de commande ? */ /* A-t-on spcifi des arguments sur la ligne de commande ? */
if (argc > 1) {
/* Oui, les afficher. */
int i;
printf ("Les arguments sont :\n");
for (i = 1; i < argc; ++i)
printf (" %s\n", argv[i]);
}
return 0;
}
2013-2014 144
L'environnement de programmation
Unix/Linux
la Ligne de Commande GNU/Linux
Les options modifient le comportement du
programme, alors que les autres arguments
fournissent des entres
Les options peuvent prendre deux formes:
Les options courtes sont formes d'un seul tiret et
d'un caractre isol (-h)
Programmer sous GNU/LINUX Environnement dexcution
d'un caractre isol (-h)
Les options longues sont formes de deux tirets
suivis d'un nom compos de lettres majuscules,
minuscules et de tirets (-- help, --output foo).
il est conseill d'utiliser les noms prconiss
dans les standards de codage.
% info "(standards)User Interfaces"
2013-2014 145
L'environnement de programmation
Unix/Linux
Utiliser getopt_long
Programmer sous GNU/LINUX Environnement dexcution
Forme courte Forme longue Fonction
-h --help Affiche l'aide mmoire et quitte
-o nom fichier --output nom fichier Indique le nom du fichier de sortie
-v --verbose Affiche des messages dtaills
L'anal%e de option de la ligne de commande et une corv$e.
La !onction2 etopt/lon2 interpr&te @ la !oi le option courte et longue.
Pour utiliser getopt_long, vous devez fournir deux structures de donnes.
La premire est une chane contenant les options courtes valables, chacune sur une lettre.
Une option qui requiert un argument est suivie par deux-points.
ho:v indique que les options valides sont -h, -o et -v, la seconde devant tre suivie d'un
argument.
Pour indiquer les options longues disponibles, vous devez construire un tableau d'lments
struct option. Chaque lment correspond une option longue et dispose de quatre
champs :
le nom de l'option longue
1 si l'option prend un argument, 0 sinon;
NULL
un caractre qui indique l'option courte synonyme de l'option longue.
Tous les champs du dernier lment doivent tre zro.
2013-2014 146
L'environnement de programmation
Unix/Linux
Exemple
const char* const short_options =
"ho:v";
const struct option long_options[] = {
{ "help", 0, NULL, 'h' },
{ "output", 1, NULL, 'o' },
{ "verbose", 0, NULL, 'v' },
Programmer sous GNU/LINUX Environnement dexcution
{ "verbose", 0, NULL, 'v' },
{ NULL, 0, NULL, 0 }
};
.
next_option = getopt_long (argc, argv,
short_options,
long_options, NULL);
2013-2014 147
L'environnement de programmation
Unix/Linux
Interaction avec lenvironnement
Lenvironnement est une collection de paires
variable/valeur (sous forme de chaine de caractres)
dans une variable environ
char * getenv(const char *name)
obtenir la valeur de la variable denvironnement name
Programmer sous GNU/LINUX Environnement dexcution
int setenv(const char *name, const char value, int
overwrite)
positionner une variable
int putenv(char *string)
ajouter une variable string est de la forme name=value*/
int unsetenv(const char *name);
supprime une variable
2013-2014 148
L'environnement de programmation
Unix/Linux
Afficher l'Environnement d'Excution
print-env.c
Programmer sous GNU/LINUX Environnement dexcution
#include <stdio.h>
/* La variable ENVIRON contient l'environnement. */
extern char** environ;
int main ()
{
char **var;
for (var = environ; *var != NULL; ++var) for (var = environ; *var != NULL; ++var)
printf ("%s\n", *var);
return 0;
}
Ne modifiez pas environ vous-mme; utilisez plutt les
fonctions setenv et getenv.
2013-2014 149
L'environnement de programmation
Unix/Linux
.ompiler avec 5..
Le con!igurateur :AN+
($)oguer avec le ($)ogueur 50U 85(B9
(ocumentation
+nvironnement d'ex$cution
PROGRAMMER SOUS
GNU/LINUX
+nvironnement d'ex$cution
Gestion des erreurs
+crire et utilier de Bi)lioth&/ue
:aher -+LLA:"
0
2013-2014 1;0 L'environnement de programmation Unix/Linux
La gestion des erreurs : perror()
Un appel systme retourne une valeur diffrente de 0 si une erreur survient
errno, est une variable systme qui contient le code numrique de lerreur du
dernier appel systme, un appel systme qui choue modifie la valeur de errno
La liste globale d'erreurs sys_errlist[] indexe par errno peut tre utilise pour obtenir
le message d'erreur (errno <sys_nerr ).
perror(char *str) est une fonction standard C qui dcrit les erreurs des appels
systmes ( affiche str suivie par : et une description de la dernire erreur rencontre,
sinon Error 0 )
Programmer sous GNU/LINUX Gestion des erreurs
char *strerror (int errnum) Obtenir le libell d'un code d'erreur errnum
/usr/include/sys/errno.h contient une liste des codes derreurs prdfinies
Exemples:
#define EPERM 1 /* Not owner */
#define ENOENT 2 /* No such file or directory */
#define ESRCH 3 /* No such process */
#define EINSR 4 /* Interrupted System call */
#define EIO 5 /* I/O error */
151 2013-2014
L'environnement de programmation
Unix/Linux
La gestion des erreurs : perror()
#include <stdio.h>
#include <sys/file.h>
#include <errno.h>
main()
{
int fd;
/* Open a nonexistent file to cause an error */
fd = open(nonexist.txt, O_RDONLY);
if ( fd==-1 ) {/* fd == -1 , an error occurred */
printf( errno = %d \n, errno );
Programmer sous GNU/LINUX Gestion des erreurs
printf( errno = %d \n, errno );
perror(main);
}
fd=open( /, O_WRONLY ); /* Force a different error */
if ( fd== -1 ) {
printf(errno=%d\n, errno);
perror(main);
} /* Execute a successful system call */
fd = open(nonexist.txt, O_RDONLY | O_CREAE, 0644 );
printf(errno=%d\n, errno); /* Display after successful call */
perror(main);
errno=0; /* Manually reset error variable */
perror(main);
}
152 2013-2014
L'environnement de programmation
Unix/Linux
La gestion des erreurs : perror()
$ showErrno
errno=2
main: No such file or directory
errno=21
main: Is a directory
errno=21
main: Is a directory
main: Error 0
Programmer sous GNU/LINUX Gestion des erreurs
153 2013-2014
L'environnement de programmation
Unix/Linux
assert
dtecter des conditions inattendues
assert(condition)
Le programme s'arrte si l'expression est
fausse, aprs avoir affich un message
d'erreur (nom du fichier, le numro de ligne et
le texte de l'expression)
Programmer sous GNU/LINUX Gestion des erreurs
for (i = 0; i < 100; ++i)
assert (do_something () == 0);
Ou mieux,
for (i = 0; i < 100; ++i) {
int status = do_something ();
assert (status == 0);
}
2013-2014 154
L'environnement de programmation
Unix/Linux
.ompiler avec 5..
Le con!igurateur :AN+
($)oguer avec le ($)ogueur 50U 85(B9
(ocumentation
+nvironnement d'ex$cution
PROGRAMMER SOUS
GNU/LINUX
+nvironnement d'ex$cution
5etion de erreur
Ecrire et utiliser des (i;lioth!ues
:aher -+LLA:"
0
2013-2014 1;; L'environnement de programmation Unix/Linux
Les bibliothques statiques
Une archive (ou bibliothque statique) est une collection de fichiers objets
stocke dans un seul fichier objet (fichier lib sous Window)
Lorsque vous fournissez une archive lditeur de liens, il recherche au
sein de cette archive les fichiers dont il a besoin, les extrait et les lie avec
votre programme comme si vous aviez fourni ces fichiers objets
directement.
Vous pouvez crer une archive en utilisant la commande ar.
Programmer sous GNU/LINUX
Vous pouvez crer une archive en utilisant la commande ar.
Les fichiers archives utilisent lextension .a
$ ar cr libtest.a test1.o test2.o
combiner test1.o et test2.o dans une seule archive libtest.a
une bliothque un emplacement visible :
/usr/local/lib si la librairie est susceptible dtre utilise par plusieurs utilisateurs ;
~/lib si la librairie est susceptible dtre utilise par un seul utilisateur.
La variable LD_LIBRARY_PATH pour les bibliothques dynamiques
2013-2014 156
L'environnement de programmation
Unix/Linux
Les bibliothques dynamiques
Diffrences avec les archives, ldition de
liens se fait pendant lexcution
la rduction de la taille d'un excutable,
la mise jour de la bibliothque sans
refaire ldition de liens
Programmer sous GNU/LINUX
refaire ldition de liens
Les bibliothque partages (shared) ne
sont charges quune seule fois en
mmoire
2013-2014 157
L'environnement de programmation
Unix/Linux
Les bibliothques dynamiques
Pour crer une bibliothque partage, compiler les objets
avec l'option -fPIC
% gcc -c -fPIC test1.c
L'option -fPIC indique au compilateur que vous allez utiliser
test1.o en tant qu'lment d'un objet partag.
Puis, vous combinez les fichiers objets au sein d'une
bibliothque partage, comme ceci:
% gcc -shared -fPIC -o libtest.so test1.o test2.o
Programmer sous GNU/LINUX
% gcc -shared -fPIC -o libtest.so test1.o test2.o
L'option -shared indique l'diteur de liens de crer une
bibliothque partage au lieu d'un excutable ordinaire.
Les bibliothques partages utilisent l'extension .so, (shared
object),, le nom commence toujours par lib
Lier un programme une bibliothque partage (idem
statique)
% gcc -o app app.o -L. -ltest
2013-2014 158
L'environnement de programmation
Unix/Linux
Introduction
7rganiation logi/ue
7rganiation ph%i/ue
-tructuration du di/ue dur
H$aliation de !onction d'acc& $l$mentaire
LES SYSTMES DE GESTION
DE FICHIERS
H$aliation de !onction d'acc& $l$mentaire
-$curit$ et #rotection
+xemple? Le -5, d'U0"1
:aher -+LLA:"
=
O
2013-2014 1;= L'environnement de programmation Unix/Linux
Fonctions dun SGF
Fichier
un objet qui contient un ensemble dinformation pour
conservation et utilisation dans un systme
informatique
possde un nom qui permet de le dsigner
Fonctions daccs principales: lire, crire,
ventuellement excuter
Systmes de gestion de fichiers Introduction
SGF
Conservation des fichiers en mmoire secondaire
Implantation des fonctions daccs aux fichiers
(ouvrir, fermer, lire, crire, )
Assure scurit et protection: intgrit des
informations et respect des droits daccs
Gre laccs aux supports physiques
160
L'environnement de programmation
Unix/Linux
2013-2014
Organisation dun SGF
Systmes de gestion de fichiers Introduction
Organisation logique
Vue par lutilisateur
Dtermin par condition de
Commodit
gnralit
Organisation physique
Lie aux supports physiques
Dtermin par considration
de
conomie de places
SGF
Un SGF ralise la correspondance entre lorganisation logique et
lorganisation physique
Un SGF est organis de faon hirarchique : toute action
au niveau logique et interprt comme un ensemble
dactions au niveau physique
161
L'environnement de programmation
Unix/Linux
Efficacit daccs
rpertoire={ descripteurs}
TABLES DIMPLANATION Physiques
Nom externe
Nom interne
2013-2014
Programme :
Organisation logique : suite denregistrements
Pour les lves
Lire (nom_lve);
Lire (note_examen);
crire (table);
fait
Sauvegarder
(mon_fichier)
Programme mon_fichier
instructions
Toto Dupont Csar
12 20 09
Cloptre
15
Exemple
Systmes de gestion de fichiers Introduction
(mon_fichier)
toto 12
dupont 20
cesar 09
cloptre 15
Programme
donne
100100010000
Organisation physique
Structure selon
Allocation
fichier_notes_nfa004
NFA003 4 162
L'environnement de programmation
Unix/Linux
2013-2014
Schma de lorganisation dun SGF
Systmes de gestion de fichiers Introduction
H$aliation de !onction d'acc&
"nter!ace de
l'utiliateur
,onction d'acc& logi/ue
0om externe
et locaux
0om interne
Liaion de nom
"nterpr$tation
nom externe
"nterpr$tation
nom locaux
163
L'environnement de programmation
Unix/Linux
H$aliation de !onction d'acc&
logi/ue
"nter!ace interne au
-5,
0om interne
H$aliation de !onction d'acc&
#h%i/ue
H$aliation +/-
ph%i/ue
Allocation de
m$moire
econdaire
Adree
logi/ue
Adree
ph%i/ue
2013-2014
Schma de lorganisation dun SGF
La mise en correspondance entre organisation
logique et physique peut comporter une
organisation intermdiaire
Systmes de gestion de fichiers Introduction
adree
logi/ue
adree
ph%i/ue
($ignation
d'article
,onction
d'acc&
Cette tape intermdiaire pour des raisons defficacit peut tre
164
L'environnement de programmation
Unix/Linux
Cette tape intermdiaire pour des raisons defficacit peut tre
court-circuite (unix,windows, )
deux cas de figure :
Le S.E. connat la structure logique des fichiers (Macintosh, IBM,)
+ les possibilits sont plus importantes,
- le S.E. est plus complexe.
Le S.E. considre les fichiers comme des flots doctets (MS-DOS,
Unix,)
+ le systme est plus simple,
pas dassurance sur la nature des fichiers
2013-2014
"ntroduction
Organisation logi!ue
7rganiation ph%i/ue
-tructuration du di/ue dur
H$aliation de !onction d'acc& $l$mentaire
LES SYSTMES DE GESTION
DE FICHIERS
H$aliation de !onction d'acc& $l$mentaire
-$curit$ et #rotection
+xemple? Le -5, d'U0"1
:aher -+LLA:"
=
O
2013-2014 1D; L'environnement de programmation Unix/Linux
Organisation logique dun fichier
vue de lutilisateur de lensemble des donnes mmorises sur le
support de masse
Un type de donne (programmation)
Un ensemble de donnes groupes sous forme denregistrements
(articles)
fichier = { enregistremements }
Les fonctions daccs sont spcifiques de lorganisation logique
A chaque enregistrement correspond une adresse logique
Systmes de gestion de fichiers Organisation logique dun fichier
A chaque enregistrement correspond une adresse logique
enregistrement = {champs ou attributs}
Champs possde un nom et un type
LOrganisation logique dpent des contraintes auxquelles doivent
satisfaire les enregistrements
Ordre sur les articles
Restriction sur les valeurs des champs
Relations entre les attributs des enregistrements
166
L'environnement de programmation
Unix/Linux
2013-2014
En programmation, un fichier logique est un type de
donne sur lequel peuvent tre appliques des
oprations spcifiques.
Program toto;
Notion de fichier logique
Systmes de gestion de fichiers Organisation logique dun fichier
fichier : file of
crer (fichier, mode)
ouvrir (fichier, mode)
fermer (fichier)
detruire (fichier)
Reprsentation du fichier interne au programme
Liaison via le SGF avec le fichier physique
Liaison mon_fichier avec
fichier_notes_nfa004
Rupture de la Liaison avec le fichier physique
6 167
L'environnement de programmation
Unix/Linux
2013-2014
Un fichier logique est un ensemble d'enregistrements,
dsign par un nom et accessible via des fonctions
d'accs.
Type lement = record
Fichier logique :
Attributs du fichier
nom-lve : char;
note : entier;
Nom logique (mon_fichier)
Notion de fichier logique
Systmes de gestion de fichiers Organisation logique dun fichier
note : entier;
end;
enregistrement
Toto Dupont Csar Cloptre
12 20 09 15
mon_fichier : file of element
fonctions d'accs
lire (enregistrement)
crire (enregistrement)
insrer (enregistrement)
supprimer (enregistrement)
Organisation dfinissant sa structure
logique : le mode daccs
7 168
L'environnement de programmation
Unix/Linux
2013-2014
Les enregistrements du fichier ne peuvent tre accds
que les uns la suite des autres.
-Ouverture du fichier : positionne sur le premier enregistrement
-Opration de lecture : dlivre l'enregistrement courant et se
positionne sur le suivant
- Opration dajout : obligatoirement en fin de fichier
Fichier mode d'accs squentiel
Systmes de gestion de fichiers Organisation logique dun fichier
Toto Dupont Csar
12 20 09
Lecture 1 Lecture 2 Lecture 3
Cloptre
15
Ajout
Fin de fichier
Accs l'enregistrement 3
il faut lire d'abord
l'enregistrement 1,
puis l'enregistrement 2
8 169
L'environnement de programmation
Unix/Linux
2013-2014
program acces_fichiers;
enrg_note = record nom_eleve : string;
note : integer;
end;
t_fichier_notes = file of enrg_note;
var mon_fichier : t_fichier_notes;
Begin
assign(mon_fichier,fichier_notes_nfa004');
reset ( mon_fichier ); (* ouvrir le fichier *)
Enregistrement
Dclaration fichier logique
Mise en correspondance
Exemple : les fichiers dans le langage pascal
Systmes de gestion de fichiers Organisation logique dun fichier
reset ( mon_fichier ); (* ouvrir le fichier *)
while not eof ( nom_fichier ) do
(* parcourir les lments du fichier accs squentiel*)
begin
get ( mon fichier );
end;
(* accs relatif : aller llment 6 *)
seek (mon_fichier,6) ;
get (mon_fichier) ;
(* fermeture automatique en fin de programme *)
End.
10 170
L'environnement de programmation
Unix/Linux
2013-2014
Main() {
struct note{ char nom_eleve[30];
float note;
} ;
Struct note enrg_note;
FILE *mon_fichier;
mon_fichier=fopen("fichier_notes_nfa004" , "r");
while (fread(&enreg_note,sizeof(struct note),1,
mon_fichier) do
Enregistrement
Dclaration fichier logique
Mise en correspondance
Exemple : les fichiers dans le langage C
Systmes de gestion de fichiers Organisation logique dun fichier
mon_fichier) do
(* parcourir les lments du fichier accs squentiel*/
{
....
}
....
/* accs relatif : aller llment 6 */
fseek(mon_fichier, sizeof(struct note)*6L,0);
....
/* fermeture automatique en fin de programme *)/
}
10 171
L'environnement de programmation
Unix/Linux
2013-2014
Fichier mode d'accs direct
Les fonctions daccs sexpriment en
fonction des attributs
Les attributs correspondent aux valeurs des
diffrents champs
Une cl est tout attribut dun enregistrement
dont la valeur peut servir accder
Systmes de gestion de fichiers Organisation logique dun fichier
9
dont la valeur peut servir accder
lenregistrement
2 organisations possibles:
Cl unique
Cls multiples
172
L'environnement de programmation
Unix/Linux
2013-2014
Accs direct: cl unique
Chaque article comporte une seule cl qui lidentifie
cle_trouve=recherche(cl, al) dlivre ladresse
logique al correspondant cl si cle_trouve est
vrai
La fonction recherche sert raliser un jeu de
fonctions daccs direct:
lire (cl, info)
Systmes de gestion de fichiers Organisation logique dun fichier
9
lire (cl, info)
ajouter(cl, info)
supprimer(cl, info)
modifier(cl, info)
2 classes de mthodes :
Adressage dispers (hash code)
Fichiers indexs
173
L'environnement de programmation
Unix/Linux
2013-2014
Accs direct:Adressage dispers
On se donne f une fonction de
dispersion qui est dfinie :
0 f(c) nb denregistrements
si c1 = c2, alors f (c1) = f (c2),
On appel collision, lexistence de deux cls
Systmes de gestion de fichiers Organisation logique dun fichier
9
On appel collision, lexistence de deux cls
c1 et c2 telles que c1 c2 et f (c1) = f (c2).
174
L'environnement de programmation
Unix/Linux
2013-2014
Incon/nients ?
- il et di!!icile de choiir 0,
- ur certain %t&me perte de place2
- r$organiation p$riodi/ue du !ichier.
Adressage direct par indexation
Ensemble de cls suppos ordonn
La relation cl-adresse logique est
matrialise par un index
Systmes de gestion de fichiers Organisation logique dun fichier
9 175
L'environnement de programmation
Unix/Linux
2013-2014
La recherche dun enregistrement ncessite en
moyenne
- n/2 lectures si lindex nest pas tri,
- log2 n lectures si lindex est tri.
Adressage direct : cls multitples
Plusieurs cls pour dsigner un article
Une valeur de cl peut correspondre plusieurs
articles
Une cl primaire est une cl dont la valeur
dtermine de faon unique un enregistrement
Technique de base est lorganisation multi-liste
Systmes de gestion de fichiers Organisation logique dun fichier
9
Technique de base est lorganisation multi-liste
On utilise un index par cl
176
L'environnement de programmation
Unix/Linux
2013-2014
Adressage direct : cls multitples
A13; 200
B43D ;00
H211 200
H322 100
100E E;0
Systmes de gestion de fichiers Organisation logique dun fichier
O O.
PA.MU+- ;00
100
200
Pointeur auteurs
Pointeur diteurs
Adresses
logiques
Inde< des rrennces
Inde< des auteurs
9 177
L'environnement de programmation
Unix/Linux
2013-2014
PA.MU+- ;00
O O
#AUL 100
O O
O O.
AHGIAU( 200
O O
(U07( ;00
O O
#U5 E;0
500
750
R211 JACQUE PUG <> 900
Organisation multilistes pour un fichier cls multiples
Inde< des diteurs
"ntroduction
7rganiation logi/ue
Organisation "hysi!ue
-tructuration du di/ue dur
H$aliation de !onction d'acc& $l$mentaire
LES SYSTMES DE GESTION
DE FICHIERS
H$aliation de !onction d'acc& $l$mentaire
-$curit$ et #rotection
+xemple? Le -5, d'U0"1
:aher -+LLA:"
=
O
2013-2014 1EF L'environnement de programmation Unix/Linux
Problme
Comment allouer lespace disque aux fichiers de
sorte que:
Cet espace disuqe soit bien utilis
Laccs aux fichiers soit rapide
Systmes de gestion de fichiers Organisation physique dun fichier
11 179
L'environnement de programmation
Unix/Linux
2013-2014
Adresse physique (secteur) : ntte, ncylindre,nsecteur
Cylindre : ensemble des pistes accessibles
sans dplacement des ttes
Moteur
tte de lecture/criture (face)
plateau
Structure du disque dur
Systmes de gestion de fichiers Organisation physique dun fichier
plateau
Face : 20 1500 pistes
Piste : ensemble de secteurs (4 32) Alimentation
Secteur : plus petite unit d'information accessible (32 4096 octets)
12 180
L'environnement de programmation
Unix/Linux
2013-2014
Lunit dallocation sur le disque dur est le bloc physique.
Il est compos de 1 n secteurs
ex: 1 bloc = 2 secteurs de 512 octets soit 1KO
Les oprations de lecture et d'criture du SGF se font bloc par bloc
Allocation du disque : le bloc physique
Systmes de gestion de fichiers Organisation physique dun fichier
Les oprations de lecture et d'criture du SGF se font bloc par bloc
sect sect sect sect
Bloc 1 Bloc 2 Bloc 3 Bloc 4
13 181
L'environnement de programmation
Unix/Linux
2013-2014
Programme :
Pour les lves
Lire (nom_lve);
Lire (note_examen);
crire (table);
fait
Sauvegarder
(mon_fichier)
Programme Fichier logique : suite denregistrements
instructions mon-_fichier
Toto Dupont Csar Cloptre
12 20 09 15
Implantation physique
Systmes de gestion de fichiers Organisation physique dun fichier
(mon_fichier)
totot 12
dupont 20
cesar 09
cloptre 15
Programme
donne
Fichier physique
Ensemble de
00110
blocs physiques
Fichier_notes_nfa
004
14 182
L'environnement de programmation
Unix/Linux
2013-2014
Implantation physique
Un fichier physique est constitu dun
ensemble de blocs physique.
Il existe plusieurs mthodes dallocation des
blocs physiques :
allocation contigu (squentielle simple)
allocation par zones
Systmes de gestion de fichiers Organisation physique dun fichier
allocation par zones
allocation par blocs chains
allocation indexe
il faut grer et reprsenter l'espace libre
2013-2014
L'environnement de programmation
Unix/Linux
183
Un fichier occupe un ensemble de blocs contigus sur le
disque
Bien adapt au mthodes d'accs squentielles
et directes
Difficults :
-Fragmentation de la mmoire
-extension du fichier
Allocation contigu
Systmes de gestion de fichiers Organisation physique dun fichier
-extension du fichier
fichier 1 : adresse bloc 1, longueur 3 blocs
fichier 2 : adresse bloc 13, longueur 5 blocs
16 184
L'environnement de programmation
Unix/Linux
2013-2014
cration d'un nouveau fichier : il faut allouer un nombre de blocs
suffisants dpendant de la taille du fichier
prvoir cette taille
trouver un trou suffisant (First Fit, BestFit)
Allocation contigu
Systmes de gestion de fichiers Organisation physique dun fichier
Fichier 3 : 4 blocs
fichier 1 : adresse bloc 1, longueur 3 blocs
fichier 2 : adresse bloc 13, longueur 5 blocs
Fichier 4 : 6 blocs
17 185
L'environnement de programmation
Unix/Linux
2013-2014
fragmentation de la mmoire: ramasse miette
Allocation contigu
Systmes de gestion de fichiers Organisation physique dun fichier
Compactage
Fichier 4 : 6 blocs
fichier 1 : adresse bloc 1, longueur 3 blocs adresse bloc 1, longueur 3 blocs
fichier 2 : adresse bloc 13, longueur 5 blocs adresse bloc 8, longueur 3 blocs
fichier 3 : adresse bloc 3, longueur 4 blocs adresse bloc 4, longueur 3 blocs
18 186
L'environnement de programmation
Unix/Linux
2013-2014
Etendre le fichier 1 avec un bloc de donnes
Allocation contigu
Systmes de gestion de fichiers Organisation physique dun fichier
Dplacer les
fichiers
COUTEUX !
fichier 1 : adresse bloc 1,
fichier 1 : adresse bloc 1,
longueur 4 blocs
longueur 3 blocs
Gnrer une erreur
19 187
L'environnement de programmation
Unix/Linux
2013-2014
Un fichier est constitu de plusieurs zones physiques
disjointes (exemple systme MVS IBM) :
- une zone primaire alloue la cration
- des zones secondaires
(extensions) alloues au fur et
mesure des besoins
- Chaque zone est alloue de faon indpendante
Allocation par zones
Systmes de gestion de fichiers Organisation physique dun fichier
Zone
Primaire
( 3 blocs)
Zone
Secondaire
(2 blocs)
ZP P
ZS I
ZS I
ZS I
Problmes prcdents attnus
mais toujours existants
20 188
L'environnement de programmation
Unix/Linux
2013-2014
Un fichier est constitu comme une liste chaine de
blocs physiques, qui peuvent tre disperss n'importe
o.
Extension simple du fichier : allouer un
fichier 1
nouveau bloc et le chainer au dernier
Pas de fragmentation
Allocation par bloc chaine
Systmes de gestion de fichiers Organisation physique dun fichier
fichier 1
fichier 2
Pas de fragmentation
Difficults :
-mode squentiel seul
-le chanage du bloc suivant
occupe de la place dans un bloc
Adresse/ n bloc suivant
donnes
21 189
L'environnement de programmation
Unix/Linux
2013-2014
Une table d'allocation des
fichiers (File allocation table
- FAT) regroupe l'ensemble
des chainages.
(exemple systmes windows)
fichier 1
N bloc
1 NULL
2 Libre
3 5
4 Libre
5 NULL
6 Libre
7 1
Fin de fichier
Bloc non allou
Allocation par bloc chaine : variante
Systmes de gestion de fichiers Organisation physique dun fichier
fichier 1
fichier 2
FAT
7 1
11 7
12 Libre
13 15
14 Libre
15 3
16 Libre
17 13
N de Bloc suivant
Allou pour le
fichier
22
20
Libre
190
L'environnement de programmation
Unix/Linux
2013-2014
Les adresses des blocs physiques constituant un fichier sont
ranges dans une table appele index, elle-mme contenue dans
un ou plusieurs blocs disque
512 / 4 = 128 entres
fichier 2
Allocation indexe
Systmes de gestion de fichiers Organisation physique dun fichier
fichier 1
bloc d'index
-+ Supporte bien laccs direct
- gaspillage de place dans le bloc dindex
-- taille maximale du fichier dpend de la taille
-de lindex
23 191
L'environnement de programmation
Unix/Linux
2013-2014
0
Accs direct
Accs direct
9
Accs direct
10
1 indirection
11 2 indirections
Allocation indexe : la solution Unix/Linux
Systmes de gestion de fichiers Organisation physique dun fichier
11 2 indirections
12 3 indirections
Table d'allocation
13 entres
En mmoire centrale Sur disque
24 192
L'environnement de programmation
Unix/Linux
2013-2014
0
9
10
Accs direct
Accs direct
Accs direct
1 indirection
10 blocs de donnes
INDIRECT_1
Allocation indexe : la solution Unix/Linux
Systmes de gestion de fichiers Organisation physique dun fichier
Bloc = 1024 octets
10
11
12
2 indirections
3 indirections
Table d'allocation
13 entres
256 blocs de donnes
INDIRECT_2_1
256 blocs de donnes
INDIRECT_2_2
INDIRECT_2
En mmoire centrale Sur disque
4 blocs de donnes
29 193
L'environnement de programmation
Unix/Linux
2013-2014
Le systme maintient une liste d'espace libre, qui mmorise tous
les blocs disque libres (non allous)
- Cration d'un fichier : recherche dans la liste d'espace libre de
la quantit requise d'espace et allocation au fichier : l'espace
allou est supprim de la liste
- Destruction d'un fichier : l'espace libr est intgr la liste
Gestion de l'espace libre
Systmes de gestion de fichiers Organisation physique dun fichier
- Destruction d'un fichier : l'espace libr est intgr la liste
d'espace libre
Il existe diffrentes reprsentations possibles de l'espace libre
vecteur de bits
liste chaine des blocs libres
30 194
L'environnement de programmation
Unix/Linux
2013-2014
La liste d'espace libre est reprsente par un vecteur
binaire, dans lequel chaque bloc est figur par un bit.
- Bloc libre : bit 1
- Bloc allou : bit 0
Gestion de l'espace libre par un vecteur de bits
Systmes de gestion de fichiers Organisation physique dun fichier
01010101110101010111
Facilit de trouver n blocs libres conscutifs
Systme Macintosh
31 195
L'environnement de programmation
Unix/Linux
2013-2014
La liste d'espace libre est reprsente par une liste
chaine des blocs libres
Liste des blocs libres
Parcours de la liste
couteux
Difficile de trouver un
Gestion de l'espace libre par liste chaine
Systmes de gestion de fichiers Organisation physique dun fichier
Difficile de trouver un
groupe de blocs libres
Variante par comptage
32 196
L'environnement de programmation
Unix/Linux
2013-2014
Le premier bloc libre dune zone libre contient ladresse du premier
bloc libre dans la zone suivante et le nombre de blocs libres dans la
zone courante.
Liste des blocs libres Liste des blocs libres
1 1
Gestion de l'espace libre par liste chaine:
variante avec comptage
Systmes de gestion de fichiers Organisation physique dun fichier
1 1
1 3
1 1
1 3
33 197
L'environnement de programmation
Unix/Linux
2013-2014
La FAT intgre
directement la
gestion de cet
espace.
fichier 1
N bloc
1 NULL
2 Libre
3 5
4 Libre
5 NULL
6 Libre
7 1
Fin de fichier
Bloc non allou
N de Bloc suivant
Gestion de l'espace libre
Systmes de gestion de fichiers Organisation physique dun fichier
fichier 1
fichier 2
FAT
7 1
11 7
12 Libre
13 15
14 Libre
15 3
16 Libre
17 13
N de Bloc suivant
Allou pour le
fichier
34
20
Libre
198
L'environnement de programmation
Unix/Linux
2013-2014
"ntroduction
7rganiation logi/ue
7rganiation ph%i/ue
Structuration du dis!ue dur
H$aliation de !onction d'acc& $l$mentaire
LES SYSTMES DE GESTION
DE FICHIERS
H$aliation de !onction d'acc& $l$mentaire
-$curit$ et #rotection
+xemple? Le -5, d'U0"1
:aher -+LLA:"
=
O
2013-2014 1== L'environnement de programmation Unix/Linux
Structuration du disque dur
Trois oprations pour structurer le disque dur :
Systmes de gestion de fichiers Structuration du disque dur
Trois oprations pour structurer le disque dur :
- Formatage physique
- Formatage logique
- Partitionnement
45 200
L'environnement de programmation
Unix/Linux
2013-2014
Le formatage physique ou de bas niveau permet de
diviser la surface du disque en lments basiques.
Il prpare le disque accueillir des
donnes
Adresse (HCS, head cylinder sector)
cylindre
Formatage physique
Systmes de gestion de fichiers Structuration du disque dur
cylindre
plateau
Face : 20 1500 pistes
Piste : ensemble de secteurs
Secteur : 512 octets
Adresse HCS (3, 1, 30)
46 201
L'environnement de programmation
Unix/Linux
2013-2014
Le formatage logique ou de haut niveau cre un systme
de gestion de fichiers sur le disque.
- Le type de SGF install dpend du systme dexploitation. Il
forme les clusters ou blocs
Formatage logique/ Partitionnement
Systmes de gestion de fichiers Structuration du disque dur
- Il est possible dinstaller plusieurs types de SGF sur un disque
grce au partitionnement du disque..
sgf1 sgf2 sgf3
disque
partition partition partition
47 202
L'environnement de programmation
Unix/Linux
2013-2014
Une partition est une partie d'un disque dur destine accueillir un
SGF. Elle est identifie par un nom appel nom de volume . Elle
est constitue dun ensemble de cylindres contigs.
Un disque peut accueillir 4 partitions diffrentes. Une seule est active
la fois.
Premier secteur (cylindre 0,
secteur 1, face 0)
Partitionnement
Systmes de gestion de fichiers Structuration du disque dur
secteur 1, face 0)
Master Boot Record
Programme de
Table des
dmarrage (446 o)
partitions
Partition 1 FAT 16
Partition 2 Linux
Partition 3 FAT 32
Partition 4 NTFS
4 descripteurs de partition
4 * 16 octets
Adresse HCS premier secteur
Adresse HCS dernier secteur
Nombre de secteurs
type
active
48 203
L'environnement de programmation
Unix/Linux
2013-2014
Bloc boot Super bloc Table
des inodes
Blocs disques
Descripteur des
Organisation de partition : LINUX
Systmes de gestion de fichiers Structuration du disque dur
Descripteur des
1er secteur
contient lamorage du
SE
et description de la
partition
fichiers
Nom
Taille
droits
Taille du SGF
blocs libres chains
Descripteurs de fichiers
(inodes) libres
inode
49 204
L'environnement de programmation
Unix/Linux
2013-2014
Secteur
d'amorage
FAT
Copie de
la FAT
Rpertoire
Blocs de donnes
racine
1 NULL
2 L
3 NULL Fichier 1 ext H taille
Organisation de partition : DOS
Systmes de gestion de fichiers Structuration du disque dur
3 NULL Fichier 1 ext H taille
4
L
5 L
6
L
7 1
11 7
12 L
13 15
14 L
15 3
16
L
17
13
20 L
50 205
L'environnement de programmation
Unix/Linux
2013-2014
Partitions
Systmes de gestion de fichiers Structuration du disque dur
51 206
L'environnement de programmation
Unix/Linux
2013-2014
1. Lutilisateur appuie sur le bouton dalimentation
de lunit centrale
2. Une fois le courant stabilis, le processeur dmarre et
excute le code du BIOS stock dans la ROM une
adresse prdfinie
3. Le BIOS excute une squence de vrification des
composants (mmoire, vido, priphriques de base)
(POST : Power-OnSelf Test)
Dmarrage de lordinateur
Systmes de gestion de fichiers Structuration du disque dur
(POST : Power-OnSelf Test)
4. Le BIOS accde au CMOS pour lire la configuration
matrielle de la machine (date, heure, priphrique de
masse contenant le systme dexploitation).
5. Le BIOS accde au MBR du disque ; il charge en
Programme de
dmarrage (446 o)
bootstrap
Table des
partitions
active
mmoire centrale le programme de dmarrage
6. Le programme de dmarrage dtermine la partition
active et transfert le contrle au bootstrap de la partition
pour charger le systme dexploitation
52 207
L'environnement de programmation
Unix/Linux
2013-2014
"ntroduction
7rganiation logi/ue
7rganiation ph%i/ue
-tructuration du di/ue dur
1alisation des onctions daccs lmentaires
LES SYSTMES DE GESTION
DE FICHIERS
1alisation des onctions daccs lmentaires
-$curit$ et #rotection
+xemple? Le -5, d'U0"1
:aher -+LLA:"
=
O
2013-2014 20F L'environnement de programmation Unix/Linux
Programme Utilisateur
Appels
systme
open (fichier)
chdir( /home)
Interprteur de commandes
commandes
> cd /home
Interfaces dappel du SGF
Systmes de gestion de fichiers Ralisation des fonctions daccs lmentaires
open chdir
_open
_chdir
Interface dappel
(bibliothque systme)
SE : ensemble
de fonctions
Systme de gestion de fichiers
Jolle Delacroix 62 209
L'environnement de programmation
Unix/Linux
2013-2014
Quelques commandes du SGF:
- liste du rpertoire (ls, dir)
- changement de rpertoire (cd)
- cration rpertoire (mkdir)
- suppression rpertoire (rmdir)
- suppression fichier (rm, del)
- modification d'attributs d'un fichier (chmod)
Les commandes
Systmes de gestion de fichiers Ralisation des fonctions daccs lmentaires
- modification d'attributs d'un fichier (chmod)
- changement de nom de fichier (mv, ren)
Au lancement d'une commande -> appel la fonction du SGF
Jolle Delacroix 63 210
L'environnement de programmation
Unix/Linux
2013-2014
Quelques appels systmes du SGF:
-ouverture fichier (open)
-cration de fichier (creat)
- fermeture fichier (close)
et
Les appels systmes
Systmes de gestion de fichiers Ralisation des fonctions daccs lmentaires
et
- Lecture (read)
-criture (write)
Jolle Delacroix 66 211
L'environnement de programmation
Unix/Linux
2013-2014
MC
Ouverture fichier
descripteur
Fich = OPEN (nom_fichier, L/E)
Ouverture de fichier
Systmes de gestion de fichiers Ralisation des fonctions daccs lmentaires
Fich
L'ouverture
- vrifie l'existence du fichier dans le rpertoire du disque
repertoire
- vrifie la compatibilit des types d'accs au fichier (lecture/criture)
- transfert les lments de lentre de rpertoire dans le descripteur
correspondant en mmoire
- renvoie au programme un index Fich qui dsigne le descripteur de
fichier (nom local)
Le descripteur est conserv et mis jour en mmoire jusqu' la fermeture
Jolle Delacroix 67 212
L'environnement de programmation
Unix/Linux
2013-2014
MC
Lecture fichier
enrg
cache
READ (Fich, enrg, nenregistrement)
enrg
Fich
descripteur bloc disque
La lecture d'un fichier ncessite:
Lecture de fichier
Systmes de gestion de fichiers Ralisation des fonctions daccs lmentaires
La lecture d'un fichier ncessite:
-pointeur du descripteur
-l'adresse mmoire de la zone rceptrice de l'enregistrement
-n de l'enregistrement qui peut:
-. ne pas exister si lecture squentielle
. tre le rang si accs direct
Il faut dterminer l'adresse du bloc physique contenant l'enregistrement lire
Les donnes lues sont transfres dans un tampon mmoire
Jolle Delacroix 68 213
L'environnement de programmation
Unix/Linux
2013-2014
read(Fich, enrg, taille_enrg_octets)
Un fichier Unix est une suite d'octets sans structure, accessibles de manire
squentielle.
Le SGF maintient pour chaque fichier un offset qui pointe sur l'octet courant
dans le fichier.
Une opration de lecture spcifie combien d'octets doivent tre lus
(taille_enrg_octets).
La lecture s'effectue depuis la position courante de l'offset et dlivre les
taille_enrg_octets octets suivants.
Lecture fichier : Unix
Systmes de gestion de fichiers Ralisation des fonctions daccs lmentaires
taille_enrg_octets octets suivants.
Lecture 1 Lecture 2
Taille_enrg_octets Taille_enrg_octets
Open
offset = 0
Read (fich, enrg, taille_enrg_octets)
offset = offset + taille_enrg_octets
Jolle Delacroix 69 214
L'environnement de programmation
Unix/Linux
2013-2014
Lecture fichier : Unix
READ (fich, enrg, taille_enrg_octets)
Une opration de lecture spcifie combien d'octets doivent tre lus
(taille_enrg_octets).
La lecture s'effectue depuis la position courante de l'offset et dlivre les
taille_enrg_octets octets suivants.
Il faut dterminer quel bloc les octets lire appartiennent, et lire ce bloc
Bloc 0,1,2
Bloc 3
Fich
Lecture fichier : Unix
Systmes de gestion de fichiers Ralisation des fonctions daccs lmentaires
Fich
offset
Open
offset = 0 Taille_enrg_octets
Read (fich enrg, taille_enrg_octets)
offset = offset + taille_enrg_octets
inode
Jolle Delacroix 70 215
L'environnement de programmation
Unix/Linux
2013-2014
Ecriture fichier
WRITE (fich, tampon, nenregistrement)
L'criture dans un fichier ncessite:
- pointeur du descripteur
- l'adresse mmoire de la zone mettrice de l'enregistrement
- n de l'enregistrement qui peut:
. ne pas exister si criture squentielle
Ecriture fichier
Systmes de gestion de fichiers Ralisation des fonctions daccs lmentaires
. tre le rang si accs direct
Cette fonction met jour certains lments du descripteur ; elle
peut entrainer lallocation dun nouveau bloc au fichier.
Les donnes sont transfres du tampon mmoire vers le
fichier
78 2013-2014 216
L'environnement de programmation
Unix/Linux
Fermeture fichier
CLOSE (fich)
Fermeture du fichier
La fermeture provoque:
transfert les lments du descripteur vers le
rpertoire sur le disque
Libration de la mmoire occupe par les
Systmes de gestion de fichiers Ralisation des fonctions daccs lmentaires
79
Libration de la mmoire occupe par les
tampons
2013-2014
L'environnement de programmation
Unix/Linux
217
"ntroduction
7rganiation logi/ue
7rganiation ph%i/ue
-tructuration du di/ue dur
H$aliation de !onction d'acc& $l$mentaire
LES SYSTMES DE GESTION
DE FICHIERS
H$aliation de !onction d'acc& $l$mentaire
Scurit et Protection
+xemple? Le -5, d'U0"1
:aher -+LLA:"
=
O
2013-2014 21F L'environnement de programmation Unix/Linux
Protection des fichiers
Protection contre les dgts physiques
FIABILITE
Utilisation de diffrents types de redondance
Systmes de gestion de fichiers Scurit et protection des fichiers
Protection contre les accs inappropris
PROTECTION
liste daccs (droits d'accs)
83 2013-2014 219
L'environnement de programmation
Unix/Linux
Dfinition de droits d'accs
- lecture (r), criture (w), excution (x), destruction ...
A chaque fichier est associ une liste d'accs, spcifiant
pour chaque utilisateur, les types d'accs qui lui sont
Protection contre les accs inappropris
Systmes de gestion de fichiers Scurit et protection des fichiers
pour chaque utilisateur, les types d'accs qui lui sont
autoriss
Annie Nicolas Martine
r x r r x
Annie Nicolas Martine
r r w x r w x
fichA
Charles Louis
r x r w x
fichB
Charles Louis
r w x r
84 2013-2014 220
L'environnement de programmation
Unix/Linux
La liste d'accs peut tre longue et difficile grer
- dfinition de groupes auxquels sont associs des droits
- un utilisateur hrite des droits du groupe auxquels il appartient
G3 : Nicolas
Systmes de gestion de fichiers Scurit et protection des fichiers
Protection contre les accs inappropris
G3 : Nicolas
G2 : Martine, Charles, Annie
Annie NicolasMartine Charles
r x r r x r x
Annie Nicolas MartineCharles
r r w x r w x r w x
fichA
Louis
r w x
Louis fichB
r
G1 : Louis
G3
r
G3
r
G3 : Annie, Louis
G2 : Martine, Charles
G1 : Nicolas
G2 G1 fichA
r x r w x
G2 G1 fichB
r w x r w x
85 2013-2014 221
L'environnement de programmation
Unix/Linux
Exemple Unix
- Dfinition de trois classes :
le propritaire : celui qui a cre le fichier
le groupe : le groupe de travail
les autres : tous les autres
> ls -l
Systmes de gestion de fichiers Scurit et protection des fichiers
Protection contre les accs inappropris
> ls -l
drwxr-xr-x 2 delacroi 4096 Oct 22 1998 repertoire
-rw-r--r-- 1 delacroi 6401 Jan 8 1997 eleve.c
-rwxr-xr-x 1 delacroi 24576 Dec 15 1998 essai
-rw-r--r-- 1 delacroi 67 Dec 15 1998 essai.c
> chmod a+w essai.c
> ls -l essai.c
-rw-rw-rw- 1 delacroi 67 Dec 15 1998 essai.c
86 2013-2014 222
L'environnement de programmation
Unix/Linux
Utilisation de la redondance interne :
l'information existe en double exemplaire : une version primaire, une
version secondaire
le systme maintient la cohrence entre les deux versions
Protection contre les dgts physiques
Systmes de gestion de fichiers Scurit et protection des fichiers
le systme maintient la cohrence entre les deux versions
exemple : Windows dispose de deux exemplaires de la FAT
Secteur
d'amorage
FAT
Copie de Rpertoire
la FAT racine
Blocs de donnes
primaire secondaire
Maintien de la cohrence entre les deux exemplaires
87 2013-2014 223
L'environnement de programmation
Unix/Linux
Utilisation de la redondance interne :
Des donnes supplmentaires appeles somme de contrle sont
ajoutes l'information qui permettent de vrifier la validit des
informations.
exemple : chaque secteur du disque comporte les donnes + une
Protection contre les dgts physiques
Systmes de gestion de fichiers Scurit et protection des fichiers
exemple : chaque secteur du disque comporte les donnes + une
somme de contrle. Cette somme de contrle permet de dtecter les
secteurs dfectueux.
secteur
donnes 100010001000
C
R
C
1100 1000100010001100
Somme de contrle : inclut des lments
redondants par rapport aux donnes
CRC (contrle de redondance cyclique) : fonction
permettant de dtecter les erreurs et les
applique aux donnes et calculant la somme de
rparer
contrle
88 2013-2014 224
L'environnement de programmation
Unix/Linux
Utilisation de la redondance :
Les donnes sont dupliques sur plusieurs supports physique
Redondance par sauvegarde priodique complte ou incrmentale
Protection contre les dgts physiques
Systmes de gestion de fichiers Scurit et protection des fichiers
Redondance par sauvegarde priodique complte ou incrmentale
Principes des disques RAID (Redundant Array of Independent Disk)
89 2013-2014 225
L'environnement de programmation
Unix/Linux
Redondance par sauvegarde priodique :
sauvegarde complte : la totalit du SGF est dupliqu mme si les
fichiers n'ont pas t modifis
Cartouches
Sauvegarde tous les blocs
Toutes les nuits
Protection contre les dgts physiques
Systmes de gestion de fichiers Scurit et protection des fichiers
Restauration tous les blocs
Dernire sauvegarde
90 2013-2014 226
L'environnement de programmation
Unix/Linux
Redondance par sauvegarde priodique :
sauvegarde incrmentale : seuls les objets modifis depuis la
dernire sauvegarde sont dupliqus.
Cartouches
Sauvegarde tous les blocs
Dimanche nuit
Protection contre les dgts physiques
Systmes de gestion de fichiers Scurit et protection des fichiers
Sauvegarde les blocs modifis
L, ma, me, je, ve, sa nuit
Restauration
dernire sauvegarde complte
Complte par les sauvegardes incrmentales
J-1
Trash jour J
91 2013-2014 227
L'environnement de programmation
Unix/Linux
Principes des disques RAID :
Lunit de stockage est constitue de plusieurs disques durs
constituant une grappe.
Lecture/criture
Protection contre les dgts physiques
Systmes de gestion de fichiers Scurit et protection des fichiers
Lecture/criture
RAID Niveau 1
B1
RAID Niveau 4
B1
Bloc de contrle = f (B1,B2,B3)
Bloc de contrle = f (B4,B5, B6)
B2
B1 B1 B1
B2B2B2
B2 B3 BC
B4
B5 B6 BC
Les donnes (blocs) sont rpartis sur n-1 disques de la grappe
Les donnes (blocs) sont dupliques
Le bloc n stocke une information redondante
sur chaque disque
des donnes permettant de les reconstituer en cas de perte
92 2013-2014 228
L'environnement de programmation
Unix/Linux
Introduction
7rganiation logi/ue
7rganiation ph%i/ue
-tructuration du di/ue dur
H$aliation de !onction d'acc& $l$mentaire
LES SYSTMES DE GESTION
DE FICHIERS
H$aliation de !onction d'acc& $l$mentaire
-$curit$ et #rotection
E<em"le* Le SG> dU#I$
:aher -+LLA:"
=
O
2013-2014 22= L'environnement de programmation Unix/Linux
Rappel
Un fichier est un flot doctets non structure, stocke
sur une mmoire auxiliaire.
Plusieurs sortes de fichiers:
les fichiers ordinaires;
les rpertoires;
les priphriques

Systmes de gestion de fichiers Exemple: Le SGF dUNIX

Un fichier peut avoir plusieurs liens (noms)
Les caractristiques statiques d'un fichier sont
stockes dans un descripteur appel i-noeud:
le type de fichier (ordinaire, rpertoire, ...), taille, dates,
UID-GID, liens, la liste des blocs ,
Un rpertoire est un fichier particulier : c'est en fait un
tableau deux colonnes, nom, i-noeud.
2013-2014
L'environnement de programmation
Unix/Linux
230
Gestion des priphriques
Un priphrique est un fichier spcial qui possde 2
index:
majeur identifie les priphriques de mme type
Mineur identifie individuellement chaque priphrique
Un volume de stockage nest accessible que sil est
mont
intgr le volume dans la racine du SGF (/)
Systmes de gestion de fichiers Exemple: Le SGF dUNIX
intgr le volume dans la racine du SGF (/)
La commande mount permet de relier une partition
ou un priphrique un rpertoire par lequel les
donnes sont accessibles.
mount -t iso9660 /dev/cdrom /media/cdrom
Le cdrom est accessible travers le rpertoire
/media/cdrom
2013-2014
L'environnement de programmation
Unix/Linux
231
Fonctionnement du SGF UNIX
Systmes de gestion de fichiers Exemple: Le SGF dUNIX
2013-2014
L'environnement de programmation
Unix/Linux
232
Les entes sortie de base
Les descripteurs de fichiers
Toute entre-sortie est une lecture ou une criture d'un
fichier.
Avant d'entreprendre une opration de lecture ou
d'criture, il est ncessaire d'ouvrir le fichier (ou de le crer)
Le systme , retourne un entier non nul, appel nom local,
qui servira le dsigner.
Systmes de gestion de fichiers Exemple: Le SGF dUNIX
Primitives E/S sur fichier -read et write
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count)
ssize_t write(int fd, const char *buf, size_t
count)
read et write fournissent en retour le nombre d'octets
rellement transfrs. Zro indique une fin de fichier, et -
1 , une erreur (errno).
2013-2014 233
L'environnement de programmation
Unix/Linux
Les entes sortie de base
Exemple : version primitive de cat
/* copie son entre sur sa sortie */
# define SIZE 512 /* arbitraire */
main()
{ char buf[SIZE];
int n;
Systmes de gestion de fichiers Exemple: Le SGF dUNIX
int n;
while((n=read(0,buf,sizeof(buf)) > 0)
write(1, buf, n);
exit(0);
}
2013-2014 234
L'environnement de programmation
Unix/Linux
Les entes sortie de base
Ouverture de fichier
int open(const char *pathname, int flags)
open retourne un nom local de fichier (entier) , -1si une erreur.
mode d'ouverture sont dfinis dans /usr/include/fcntl.h:
O_RDONLY ouverture en lecture seulement;
O_WRONLY ouverture en criture seulement;
O_RDWR ouverture en lecture et criture;
D'autres bits peuvent tres combins (OU) avec les bits prcdents:
O_NDELAY ouverture non bloquante (tubes ,fichiers spciaux);
O_APPEND criture uniquement en fin de fichier
Systmes de gestion de fichiers Exemple: Le SGF dUNIX
O_APPEND criture uniquement en fin de fichier
O_CREATcration de fichier s'il n'existe pas(fournir droits)
O_TRUNC effacer le contenu du fichier s'il existe.
O_EXCL avec O_CREAT, provoque un echec si il existe
Une autre forme:
int open(const char *pathname, int flags, mode_t
droits)
droits droits d'accs (cration seulement).
Cette valeur est modifie par le umask du processus : la vritable
valeur utilise est (mode & ~umask).
2013-2014 235
L'environnement de programmation
Unix/Linux
Les entes sortie de base
La cration de fichier
int creat(const char *pathname, mode_t droits)
creat, utilise pour crer de nouveau fichier ou pour en rcrire
d'anciens.
retourne un nom local utilis lors des oprations futures sur le
fichier; -1 en cas d'erreur
creat ouvre le fichier en criture .
Fermeture de fichiers.
Systmes de gestion de fichiers Exemple: Le SGF dUNIX
Fermeture de fichiers.
int close(int fd)
close rompt le lien entre un fichier et un nom local, rendant
celui-ci libre
A sortie du programme (exit) ferme tous les fichiers ouverts.
Suppression de fichiers
int unlink(const char *pathname)
unlink dtruit un fichier dans lr systme de fichier.
2013-2014 236
L'environnement de programmation
Unix/Linux
Les entes sortie de base
L'accs alatoire lssek
off_t lseek(int fd, off_t deplacement, int
origine)
lseek permet de se dplacer dans un fichier sans lecture/criture la
position deplacement dans le fichier associ au descripteur fd en suivant
la directive origine ainsi :
SEEK_SET La tte est place offset octets depuis le dbut du fichier.
Systmes de gestion de fichiers Exemple: Le SGF dUNIX
SEEK_SET La tte est place offset octets depuis le dbut du fichier.
SEEK_CUR La tte de lecture/criture est avance de deplacement octets.
SEEK_END La tte est place la fin du fichier plus deplacement octets.
La position courante devient deplacement, considr par rapport
l'origine.
lee48!d2 0L2 -++NQ+0(9A pour a1outer 2 la 0in de 0ic'ier
lee48!d2 0L2 -++NQ-+G9A pour retourner au d3%ut du 0ic'ier
po R lee48!d2 0L2 -++NQ.UH9A position courante
2013-2014 237
L'environnement de programmation
Unix/Linux
Les entes sortie de base
Duplication d'un descripteur de fichier
int dup(int oldfd);
int dup2(int oldfd, int newfd)
dup et dup2 crent une copie du descripteur
de fichier oldfd.
Systmes de gestion de fichiers Exemple: Le SGF dUNIX
de fichier oldfd.
dup utilise le plus petit numro inutilis pour
le nouveau descripteur.
dup2 transforme newfd en une copie de
oldfd, fermant auparavant newfd si besoin est.
d=creat("toto", 0666);
close((2);
dup(d);close(d);
redirige la sortie standard
derreur sur le fichier toto.
2013-2014 238
L'environnement de programmation
Unix/Linux
Les rpertoires
Un rpertoire dcrit lassociation entre le nom de fichier et le descripteur (i-
nud) .
Une entre du rpertoire est dcrit par une structure
struct dirent
{
long d_ino; /* inode number */
off_t d_off; /* offset to this dirent */
Systmes de gestion de fichiers Exemple: Le SGF dUNIX
nom de ichier n? d@inode
off_t d_off; /* offset to this dirent */
unsigned short d_reclen; /* length of this d_name */
char d_name [NAME_MAX+1]; /* file name */
}
Accs au rpertoire
struct dirent *readdir (DIR *dir)
readdir() renvoie l'entre suivante du flux rpertoire, NULL a la fin du rpertoire
DIR *opendir (const char *name);
opendir() ouvre un flux rpertoire correspondant au rpertoire name, et renvoie un
pointeur sur ce flux. Le flux est positionn sur la premire entre du rpertoire
2013-2014 239
L'environnement de programmation
Unix/Linux
Exemple : listdir.c Affiche le Contenu
d'un Rpertoire
alits
EE
#include <assert.h>
#include <dirent.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
int main (int argc, char* argv[])
{
char* dir_path;
DIR* dir;
struct dirent* entry;
char entry_path[PATH_MAX + 1];
size_t path_len;
if (argc >= 2) /* rpertoire spcifi sur la ligne de commande s'il y a lieu. */
dir_path = argv[1];
Systmes de gestion de fichiers Exemple: Le SGF dUNIX
dir_path = argv[1];
else /* Sinon, utilise le rpertoire courant. */
dir_path = ".";
strncpy (entry_path, dir_path, sizeof (entry_path)); /* Copie le chemin du rpertoire dans entry_path. */
path_len = strlen (dir_path);
if (entry_path[path_len - 1] != '/') { /* Si le rpertoire ne se termine pas par un slash, l'ajoute. */
entry_path[path_len] = '/';
entry_path[path_len + 1] = '\0';
++path_len;
}
dir = opendir (dir_path); /* Dmarre l'affichage du contenu du rpertoire. */
while ((entry = readdir (dir)) != NULL) { /* Boucle sur les entres du rpertoire. */
const char* type; /* chemin complet=rpertoire+nom de l'entre. */
strncpy(entry_path+path_len,entry->d_name,sizeof(entry_path)-path_len);
printf ("%s\n",entry_path);
}
closedir (dir);
return 0;
}
2013-2014 240
L'environnement de programmation
Unix/Linux
les inodes
Le descripteur de fichier, ou inode est dcrit dans une structure stat
(#include <sys/stat.h>)
struct stat
{ dev_t st_dev; priphrique du inode */
ino_t st_ino; numro du inode */
ushort st_mode type du fichier, attributs, rsum
short st_nlink; nombre de liens
ushort st-uid; numro du propritaire */
Systmes de gestion de fichiers Exemple: Le SGF dUNIX
ushort st-uid; numro du propritaire */
ushort st-gid; numro du groupe */
dev_t st_rdev; n de ressource pour fichier spcial */
off_t st_size; taille du fichier en octets */
time_t st_atime; date de dernier accs
time_t st_mtime; date de dernire modification
time_t st_ctime; date de dernire modif. de caract
};
st_mode 15 11 10 9 8 0
type setuid setgid sticky r w x r w x r w x
2013-2014 241
L'environnement de programmation
Unix/Linux
les inodes
Accs au descripteur
int stat(const char *file_name, struct
stat *buf);
rcupre le statut du fichier point par file_name et
remplit le buffer buf
int fstat(int filedes, struct stat *buf)
Systmes de gestion de fichiers Exemple: Le SGF dUNIX
int fstat(int filedes, struct stat *buf)
identique stat, sauf que le fichier ouvert est point
par le descripteur filedes
int lstat(const char *file_name, struct
stat *buf);
identique stat, sauf qu'il donne le statut d'un lien
lui-mme et non pas du fichier point par ce lien
2013-2014 242
L'environnement de programmation
Unix/Linux