Sei sulla pagina 1di 29

Atelier systme 2

I- Les principales commandes DOS

1. Commandes de rpertoires
Sans rentrer dans tous les dtails de ces commandes, nous allons nous dplacer d'un
rpertoire l'autre, en crer et en supprimer, visualiser le contenu.
DIR affiche le contenu du rpertoire en cours
CHDIR ou CD en abrg: commande interne
c:>CD rpertoire <entre> ou CHDIR rpertoire <entre> permet de se dplacer dans le
rpertoire indiqu
CD .. permet de remonter d'un niveau de rpertoire
CD \ revient au rpertoire principal (root) quelque soit le sous-rpertoire courant (en cours).
CD\<sous-rpertoire1>\<sous-rpertoire2>: positionne le curseur sur le rpertoire <sous-
rpertoire2>, inclus dans le <sous-rpertoire1> lui-mme inclus dans le rpertoire en cours
MKDIR <Sous-rpertoire> ou MD <sous-rpertoire>: cre un sous rpertoire dans le
rpertoire en cours suivant le nom spcifi.
RMDIR <sous-rpertoire> ou RD <sous-rpertoire>: supprime le rpertoire s'il est vide
Si le dossier supprimer n'est pas vide, la commande est refuse. DOS affiche un
message pour le signaler.
Tree affiche tous les rpertoires contenus dans le rpertoire courant
TREE /F: affiche les rpertoires et les fichiers contenus dans ces rpertoires
TREE /F |more: affiche les rpertoires et leur contenu par page.
L'affichage se fait sous forme d'arbre
2. Manipulations de fichiers
Copy
COPY fichier1 fichier2: copie le fichier1 vers un fichier dont le nom est fichier2
RENAME (REN en abrg)
c:\>RENAME fichier1 fichier2: renomme le fichier1 en fichier2
DEL ou ERASE
DEL fichier1: efface le fichier spcifi.
UNDELETE
UNDELET fichier 1: rcupre sous certaines conditions les fichiers effacs par une
commande DEL ou ERASE
3. Commandes systmes
TIME affiche et permet jour l'heure du systme
DATE affiche et permet jour l'heure du systme

1
CHKDSK
CHKDSK <Drive>: vrifie le disque spcifi
Format Cette commande permet de formater (prparer) la surface d'un disque dur ou
d'une disquette.
FORMAT <Drive>: formate le disque <drive>
Label
LABEL <disque><nom du disque>: donne un label (nom) au disque spcifi
FDISK permet de crer, modifier ou supprimer des partitions sur les disques durs
II- Les scripts batch
Un fichier batch est, sous le systme d'exploitation Windows, un fichier (ou script) contenant
une srie d'instructions MS-DOS. Ces fichiers, lorsqu'ils sont lancs, excutent les
commandes contenues dans le fichier. Ces commandes sont alors interprtes par les
excutables cmd.exe et command.com. Les scripts ainsi crer pourront s'excuter sur les tous
les environnements Windows.

1. Mon premier Script


On peut utiliser le bloc note Windows pour crire des scripts batch.
Exemple 1 :
rem la directive rem permet de commenter une ligne au sein d'un fichier batch
rem la commande echo off permet de dsactiver l'affichage des commandes
echo off
rem la commande cls de mettre blanc l'affichage effaant toutes les lignes prcdentes
cls
rem la commande echo texte permet d'afficher du texte dans la fentre dos
echo Voila mon premier batch
rem la commande pause permet d'arreter le script en demandant une action de l'utilisateur
pause

Une fois le fichier taper il faut l'enregistrer avec une extension spcifique .bat, en
slectionnant le Type "All Types (*.*), pour l'diteur bloc note.
Pour l'excuter double cliquez simplement sur le fichier.
2. Les Variables
Une variable permet de stocker une donne indique, tous moment dans le script on pourra
faire appel elle.
Exemple 2 :
rem dsactive l'affichage des commandes
echo off
rem remise blanc de l'cran
cls
rem dfinition de la valeur de la variable
set variable=1
rem affiche du texte en rappelant la variable grce aux %

2
echo la valeur de la variable est %variable%
rem arrt
pause
Rsultat :

L'appel de la variable, se fait en plaant des % autour du nom de la variable.


Demande de valeur l'utilisateur
Il semble intressant d'interagir avec l'utilisateur en demandant une variable. Cela est possible
grce l'utilisation du paramtre "/p", passer la commande set, comme nous le montre cet
exemple:
Exemple 3 :
rem dsactive l'affichage des commandes
echo off
rem remise blanc de l'cran
cls
rem le /p permet de demander le retour de la variable
set /p prenom= Quel est votre prenom :
rem remise blanc
cls
rem affiche le texte avec la variable rentre
echo ton prenom est %prenom%
rem arrt
pause
Rsultat :

Les variables d'environnement


Nous avons vu comment dfinir des variables, en demander l'utilisateur, mais Windows
possde un certain nombre de variables dj renseignes, concernant votre systme. Pour
tester vous pouvez essayer ce script.
Exemple 4 :

3
rem dsactive l'affichage des commandes
echo off
rem remise blanc de l'cran
cls
rem liste des variables
echo Salut %USERNAME%,nous sommes le %DATE%
echo il est %Time% dj!,
echo %RANDOM% est un chiffre alatoire.
echo Ton PC se nomme %COMPUTERNAME%,
echo il possde %NUMBER_OF_PROCESSORS% processeur,
echo c'est une architecture %PROCESSOR_IDENTIFIER%
rem arrt
pause
Rsultat :

Voici une liste des principales variables d'environnement sur les systmes Windows :
Variable d'environnement Description
Retourne un chemin d'accs au rpertoire par dfaut
%APPDATA%
contenant les programmes utilisateur.
Retourne la commande exacte utilise pour accder
%CMDCMDLINE%
l'interprteur de commandes (cmd.exe).
%COMPUTERNAME% Retourne le nom attribu l'ordinateur.
%DATE% Retourne la date actuelle.
Contient le code d'erreur de la dernire commande
%ERRORLEVEL%
utilise.
Contient la lettre de lecteur sur laquelle le rpertoire de
%HOMEDRIVE%
l'utilisateur courant est situ.
Contient le chemin d'accs complet au rpertoire de
%HOMEPATH%
l'utilisateur courant.
Contient le nombre de processeurs prsents sur le
%NUMBER_OF_PROCESSOR%
systme.
Contient une chane de caractres dcrivant le systme
%OS% d'exploitation install. Noter que Windows 2000 se
dclare comme tant WINDOWS_NT.
Spcifie le chemin d'accs vers les principaux
%PATH%
excutables du systme.

4
Dcrit les extensions que le systme considre comme
%PATHEXT%
excutables.
Dcrit l'architecture du processeur (x86 pour les
%PROCESSOR_ARCHITECTURE%
machines Intel, IA64 pour les architectures RISC).
Retourne un entier compris entre 0 et 32167 choisi
%RANDOM%
alatoirement par le systme.
Contient la lettre de lecteur sur laquelle le systme est
%SYSTEMDRIVE%
situ (gnralement C:).
Contient le chemin d'accs au rpertoire racine du
%SYSTEMROOT%
systme.
Contient le chemin d'accs du rpertoire temporaire
%TEMP%
pour les applications.
Contient le chemin d'accs du rpertoire temporaire
%TMP%
pour les applications.
%TIME% Retourne l'heure actuelle.
%USERDOMAIN% Contient le domain auquel appartient le compte courant.
Contient le nom d'utilisateur correspondant au compte
%USERNAME%
courant.
Contient l'emplacement du profil utilisateur du compte
%USERPROFILE%
courant.
Contient le chemin d'accs au rpertoire du systme
%WINDIR%
(gnralement C:\WINDOWS ou C:\WINNT).

Sous Windows, la commande set permet de crer, de modifier et d'afficher les variables
d'environnement. Nanmoins, les modifications interviennent uniquement dans la session en
cours.

Dcoupage d'une variable


L'intrt de dcouper une variable est d'extraire certaines parties afin de les retraites.
Prenons la variable d'environnement %ProgramFiles%
echo %ProgramFiles% donne C:\Program Files
Dsormais nous souhaitons conserver uniquement le lecteur "c:\"
echo %ProgramFiles:~0,3%
On observe que l'ajout du ":~" qui indique le dcoupage, les valeurs suivantes "0,3" indiquent
comment la dcouper. En effet le 0 indique que le dbut de la slection est le 0eme caractre,
le 3 indique qu'elle s'arrte au 3eme.
Exemple 5 :
rem dsactive l'affichage des commandes
echo off
rem remise blanc de l'cran
cls
echo variable de base date: %date%
rem dcoupage %date:~0,2%
rem 1er chiffre numro du caractre de dbut de la slection
rem 2eme chiffre nombre de caractres aprs le dbut
echo Nous sommes le %date:~0,2% le %date:~3,2%eme mois de l'anne %date:~6,4%

5
rem arrt
pause
Rsultat :

Calculs simple avec des variables


Grce aux batch il est possible de faire des oprations simples telle qu'une addition,
soustraction, multiplication ou encore division. Cela est possible avec la commande set /a.
Exemple 6 :
echo off
echo Addition
set /a add = 5+5
echo 5 + 5 = %add%
echo.
echo Soustraction
set /a sous = 10-5
echo 10 - 5 = %sous%
echo.
echo Division
set /a div = 10/2
echo 10 / 2 = %div%
echo.
echo Multiplication
set /a mult = 10*2
echo 10 * 2 = %mult%
pause
Rsultat :

6

Il est possible de donner des priorits aux oprations grce aux parenthses

TP 01: Script batch partie I (3h)


COMPTE RENDU
Nom : Prnom : Date :

Crez un rpertoire scripts, dans lequel vous rangerez vos scripts


Ex 1 : Crez un script Ex1 qui vous demande votre nom et votre prnom, et vous affiche 'vous
tes prnom nom'

ex 2 : Crez un script Ex2 qui lit deux variables a et b partie de clavier et qui calcule leur
somme et le met dans une variable S

3. Les tiquettes
Typiquement le script va excuter les commandes les une la suite des autres. Pour casser
tout a les tiquettes permettent d'accdes directement un endroit du script.
Exemple 1 :

8
echo off
cls
rem dfinition du point de retour
:boucle
echo salut
rem indique de retourner la :boucle
goto boucle
Rsultat :

4. Les paramtres (arguments)


La syntaxe est : votre_programme.bat mon_param1 mon_param2
Les variables %1, %2, ... %9 permettent de rcuprer les arguments, du premier au neuvime,
dans votre programme. A noter que %0 contient le nom de votre programme et %* permet
d'avoir l'ensemble des arguments.
Exemple 2 :
@echo off
echo Nom du programme : %0
echo Ensemble des arguments : %*
echo Argument 1 : %1
echo Argument 2 : %2
echo Argument 3 : %3
echo Argument 4 : %4
echo Argument 5 : %5
echo Argument 6 : %6
echo Argument 7 : %7
echo Argument 8 : %8
echo Argument 9 : %9
pause
Rsultat :

Si vous avez besoin d'utiliser plus de 9 arguments, vous pouvez utiliser la commande shift, qui
permet de faire un 'dcalage' sur les arguments (remplace %0 par %1, puis %1 par %2,
etc...)
5. Les Structures conditionnelles
If / else :

9
La signification de base d'une instruction "if" (si) est la suivante :
if (condition) (commande1) else (commande2)
Si la premire condition n'est pas remplie, le systme va excuter la ligne suivante dans le
fichier batch. La partie "Else" est facultative. Vous pouvez aussi utiliser la forme "if not" pour
tester si une condition est fausse. Notez que "if" teste vrai et faux dans le sens boolen.
Instructions spciales
- "if exist" utilise pour tester l'existence d'un fichier, suivie d'une commande. exemple :
if exist unFichier.ext del unFichier.ext
Vous pouvez galement utiliser un test la forme ngative :
if not exist unFichier.ext echo Pas de fichier
- "if defined" celle-ci est utilise pour tester l'existence d'une variable. Exemple :
if defined uneVariable uneCommande
Vous pouvez aussi utiliser la forme ngative : "if not defined".
Comparaison des oprateurs dans l'instruction "if"
iF "chane1" comparant "chane2" (action)

iF "chane1" comparant "chane2" (action1) else (action2)

Les comparants utilisables sont:


Oprateur Signification
EQU gal
NEQ diffrent de
LSS Plus petit que (Less Than)
LEQ Infrieur ou gal (Less or Equal)
GTR Plus grand que (Greater Than).
GEQ Suprieur ou gal (Greater or Equal)
L'ajout du paramtre /i permet d'ignorer la casse. Voici un exemple :
if /i chaine1 gtr chaine2 uneCommande
Il est possible de comparer des chanes de caractres ou bien des chiffres
Exemple 3 :
@echo off
rem Boucle avec un goto pour afficher les variables.
:continue
if "%1"=="" goto fin
echo %1
shift
goto continue
:fin
Rsultat :

10

6. La boucle for
L'instruction de base est de la forme :
for {chaque lment} in {un ensemble d'lments} do {commande}
Noter que les variables utilises ici, ne sont pas de la forme %a%, mais de la forme %%a.
for %%X in (ensemble) do (commande)
Les commutateurs utiliss avec FOR sont :
Commutateur Fonction
/D Indique que l'ensemble contient des rpertoires.
La commande est excute rcursivement dans les sous-rpertoires du
/R
rpertoire parent indiqu.
Boucle sur une commande en utilisant des paramtres de dbut, de fin et
/L
de pas indiqus dans l'ensemble.
/F Parcours des fichiers ou une sortie de commande de plusieurs manires.
Exemple 4 : compte rebours
@echo off
echo Dbut du compte rebours
for %%v in (5 4 3 2 1) do (
echo %%v
)
echo Fin du compte rebours
pause
Rsultat :

Boucle sur une srie de valeurs


Il est possible avec la commande for et le commutateur /l (L minuscule) de boucler sur une
srie de valeurs. Syntaxe :
for /l %%v in (initialisation, pas, fin) do commande
Exemple 5 : Afficher toutes les valeurs de 0 50
@echo off
Cls
echo Dbut daffichage
for /l %%v in (0, 1,50) do echo %%v
pause
Rsultat :

11

Utiliser les rpertoires
Si vous souhaitez utiliser les rpertoires, utilisez le commutateur /d. La syntaxe est :
for /d %%X in (ensembleDeRepertoires) do commande
Exemple 5 : afficher tous les rpertoires (pas les sous-rpertoires) prsents sur le disque "C:"
@echo off

Cls

echo Dbut daffichage

for /d %%X in (C:\*) do echo %%X


pause
Rsultat :

Parcourir rcursivement des sous-rpertoires


Si vous voulez appliquer une commande au rpertoire parent ainsi qu' ses sous-rpertoires,
utilisez le commutateur /r. La commande est alors de la forme :
for /r [repertoireParent] %%X in (ensemble) do commande
Exemple 5 : afficher le nombre de documents .docx dans le rpertoire C:\rep .
@echo off
Cls
echo afficher le nombre de documents .docx dans le rpertoire C:\rep
set v=0
FOR /r C:\rep %%i IN (*.docx) DO (set /a v=v+1)
echo le nombre de docx est %v%
pause
Rsultat :

Parcourir des fichiers, chanes et sorties de commandes


Cette version de la commande "for" vous permet d'examiner et de parcourir le texte de
fichiers, les chanes de caractres et les sorties de commandes. La syntaxe est :
for /f [options] %%X in (source) do commande
Les "options" reprsentent le critre de recherche dans le texte, et la "source" indique o le
texte doit tre cherch.

12
Exemple 5 :
@echo off

Cls

echo Pour chaque ligne du fichier afficher son contenu


FOR /f %%i IN (fich.txt) DO (
echo ligne %%i
)
pause
Rsultat :

13
TP 02 : Script batch partie II (3h)
COMPTE RENDU
Nom : Prnom : Date :

Ex 1 : Crer un script qui demande l'utilisateur de saisir une note et qui affiche un message
en fonction de cette note :
"trs bien" si la note est entre 16 et 20 ;
"bien" lorsqu'elle est entre 14 et 16 ;
"assez bien" si la note est entre 12 et 14 ;
"moyen" si la note est entre 10 et 12 ;
"insuffisant" si la note est infrieur 10.

Ex 2 : mme exercice mais qui accepte la note en paramtre

14
Ex 3 : Crer un script qui permet de calculer le factoriel dun entier n pass en paramtre

Ex 4 : Crer un script qui permet de calculer la somme des entiers de 1 100

15
III- Ordonnancement des processus
Objectif
L'objectif de ce TP est d'tudier un certain nombre d'algorithmes d'ordonnancement afin
de comprendre l'ordonnancement dans le systme d'exploitation.
Selon les politiques d'ordonnancement, des manipulations sont proposes l'aide de
logiciels de simulation.
Rappels
l'ordonnanceur (Scheduler ): Assure la distribution de l'UC aux diffrents processus.
Sans rquisition : le processus se termine compltement avant de rendre la main au
scheduler (non premption)
Avec rquisition : le scheduleur prend la main sur le processus. Cela entrane des
problmes dans le partage de ressources entre processus (premption).
Dispatcheur : Assure lors du changement de processus, la commutation de contexte, la
commutation en mode utilisateur, le branchement au bon emplacement dans le
programme utilisateur. Il doit tre le plus rapide possible (latence de dispatching).
Simulation des algorithmes de scheduling
L'analyse de certains algorithmes est illustre avec le programme Simor. Simor est un
simulateur graphique d'ordonnancement qu'il faut lancer partir de de la commande
java -jar Simor.jar
Prsentation du simulateur ''Simor''
Lancer le simulateur avec la commande prcdente et dcouvrez l'interface utilisateur.
La zone centrale de la partie haute de Simor permet de dfinir le nombre de processus dans la
simulation ainsi que le quantum pour le systme Tourniquet (Round Robin).

La zone basse dans la partie gauche permet de dfinir les paramtres des diffrents processus
crs : leur temps d'excution ncssaire et leur date d'arrive.

La zone droite du simulateur prsente le bouton principal permettant de lancer la simulation

pour toutes les politiques d'ordonnancement dfinies dans Simor.


L'cran de Simor prsente une barre d'onglets et 3 zones. Les rsultats de la simulation
s'affichent dans chacun des onglets de la barre d'onglets dans la partie suprieure du
simulateur. Divers graphiques de simulation et diffrentes valeurs sont proposes pour chaque
politique.

16
TP 03 : Ordonnancement des processus (3h)
COMPTE RENDU
Nom : Prnom : Date :

travail demande :
On considre lensemble de processus suivant :
processus Date darrive dure dexcution
A 0 9
B 1 6
C 3 2
D 5 3
E 7 2
Algorithme FCFS (FIFO) : First Come-First Served
1. Lancer la simulation et visualiser le rsultat dans l'onglet FCFS. Que se passe-t-il ?
Dans quel ordre sont lus les processus ?
2. Que se passe-t-il ? Que provoque le processus A d'une dure plus longue ?
3. Calculer le tma pour chaque processus .
4. Avantages et inconvnients de cet algorithme pour l'excution des processus ? Que
peut-on dire du temps moyen d'attente (tma) d'un processus pour accder au
processeur ?

Algorithme SJF : Shortest-Job-First (mode non premptif)


1. Lancer la simulation et analyser les rsultats de l'onglet SJF.
2. Que constatez-vous ? Comment fonctionne cet algorithme ?
3. Calculer le tma de chaque processus .
4. Avantages et inconvnients de cet algorithme pour l'excution des processus ? Que
peut-on dire du temps moyen d'attente d'un processus pour accder au processeur ?

17

Algorithme RR : scheduling du tourniquet, Round-Robin : Conu spcialement pour les


systmes en temps partag. Similaire au FCFS mais avec premption aprs une tranche de
temps (quantum) dexcution (gnralement entre 10 & 100 ms).
1. Lancer la simulation et observez l'excution des processus pour la politique
RR(quantum =3). Que se passe-t-il ?
2. Calculer le temps d'attente maximal pour chaque processus.
3. Recommencez le test en rglant le 'quantum ' 1 . Que constatez-vous ?
4. Calculer le tma pour chaque processus .
5. Recommencez le test en rglant le 'quantum ' 9. Que constatez-vous ?
6. A quel algorithme ressemble maintenant l'allocation du processeur ?
7. Quel est l'inconvnient du tourniquet et dans quelles conditions apparat-il?

18
TP 03 : Ordonnancement des processus (3h)
COMPTE RENDU
Nom : Prnom : Date :

travail demande :
On considre lensemble de processus suivant :
processus Date darrive Priorit dure dexcution
A 0 2 9
B 1 3 6
C 3 4 2
D 5 5 3
E 7 1 2
Algorithme avec priorit statique
On suppose quon utilise un algorithme dordonnancement du processeur bas sur la priorit
1. Lancer la simulation et visualiser le rsultat dans l'onglet Priorit. Que se passe-t-il ?
Dans quel ordre sont lus les processus ?
2. Calculer le tma pour chaque processus .
3. Avantages et inconvnients de cet algorithme pour l'excution des processus ? Que peut-
on dire du temps moyen d'attente (tma) d'un processus pour accder au processeur ?






















Algorithme avec priorit statique
On suppose quon utilise un algorithme dordonnancement du processeur bas sur la priorit,
Seulement on voudrait que la priorit des processus sera dynamique au cours du temps. Ainsi,
pour calculer la priorit dun processus, on utilise la formule suivante :

Remarque :
Lors des calculs, on arrondira par excs :exemples : 1.5 ou 1.6 cest arrondi 2, 1.4 arrondi 1
1. Tracer le diagramme de Gannt sachant que la priorit est calcul toutes les 4 units

19
2. Calculer le tma pour chaque processus .
3. Avantages et inconvnients de cet algorithme pour l'excution des processus ?

Algorithme SRT : Shortest-Remaining-Time first(mode premptif)

1. Lancer la simulation et analyser les rsultats de l'onglet SJF.


2. Que constatez-vous ? Comment fonctionne cet algorithme ?
3. Tracez Calculer le tma de chaque processus .
4. Avantages et inconvnients de cet algorithme pour l'excution des processus ?

20
Services Posix sur les fichiers

Les fichiers permettent de stocker des informations et de les rechercher ultrieurement. Les
systmes fournissent un ensemble d'appels systme relatifs aux fichiers. Dans le cas
d'Unix/Linux, les principaux appels systme Posix relatifs aux fichiers sont :

open() et creat() pour l'ouverture d'un chier.


close() pour la fermeture d'un chier.
read() pour la lecture d'un chier.
write() pour l'criture dans un chier.
lseek() pour dplacer le pointeur de chier.
stat() pour rcuprer des informations d'un chier.
link() pour crer un lien entre deux chiers.
unlink() pour supprimer un lien ou un chier.
Ouverture d'un fichier
#include <unistd.h>
#include <fcntl.h>
int open(char * filename, int mode);
int open(char *filename, int mode, int permission);
int creat(char * filename, int permission);
En cas de succs, open() retourne un descripteur du fichier. En cas d'chec, il retourne 0.
Chaque fichier ouvert a un pointeur qui pointe sur un lment du fichier. Ce pointeur sert
parcourir le fichier. A l'ouverture du fichier, le pointeur de fichier pointe sur le premier
lment du fichier, sauf si l'option O_APPEND a t spcifie. Les lectures et les critures se
font partir de la position courante du pointeur. Chaque lecture et chaque criture entranent
la modification de la position du pointeur.
L'appel systme creat()est de moins en moins utilise. Son usage est quivalent celui de :
open(char *filename, O_WRONLY|O_CREAT|O_TRUNC, int mode)

Le mode est une combinaison de plusieurs lments assembls par un OU logique. Il faut
utiliser de faon oblige l'une de trois constantes :

. O_RDONLY : fichier ouvert en lecture exclusive.

. O_WRONLY : fichier ouvert en criture exclusive.

. O_RDWR : fichier ouvert en lecture et en criture.

On peut ensuite utiliser d'autres constantes qui permettent de mieux prciser l'usage :

. O_CREAT : crer le fichier ouvert mme en lecture exclusive.

. O_EXCL : employ conjointement avec O_CREAT, cette constante garantit qu'on n'crasera
pas un fichier dj existant. L'ouverture choue si le fichier existe dj.

21
. O_TRUNC : utilise avec O_WRONLY ou avec O_RDWR, permet de ramener la taille d'un
fichier existant zro.

Fermeture des fichiers


L'appel systme close() permet de librer un descripteur de chier fd. Le fichier point par le
descripteur libr est ferm s'il n'a plus aucun descripteur associ au fichier.

int close (int fd);

Lecture d'un fichier

#include <unistd.h>

int read(int fd, char* buf, int count);

L'appel systme read() lit, partir de la position courante du pointeur, count octets au
maximum et les copie dans le tampon buf. En cas de succs, il retourne le nombre d'octets
rellement lus. L'appel systme read() retourne 0 si la fin de fichier est atteinte. Il retourne -1,
en cas d'erreur.

criture dans un fichier

#include <unistd.h>

int write(int fd, void* buf, int count);

L'appel systme write() copie count octets du tampon buf vers le fichier fd, partir de la
position pointe par le pointeur de fichier. En cas de succs, il retourne le nombre d'octets
rellement crits. Sinon, il renvoie -1.

Exemple 1 : Le programme suivant cre un fichier appel "fichier1.txt" dans lequel il copie
les donnes lues partir du clavier.

#include<unistd.h>
#include<fcntl.h>
#include<stdio.h>
main()
{

int fd, nbcar;


char buf[80];
//crer un fichier
fd=open("fichier1.txt",O_CREAT|O_RDWR);
if(fd==-1)
{
write(2,"erreur d'ouverture\n",25);
return -1;
}
write(2,"ouverture avec succes\n",30);
//while((nbcar=read(0,buf,80))>0)

22
int i;
for(i=0;i<80;i++)
buf[i]='b';
if(write(fd,buf,80)==-1) return -1;
return 0;
}

Les permissions
Les permissions sont utilises lors de la cration d'un fichier. Elles servent signaler les
autorisations d'accs au nouveau fichier cre. On peut les fournir en reprsentation octale
directement (prcdes d'un 0) ou bien on peut utiliser les constantes symboliques les plus
frquentes de la table

Ainsi si l'on utilise la combinaison :


"S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH" = 0644 = rw-r-ron

donne les droits de lecture tous et les droits de lecture et criture seulement au propritaire
du fichier.

Exemple : Cet appel systme cre, puis ouvre un fichier nomm archivo pour un accs en
lecture/criture. Le descripteur de chier est fd. Le code de protection du chier est 0600 ce
qui correspond (wr-----).

int fd;

fd = open("archivo", O_CREAT | O_RDWR, 0600);

Exemple : Cet appel systme ouvre le fichier archivo en mode criture et positionne le
pointeur la fin du fi chier. Les critures dans le fichier ajouteront donc des donnes la
fin de celui-ci.

int fd;

23
fd = open("archivo", O_WRONLY | O_APPEND);

Exemple 2 : modifier le programme de l'exemple 1 pour pouvoir crer le fichier avec un nom
pass en paramtre et avec les permissions de lecture et d'criture pour tout le monde .

#include<unistd.h>
#include<fcntl.h>
#include<stdio.h>
main(int argc, char* argv[])
{
int fd, nbcar;
char buf[80];
//crer un fichier
fd=open(........................,O_CREAT|O_RDWR,......................... );
if(fd==-1)
{
write(2,"erreur d'ouverture\n",25);
return -1;
}
write(2,"ouverture avec succes\n",30);
//while((nbcar=read(0,buf,80))>0)
int i;
for(i=0;i<80;i++)
buf[i]='b';
if(write(fd,buf,80)==-1) return -1;
return 0;
}

Exemple 3 : Le programme suivant, copie un fichier dans un autre.


#include<unistd.h>
#include<fcntl.h>
#include<stdio.h>

main()
{

int src,dst,in,out;
char buf[4096];
//ouvrir le fichier source
src=open("fich1.txt",O_RDWR);
if(src<0)
{
printf("erreur d'ouverture du fichier source \n");
return -1;
}
dst=open("fich2.txt",O_RDWR);
if(dst<0)
{

24
printf("erreur d'ouverture du fichier destination \n");
return -1;
}
while((in=read(src,buf,4096))>0)
{
out=write(dst,buf,in);
}
return 0;
}

Services Posix sur les rpertoires


Les rpertoires d'Unix/Linux possdent une entre par fichier. Chaque entre possde le nom du
fichier et le numro de l'i-nud. Le systme Unix/Linux offre des appels systme Posix pour
manipuler les rpertoires :

. mkdir() crer un rpertoire.


. rmdir() supprimer un rpertoire vide.
. opendir() ouvrir un rpertoire.
. closedir() fermer un rpertoire.
. readdir() lire les entres d'un rpertoire.
. rewindir() placer le pointeur d'un rpertoire.
. link() crer une entre dans un rpertoire.
. unlink() effacer une entre d'un rpertoire.
. chdir() changer de rpertoire de travail.
. rename() renommer un rpertoire.
. getcwd() obtenir le nom du rpertoire actuel.
Cration d'un rpertoire

#include <sys/types.h>
#include <dirent.h>
int mkdir(const char *name, mode_t mode);
Effacer un rpertoire
#include <sys/types.h>
int rmdir(const char *nom);

rmdir() efface le rpertoire s'il est vide. Si le rpertoire n'est pas vide, on ne l'efface pas.
Arguments : nom correspond au nom du rpertoire. Il retourne 0 ou -1 en cas d'erreur.

Ouverture d'un rpertoire

#include <sys/types.h>

#include <dirent.h>

DIR *opendir(char *nom);

25
opendir() ouvre un rpertoire comme une squence d'entres. Il met le pointeur au premier
lment. opendir() reoit comme argument nom qui est le nom du rpertoire. Il retourne un
pointeur du type DIR pour l'utiliser en readdir() ou closedir() ou bien NULL s'il a eu une
erreur.

Fermer un rpertoire

#include <sys/types.h>

#include <dirent.h>

int closedir(DIR *dirp);

L'appel systme closedir() ferme le lien entre dirp et la squence d'entres du rpertoire.
Arguments : dirp pointeur retourn par opendir(). Il retourne 0 ou -1 en cas d'erreur.

Lecture des entres du rpertoire

#include <sys/types.h>

#include <dirent.h>

struct dirent *readdir(DIR *dirp);

L'appel systme readdir() reoit comme arguments dirp qui est le pointeur retourn par
opendir(). Il retourne un pointeur un objet du type struct dirent qui reprsente une entre de
rpertoire ou NULL s'il y a eu erreur. Il retourne l'entre suivante du rpertoire associ dirp
et avance le pointeur l'entre suivante. La structure est dpendante de l'implantation. Pour
simplification, on peut assumer qu'on obtient un membre char *d_name.

Changer du rpertoire
int chdir(char *name);

chdir() modie le rpertoire actuel, partir duquel se forment les noms relatifs. Arguments :
name est le nom d'un rpertoire. Il retourne 0 ou -1 en cas d'erreur.

Renommer un rpertoire

#include <unistd.h>

int rename(char *old, char *new);

rename() change le nom du rpertoire old. Le nom nouveau est new. Arguments : old nom
d'un rpertoire existant, et new le nom nouveau du rpertoire. Il retourne 0 ou -1 en cas
d'erreur.

Exemple 3 : Parcours d'un rpertoire.

#include<stdio.h>
#include<sys/types.h>
#include<dirent.h>

26
main()
{
DIR * dirp;
struct dirent *dp;
char buf[256],rep[20];
//montrer le repertoire actuel
getcwd(buf,256);
printf("repertoire actuel : %s\n",buf);
//lecture du nom du repertoire ouvrir
printf("donner le nom du repertoire\n");
scanf("%s",rep);
//ouvrir le repertoire
dirp=opendir(rep);
if(dirp==NULL)
{
printf("impossible d'ouvrir %s\n",rep);
}
else
{
//lecture du contenu du repertoire
while((dp=readdir(dirp))!=NULL)
printf("%s\n",dp->d_name);
closedir(dirp);
}
return 0;
}

27
TP 03 : Gestion de fichiers (3h)
COMPTE RENDU
Nom : Prnom : Date :

Ex 1 :
Ecrire un programme qui permet de Copier un fichier texte dans un autre: crer un fichier
"essai.dat" sous lditeur. Tester le programme en vrifiant aprs excution la prsence du
fichier copi dans le directory.

28

29

Potrebbero piacerti anche