Unix Prog
Unix Prog
2024—2025
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Plan du cours
1 Système Unix
Introduction au système Unix
Commandes de base du Shell
Système de gestion de fichiers
2 Programmation Shell
Introduction à bash
Les scripts Shell
3 Filtre programmable awk
Introduction
Expressions régulières et commande egrep
Filtre programmable awk
4 La gestion des processus
Présentation des processus
Création de processus
Gestion des signaux
Communication entre processus
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
2/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Système Unix
Introduction au système Unix
1 Système Unix
Introduction au système Unix
Commandes de base du Shell
Système de gestion de fichiers
2 Programmation Shell
Introduction à bash
Les scripts Shell
3 Filtre programmable awk
Introduction
Expressions régulières et commande egrep
Filtre programmable awk
4 La gestion des processus
Présentation des processus
Création de processus
Gestion des signaux
Communication entre processus
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
3/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Système Unix
Introduction au système Unix
Système Unix
Unix est un système d’exploitation (Operating System)
Multi-utilisateurs : le système identifie des personnes logiques et permet à ces personnes d’utiliser le
système dans certaines limites
Multi-tâches : le système est étudié pour exécuter plusieurs programmes en même temps, grâce au concept
de ”temps partagé”
Multi-plateforme : Unix n’est pas un système dédié à un processeur, mais que c’est une famille de systèmes
que l’on retrouve sur une multitude de plates-formes.
Distributions Unix
Des Unix propriétaires :
Nom Propriétaire Processeur
Solaris Sun Sparc & Intel
HPUX HP PA
AIX IBM Risc & PowerPC
Digital Unix Digital Alpha
Des Unix libres
• Linux sur plate-forme Intel, Sparc, Alpha, Mac, …
• FreeBSD sur plate-forme Intel, Alpha, PC-98
• OpenBSD également multi-plate-forme
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
4/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Système Unix
Introduction au système Unix
Architecture et caractéristiques
On peut décomposer un système Unix en trois grandes entités :
Le noyau : il assure la gestion de la mémoire et des entrées sorties de bas niveau et l’enchaînement des tâches
Un ensemble d’utilitaires : dédiés à des tâches diverses :
• des interpréteurs de commande appelés Shells permettant de soumettre des tâches au système, tâches
pouvant être concurrentes et/ou communicantes
• des commandes de manipulation de fichiers (copie, déplacement, effacement, etc.)
Applications
CPU
Noyau
RAM
Drivers
Péréphiriques
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
5/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Système Unix
Introduction au système Unix
Logiciels propriétaires
Ces logiciels sont vendus et sont régis par une licence restrictive qui interdit aux utilisateurs de copier,
distribuer, modifier ou vendre le programme en question
Logiciels libres
Les logiciels libres sont les logiciels que l’ont peut librement utiliser, échanger, étudier et redistribuer. Cela
implique que l’on ait accès à leur code source (d’où le terme équivalent OpenSource)
i — la liberté d’exécution : tout le monde a le droit de lancer le programme, quel qu’en soit le but
ii — la liberté de modification : tout le monde a le droit d’étudier le programme et de le modifier, ce
qui implique un accès au code source
iii — la liberté de redistribution : tout le monde a le droit de rediffuser le programme, gratuitement
ou non
iv — la liberté d’amélioration : tout le monde a le droit de redistribuer une version modifiée du
programme
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
6/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Système Unix
Commandes de base du Shell
1 Système Unix
Introduction au système Unix
Commandes de base du Shell
Système de gestion de fichiers
2 Programmation Shell
Introduction à bash
Les scripts Shell
3 Filtre programmable awk
Introduction
Expressions régulières et commande egrep
Filtre programmable awk
4 La gestion des processus
Présentation des processus
Création de processus
Gestion des signaux
Communication entre processus
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
7/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Système Unix
Commandes de base du Shell
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
8/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Système Unix
Commandes de base du Shell
Méta-caractères du Shell
sont interprétés spécialement par le Shell avant de lancer la commande entrée par l’utilisateur
permettent de spécifier des ensembles de fichiers, sans avoir à rentrer tous leurs noms
Voici les plus utilisés :
*: remplacé par n’importe quelle suite de caractères
?: remplacé par un seul caractère quelconque
[ ] : remplacé par l’un des caractères mentionnés entre les crochets. On peut spécifier un intervalle avec
- : [a-z] spécifie donc l’ensemble des lettres minuscules
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
9/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Système Unix
Système de gestion de fichiers
1 Système Unix
Introduction au système Unix
Commandes de base du Shell
Système de gestion de fichiers
2 Programmation Shell
Introduction à bash
Les scripts Shell
3 Filtre programmable awk
Introduction
Expressions régulières et commande egrep
Filtre programmable awk
4 La gestion des processus
Présentation des processus
Création de processus
Gestion des signaux
Communication entre processus
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
10/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Système Unix
Système de gestion de fichiers
Concept de base
Le système de fichiers d’Unix est une vaste arborescence dont les nœuds sont des répertoires et les feuilles
des fichiers
Un fichier peut :
i — contenir des données
ii — être un lien sur un autre fichier
iii — être un moyen d’accès à un périphérique (mémoire, écran, disque dur, ...)
iv — être un canal de communication entre processus
Go.java types.h
fichier
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
11/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Système Unix
Système de gestion de fichiers
Les i-nœuds
À chaque fichier correspond un i-noœud contenant :
le type du fichier et les droits d’accès des différents utilisateurs
l’identification du propriétaire du fichier
la taille du fichier exprimée en nombre de caractères (pas de sens pour les fichiers spéciaux)
le nombre de liens physiques sur le fichier
la date de dernière modification/consultation (écriture/lecture) du fichier
la date de dernière modification du nœud (modification d’attributs)
l’identification de la ressource associée (pour les fichiers spéciaux)
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
12/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Système Unix
Système de gestion de fichiers
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
13/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Système Unix
Système de gestion de fichiers
Séparateur
/home/etudiant1/data/Fichier.txt
Chemin Nom
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
14/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Système Unix
Système de gestion de fichiers
fichier.txt Hello.c
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
15/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Système Unix
Système de gestion de fichiers
fichier.txt Hello.c
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
16/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Système Unix
Système de gestion de fichiers
fichier.txt Hello.c
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
17/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Système Unix
Système de gestion de fichiers
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
19/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Système Unix
Système de gestion de fichiers
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
20/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Système Unix
Système de gestion de fichiers
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
21/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Système Unix
Système de gestion de fichiers
Le super-utilisateur (root)
Il est toujours considéré par le système comme propriétaire de tous les fichiers (et des processus)
La personne qui gère le système est normalement la seule à connaître son mot de passe
Lui seul peut ajouter de nouveaux utilisateurs au système.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
22/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Système Unix
Système de gestion de fichiers
Notions de sécurité
Concept de base
sujet Utilisateur ou Processus qui veut exécuter une opération ;
objet Fichier sur lequel on veut exécuter une opération ; et enfin
opération Action que l’on veut exécuter.
Des règles de sécurité ont pour rôle d’indiquer les opérations (droits) qui seront autorisées pour un sujet
sur un objet
Le système a pour rôle de vérifier que le sujet a le droit d’exécuter l’opération sur l’objet.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
23/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Système Unix
Système de gestion de fichiers
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
24/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Système Unix
Système de gestion de fichiers
droits propriétaire
Propriétaire Groupe . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
25/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Système Unix
Système de gestion de fichiers
La commande chown
La commande chown permet de changer le propriétaire d’un fichier et/ou d’un répertoire et récursivement
ce qu’il contient
La syntaxe : chown [OPTION]…[OWNER][:[GROUP]] FILE…
La commande chgrp
La commande chgrp permet de changer le groupe d’un fichier et/ou d’un répertoire et récursivement ce
qu’il contient
La syntaxe : chgrp [OPTION]…[GROUP]] FILE…
Conditions : être le propriétaire du fichier et être membre du groupe auquel on veut donner le fichier
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
26/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Système Unix
Système de gestion de fichiers
La commande chmod
La commande chmod permet de changer les droits sur les fichiers
Syntaxe : chmod [options] mode fichier
options : -R : modifier récursivement les autorisations d’un répertoire et son contenu
Le mode permet de spécifier les droits :
• de manière symbolique (en utilisant les lettres r,w,x et les symboles +,-,=)
• de manière numérique (en octal — base 8)
Le mode est spécifié par : personne action droits
Personne
Action Droit
u : l’utilisateur propriétaire
+ : ajouter r : lecture
g : le groupe propriétaire
- : supprimer w : écriture
o : les autres
= : initialiser x : exécution
a : tous les utilisateurs
Exemple :
u+rwx : ajouter tous les droits au propriétaire
og-w : enlever le droit d’écriture aux autres
a=rx : donner le droit de lecture et exécution à tous (propriétaire, groupe et autres)
g=rwx : accorder tous les droits au groupe
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
27/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Système Unix
Système de gestion de fichiers
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
28/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Système Unix
Système de gestion de fichiers
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
29/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Système Unix
Système de gestion de fichiers
Mode numérique
1 chmod 750 RepertoireUn
2 chmod 664 fichierUn
3 chmod 764 fichierUn
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
30/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Système Unix
Système de gestion de fichiers
La commande umask
La commande umask
permet de spécifier des droits par défaut lors de la création des fichiers
utilise des masques sous forme numérique octale
sans paramètre : indique le masque courant
avec le masque en paramètre : modifie le masque courant
les droits obtenus sont le complémentaire de ceux indiqués par le masque
Exemple :
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
31/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Programmation Shell
Introduction à bash
1 Système Unix
Introduction au système Unix
Commandes de base du Shell
Système de gestion de fichiers
2 Programmation Shell
Introduction à bash
Les scripts Shell
3 Filtre programmable awk
Introduction
Expressions régulières et commande egrep
Filtre programmable awk
4 La gestion des processus
Présentation des processus
Création de processus
Gestion des signaux
Communication entre processus
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
32/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Programmation Shell
Introduction à bash
Variables d'environnement
Elles sont instanciées lorsqu’un Shell est exécuté par le système
Ce sont des variables dynamiques utilisées par les différents processus d’un système d’exploitation
Elles donnent des informations sur le système, la machine et l’utilisateur, entre autres
La commande set affiche à l’écran toutes les variables d’environnement pour le Shell
VARIABLE=VALEUR : donne une valeur à une variable
export VARIABLE : définit VARIABLE comme une variable d’environnement
echo $VARIABLE : affiche la valeur de la variable
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
34/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Programmation Shell
Introduction à bash
Pipe "|"
Brancher la sortie standard d’une commande à l’entrée standard d’une autre commande
Exemple : $ ls -l | sort -r (affiche le contenu du répertoire courant trié à l’envers)
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
35/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Programmation Shell
Introduction à bash
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
36/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Programmation Shell
Les scripts Shell
1 Système Unix
Introduction au système Unix
Commandes de base du Shell
Système de gestion de fichiers
2 Programmation Shell
Introduction à bash
Les scripts Shell
3 Filtre programmable awk
Introduction
Expressions régulières et commande egrep
Filtre programmable awk
4 La gestion des processus
Présentation des processus
Création de processus
Gestion des signaux
Communication entre processus
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
37/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Programmation Shell
Les scripts Shell
Scripts
Les scripts sont des programmes écrits dans un langage interprété, par exemple le langage du Shell
Un script peut être une simple liste de commandes
La première ligne du script doit préciser l’interpréteur utilisé, elle commence par les deux caractères #!,
suivis du chemin de l’interpréteur.
Exemple :
#!/bin/bash
# liste
echo "Contenu du repertoire courant"
ls -l
echo "-----------------------------"
La deuxième ligne est un commentaire
Le fichier contenant ces commandes doit être rendu exécutable : $ chmod u+x liste
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
38/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Programmation Shell
Les scripts Shell
Variables
Les variables du Shell sont des symboles auxquels on affecte des valeurs
Une variable est identifiée par son nom
Le contenu de la variable est identifié par le symbole $ placé devant le nom
Substitution: variables
Bash réalisera la substitution du contenu d’une variable lorsqu’il rencontre $ suivi d’un nom de variable
Deux comportements possibles :
• Substitution vide : La variable n’est pas définie ou la variable est définie mais son contenu est vide
• Substitution du contenu : La variable est définie et son contenu est non nul
Exemple 2 :
Exemple 1 :
$ MSG1="Jean est un "
$ MSG1="Jean est un "
$ MSG2="chien fort réputé"
$ MSG2="chien fort réputé"
$ METIER="dresseur de"
$ echo "$MSG1 $METIER $MSG2"
$ echo "$MSG1 $METIER $MSG2"
Jean est un chien fort réputé
Jean est un dresseur de chien fort réputé
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
39/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Programmation Shell
Les scripts Shell
Substitution: commandes
Bash est en mesure de substituer le résultat d’une ligne de commandes UNIX
Le symbole impliqué dans ce genre de substitution est l’accent grave ( ` )
Exemple :
$ echo pwd
pwd
$ echo `pwd`
/Users/Hicham/Desktop
$ echo "Mon répertoire de travail est: `pwd`"
Mon répertoire de travail est: /Users/Hicham/Desktop
Il est possible d’assigner le résultat d’une ligne de commande UNIX à une variable
Exemple :
$ REPERTOIRE=`pwd`
$ JESUIS=`who am i`
$ MACHINE=`hostname`
$ echo -e "Utilisateur: $JESUIS\n Répertoire de travail: $REPERTOIRE\n\
> Machine: $MACHINE"
Utilisateur: Hicham ttys000 Feb 24 22:46
Répertoire de travail: /Users/Hicham/Desktop
Machine: MacBookPro.local
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
40/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Programmation Shell
Les scripts Shell
Paramètres de Bash
Paramètres de position : $ cmd par1 par2 par3 par4
Dans un programme Bash, le contenu de ces paramètres de position est représenté par : $1, $2, $3 jusqu’à
$9
Le nom du fichier (cmd) est représenté par $0
Lecture et affichage
La commande read réalise la lecture à partir de l’entrée standard : $ read var1 var2 var3
Lecture de l’entrée standard et placer les données dans les variables var1, var2 et var3.
La séparation des données d’entrée en champs est réalisée par Bash à l’aide de la variable IFS (Internal Field
Separator)
Exemple : voici une-ligne de données (Il existe 4 champs)
La lecture est réalisée à partir de l’entrée standard
Les données lues sont placées dans trois variables (REPERTOIRE1, REPERTOIRE2 et REPERTOIRE3)
Le programme terminé son exécution par l’affichage des données lues
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
44/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Programmation Shell
Les scripts Shell
Test sur fichiers, répertoires et chaînes Test sur nombres et opérations logiques sur les
expressions
Expression vrai si :
-e fic fic existe Expression vrai si :
-d fic fic existe et est un répertoire n1 –eq n2 n1 = n2
-f fic fic existe et est un fichier « ordinaire» n1 -ne n2 n1 ≠ n2
-h fic fic existe et est un lien symbolique n1 -le n2 n1 ≤ n2
-s fic fic existe et est non vide n1 -ge n2 n1 ≥ n2
-r fic fic existe et est autorisé en lecture n1 -lt n2 n1 < n2
-w fic fic existe et est autorisé en écriture n1 -gt n2 n1 > n2
-x fic fic existe et est autorisé en exécution ! exp1 exp1 est fausse
ch1 = ch2 les deux chaînes sont identiques exp1 -a exp2 exp1 et exp2 vraies
ch1 != ch2 les deux chaînes sont différentes exp1 -o exp2 exp1 ou exp2 est vraie
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
45/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Programmation Shell
Les scripts Shell
Exemple 1 Exemple 2
#!/bin/bash #!/bin/bash
if [ -d toto ] ; then if ls toto > /dev/null 2>&1
echo "toto est un répertoire" then
elif [ -h toto ] ; then echo "le fichier toto existe"
echo "toto est un lien symbolique" else
else echo "le fichier toto n'existe pas"
echo "autre que répertoire ou lien" fi�
fi
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
46/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Programmation Shell
Les scripts Shell
SECRET_WORD="SMI"
echo "Votre nom ?"
read NAME
echo
echo "Bonjour $NAME. Devinez un mot."
echo -e "Vous avez le choix entre : SMA, SMI et SMP : \c"
read GUESS
if [ $GUESS=$SECRET_WORD ]
then
echo "Congratulations !"
fi
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
47/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Programmation Shell
Les scripts Shell
Exemple 1
#!/bin/bash
case $1 in
[Yy][eE][sS] | [oO][uU][iI]) echo "affirmatif" ;;
[Nn][oO] | [Nn][Oo][Nn]) echo "négatif" ;;
yesno) echo "décide-toi" ;;
*) echo "quelle réponse!" ;;
esac
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
48/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Programmation Shell
Les scripts Shell
case-esac : Exemple 2
#!/bin/bash
# traiter les options d'une commande ; utiliser case – esac pour traiter les options
if [ $# = 0 ]
then
echo "Usage : casesac –t –q –l NomFich"
exit 1
fi
for option
do
case "$option" in
-t) echo "option –t recu" ;;
-q) echo "option –q recu" ;;
-l) echo "option –l recu" ;;
[!-]*) if [ -f $option ]
then
echo "fichier $option trouve"
else
echo "fichier $option introuvable"
fi
;;
*) echo "option inconnue $option recontree"
esac
done . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
49/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Programmation Shell
Les scripts Shell
Boucle for-do-done
Syntaxe
for variable in liste-de-mots
do
liste-commandes
done
La variable prend successivement les valeurs de la liste de mots, et pour chaque valeur, liste-commandes
est exécutée
Exemple 1 Exemple 2
#!/bin/bash #!/bin/bash
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
50/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Programmation Shell
Les scripts Shell
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
51/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Programmation Shell
Les scripts Shell
L'instruction select-do-done
Syntaxe
select variable in liste-de-mots
do
liste-commandes
done
Permet à l’utilisateur de sélectionner une variable parmi une liste de mots. liste-commandes est exécutée
L’instruction select génère un menu à partir de liste-de-mots et demande à l’utilisateur de faire un
choix
Exemple 1 Exemple 2
#!/bin/bash #!/bin/bash
echo "Quel est votre OS préféré ?" PS3="Que voulez vous ? "
select var in "Linux" "Mac OS X" "Other" select ch in "1er" "2eme" "Abandon" ; do
do case $ch in
echo "Vous avez sélectionné $var" 1) echo "Cést du $ch choix" ;;
if [ "$var" = "Other" ] 2) echo "Que du $ch choix" ;;
then 3) echo "On abandonne ..." ; break ;;
break *) echo "Choix invalide" ;;
fi esac
done done
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
52/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Programmation Shell
Les scripts Shell
Boucle while-do-done
Syntaxe
while liste-commandes-1
do
liste-commandes-2
done
La valeur testée par la commande while est l’état de sortie de la dernière commande de
liste-commandes-1
Si l’état de sortie est 0, alors le Shell exécute liste-commandes-2 puis recommence la boucle
Exemple 1 Exemple 2
#!/bin/bash #!/bin/bash
echo -e "Devinez le mot secret : SMI, SMA, SMP : \c" compteur=5
read GUESS while [ $compt -ge 0 ]
while [ $GUESS != "SMI" ] do
do echo $compt
echo -e "Ce n\ést pas $GUESS, devinez : \c" compt=`expr $compt - 1`
read GUESS done
done
echo "Bravo"
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
53/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Programmation Shell
Les scripts Shell
Boucle until-do-done
Syntaxe
until liste-commandes-1
do
liste-commandes-2
done
Le Shell teste l’état de sortie de liste-commandes-1
Si l’état de sortie est 1, alors, liste-commandes-2 est exécutée puis la boucle est recommencée
Exemple 1 Exemple 2
#!/bin/bash #!/bin/bash
echo -e "Devinez le mot secret : SMI, SMA, SMP : \c" compt=5
read GUESS until [ $compt -lt 0 ]
until [ $GUESS = "SMI" ] do
do echo $compt
echo "Ce n\ést pas $GUESS, devinez encore : \c" compt=`expr $compt - 1`
read GUESS done
done
echo "Bravo."
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
54/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Programmation Shell
Les scripts Shell
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
55/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Programmation Shell
Les scripts Shell
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
56/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Programmation Shell
Les scripts Shell
Exemple 2 (getopts)
#!/bin/sh
while getopts l:q OPT
do
case "$OPT" in
l) OPTION="$OPT"
LOGARG="$OPTARG" ; echo "OPTION $OPT reçue; son argument est $LOGARG" ;;
q) OPTION="$OPT" ; echo "OPTION $OPT reçue" ;;
?) echo "Option invalide détectée"
echo "Usage: install [-l logfile -q] [nom_repertoire]"
exit 1 ;;
esac
echo "Valeur de \$OPTIND: $OPTIND"
done
# Chercher le paramètre nom_repertoire
shift `expr $OPTIND - 1`
if [ "$1" ]
then
REPERTOIRE="$1"
echo "Répertoire d'installation: $REPERTOIRE"
fi
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
59/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Programmation Shell
Les scripts Shell
Exemple
#!/bin/sh
# settest : montrer l'utilisation des options de set pour le débogage
# Utiliser l'option –v (affiche les commandes et leur argument)
set -x
pwd
ls -l
echo `who`
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
60/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Filtre programmable awk
Introduction
1 Système Unix
Introduction au système Unix
Commandes de base du Shell
Système de gestion de fichiers
2 Programmation Shell
Introduction à bash
Les scripts Shell
3 Filtre programmable awk
Introduction
Expressions régulières et commande egrep
Filtre programmable awk
4 La gestion des processus
Présentation des processus
Création de processus
Gestion des signaux
Communication entre processus
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
61/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Filtre programmable awk
Introduction
Les filtres
Programmes qui :
• lisent une entrée
• effectuent une transformation
• écrivent un résultat (sur la sortie standard)
grep, egrep, fgrep : recherche d’une expression dans des fichiers
diff, cmp, uniq, tr, dd … : outils de comparaison, conversion de fichiers
sed : éditeur de flots
awk : outil programmable de transformation de texte
Ces outils utilisent les ”expressions régulières”
Expressions régulières
Moyen algébrique pour représenter un langage régulier
Les expressions regulières (regexp)
• permettent de décrire une famille de chaînes de caractères
• au moyen de métacaractères
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
62/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Filtre programmable awk
Expressions régulières et commande egrep
1 Système Unix
Introduction au système Unix
Commandes de base du Shell
Système de gestion de fichiers
2 Programmation Shell
Introduction à bash
Les scripts Shell
3 Filtre programmable awk
Introduction
Expressions régulières et commande egrep
Filtre programmable awk
4 La gestion des processus
Présentation des processus
Création de processus
Gestion des signaux
Communication entre processus
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
63/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Filtre programmable awk
Expressions régulières et commande egrep
Expression régulières
un ”caractère simple” ”matche” avec lui-même :
— a matche avec a
— 6 matche avec 6
Exemples
v.+ : Les chaînes contenant un v suivi de n’importe quelle suite de caractères
• vandalisme
• vestiaire
• lavage
[vs].+ : Les chaînes contenant un 'v' ou un 's' suivi de n’importe quelle suite de caractères
• vandalisme
• voiture
• descendre
• sandales
[ps].*a.*a : Les chaînes contenant un 'p' ou un 's' suivi d’une sous chaîne contenant deux 'a'
• sandales
• pascale
• apprentissage automatique
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
65/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Filtre programmable awk
Expressions régulières et commande egrep
Commande egrep
Recherche dans des fichiers
• D’une chaîne ou d’une sous chaîne de caractères
• Simplement d’un mot
• D’une chaîne formalisée par une expression régulière
Utilisation : egrep [options] <chaîne recherchée> <fichier>
Résultat
• Lignes du fichier contenant ce qui est recherché
• Ou autre résultat, suivant les options utilisées
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
66/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Filtre programmable awk
Expressions régulières et commande egrep
crepetna:Crepet, Nathalie:CREN1807750:92:87:88:54:70
yosnheat:Yos Nhean, Trakal:YOST19087603:84:73:70:50:73
benelaur:Benel, Aurelien:BENA80207700:84:73:89:45:100
soucypas:Soucy, Pascal:SOUP14067502:95:90:89:87:99
On peut extraire les lignes qui contiennent une note comprise entre 90 et 99 : $ egrep :9 notes.txt
Comment faire pour extraire les lignes où la dernière note est comprise entre 90 et 99 ?
Solution : Utiliser une expression régulière : $ egrep :.*:.*:.*:.*:.*:.*:9 notes.txt
:.*:.*:.*:.*:.*:.*:9 représente une chaîne avec 7 ':' entre lesquels on peut avoir n’importe quoi et dont le
dernier ’:’ est suivi d’un 9
Autre solution : $ egrep \(:.*\)\{6\}:9 notes.txt
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
67/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Filtre programmable awk
Filtre programmable awk
1 Système Unix
Introduction au système Unix
Commandes de base du Shell
Système de gestion de fichiers
2 Programmation Shell
Introduction à bash
Les scripts Shell
3 Filtre programmable awk
Introduction
Expressions régulières et commande egrep
Filtre programmable awk
4 La gestion des processus
Présentation des processus
Création de processus
Gestion des signaux
Communication entre processus
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
68/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Filtre programmable awk
Filtre programmable awk
Langage awk
awk : developpé par Alfred Aho, Peter Weinberger & Brian Kernighan
Il s’agit d’un programme UNIX capable d’interpréter un programme utilisateur
Le programme doit être écrit en utilisant les instructions légales et selon le format de awk. (voir la page de
manuel : man awk)
Le concept de programmation est appelé ”piloté par données” (data-driven)
On peut utiliser le awk pour :
• récuperer de l’information ;
• générer des rapports ;
• transformer des données…
Invocation d'awk
Le synopsis de awk : awk [-Fc] [-f prog | 'prog' ] [-v var=valeur…] [fich1 fich2 …]
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
70/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Filtre programmable awk
Filtre programmable awk
Principe de fonctionnement
Programme composé
Données
d'une séquence "motif—action"
motif — action
motif — action
motif — action
awk
motif — action
motif — action
motif — action
: — :
: — :
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
71/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Filtre programmable awk
Filtre programmable awk
Principe :
Initialisation (BEGIN) : effectuer action0
Corps : pour chaque ligne du texte entré
• si motif1 est vérifiée effectuer action1
• si motif2 est vérifiée effectuer action2
• etc …
Terminaison (END) : effectuer actionF
Remarques :
— motif omis : action toujours effectuée
— action omise : affichage de la ligne
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
72/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Filtre programmable awk
Filtre programmable awk
Remarque : La variable FS peut aussi être initialisée lors de l’appel de awk via l’option : -Fc : le séparateur de
champs prend la valeur du caractère c
Exemple 1
Voici un premier exemple. Le programme awk est spécifié directement entre apostrophes
$ awk 'BEGIN {print "Premier programme awk"}\
> {print $0}\
> END {print "Fin du programme awk"}' data.txt
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
73/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Filtre programmable awk
Filtre programmable awk
Les actions
Elles décrivent les opérations à effectuer lorsque le motif décrit en tête de requête est vérifié
Syntaxe similaire à celle du langage C
On trouvera aussi un ensemble de fonctions spécifiques
Fonctions utilisateur
L’utilisateur peut définir ses propres fonctions
Ces fonctions peuvent se trouver n’importe où dans le corps du programme awk
La déclaration d’une fonction se fait de la façon suivante :
function nom_fonction (arguments) {
instructions
}
La fonction peut être appelée dans n’importe quel bloc action d’une requête awk
Exemples
function minimum (n,m) {
return (m < n ? m : n)
}
function factoriel (num) {
if (num == 0) return 1
return (num * factoriel(num - 1))
}
$1 ~ /^Factoriel$/ { print factoriel($2) }
$1 ~ /^Minimum$/ { print minimum($2, $3) }
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
76/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Filtre programmable awk
Filtre programmable awk
Instruction "break" : provoque la sortie du niveau courant d’une boucle "while" ou "for".
Instruction "continue" : provoque l’itération suivante au niveau courant d’une boucle "while" ou "for".
Instruction "next" : force ”awk” à passer à la ligne suivante du fichier en entrée.
Instruction "exit" : force ”awk” à interrompre la lecture du fichier d’entrée comme si la fin avait été
atteinte.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
77/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Filtre programmable awk
Filtre programmable awk
if ($3 == foo*5) {
a = $6 % 2;
print $5, $6, "total", a;
b = 0;
}
else {
next
}
while ( i <= NF) {
print $i;
i ++;
}
for (i=1; ( i<= NF) && ( i <= 10); i++) {
if ( i < 0 ) break;
if ( i == 5) continue;
print $i;
}
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
78/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Filtre programmable awk
Filtre programmable awk
Exemples
Exemple 1 :
BEGIN {printf("%10s %6s %5s %s\n", "Pays","Superf","Pop","Cont")}
{ printf ("%10s %6s %5s %s\n", $1, $2, $3, $4)
superf = superf + $2
pop = pop + $3
}
END { printf("\n %10s %6s %5s\n", "TOTAL", superf, pop)}
Exemple 2 :
{ if (maxpop < $3) {
maxpop = $3
pays = $1
}
}
END { print "Pays : " pays "/Max-Pop: " maxpop }
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
79/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Filtre programmable awk
Filtre programmable awk
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
80/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
Filtre programmable awk
Filtre programmable awk
#!/bin/sh
# Programme utilisant awk pour compter le nombre d'apparitions des mots dans un texte
awk '
# A la fin du programme afficher le resultat en ordre decroissant numerique
END {
for (mot in compte) {
print compte[mot], mot
total += compte[mot]
}
print "Nombre total des mots : " total
}
{
gsub(/[.,:;!?(){}]/,"") # elimine la ponctuation
for (i=1; i<=NF; i++) # placer les mots trouves dans un
compte[$i]++ # tableau associatif
}
' lignes.tmp | sort -nr
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
81/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
La gestion des processus
Présentation des processus
1 Système Unix
Introduction au système Unix
Commandes de base du Shell
Système de gestion de fichiers
2 Programmation Shell
Introduction à bash
Les scripts Shell
3 Filtre programmable awk
Introduction
Expressions régulières et commande egrep
Filtre programmable awk
4 La gestion des processus
Présentation des processus
Création de processus
Gestion des signaux
Communication entre processus
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
82/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
La gestion des processus
Présentation des processus
Notion de processus
Sous Unix, toute tâche qui est en cours d’exécution est représentée par un processus : fichier exécutable ou
script Shell, Perl)
Un processus est une entité comportant à la fois des données et du code
À un instant donné, un processus peut se trouver dans divers états
Chaque processus possède un numéro de processus (PID)
normal or abnormal
termination
running done
selected
to run I/O request
process created
quantum
expired
new ready blocked
I/O complete
La commande ps
ps x : liste des processus en cours d’exécution, ainsi que leur PID
ps –aux : ensemble des processus du système en cours d’execution
ps –fx : ensemble des attributs de ses propres processus
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
83/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
La gestion des processus
Création de processus
1 Système Unix
Introduction au système Unix
Commandes de base du Shell
Système de gestion de fichiers
2 Programmation Shell
Introduction à bash
Les scripts Shell
3 Filtre programmable awk
Introduction
Expressions régulières et commande egrep
Filtre programmable awk
4 La gestion des processus
Présentation des processus
Création de processus
Gestion des signaux
Communication entre processus
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
84/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
La gestion des processus
Création de processus
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
86/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
La gestion des processus
Création de processus
Fils se terminant avant son père Père se terminant avant son fils
fork()
fork()
père fils
père fils
status
status process init
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
88/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
La gestion des processus
Création de processus
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
89/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
La gestion des processus
Création de processus
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
91/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
La gestion des processus
Création de processus
Exemple 1
Lorsqu’il exécute le execl, il est remplacé par l’exécution du "ls -l"
#include <stdio.h>
#include <unistd.h>
int main(void){
execl("/bin/ls","ls","-l",NULL) ;
printf("cette phrase ne sera jamais affichée\n");
return 0;
}
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
92/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
La gestion des processus
Création de processus
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/wait.h>
int main() {
int r, status, w;
r=fork();
if(r==0) {
execl("/bin/ls","ls","-a",NULL);
printf("Exécution de la commande ls -a\n");
}
else {
printf("Attente du fils \n");
w=wait(&status);
printf(" /* \t w:%d s:%d */ \n ",w, status);
}
return 0;
}
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
93/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
La gestion des processus
Création de processus
Lorsqu’un processus fils est terminé, celui-ci sera retiré de la table des processus si :
• Le père acquitte la fin du processus fils par un appel à la fonction :
int wait(int *code_de_sortie);
• Le père ignore la fin des processus fils par un appel à la fonction :
signal (SIGCHLD,SIG_IGN);
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
94/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
La gestion des processus
Gestion des signaux
1 Système Unix
Introduction au système Unix
Commandes de base du Shell
Système de gestion de fichiers
2 Programmation Shell
Introduction à bash
Les scripts Shell
3 Filtre programmable awk
Introduction
Expressions régulières et commande egrep
Filtre programmable awk
4 La gestion des processus
Présentation des processus
Création de processus
Gestion des signaux
Communication entre processus
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
95/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
La gestion des processus
Gestion des signaux
Processus : Comportement
Un processus peut détourner les signaux reçus et modifier son comportement
par l’appel de la fonction :
void (*signal(int signal, void (*fonction)(int)))
le deuxième argument pouvant prendre les valeurs :
Nom Action
SIG_IGN le processus ignorera l’interruption correspondante
SIG_DFL le processus rétablira son comportement par défaut lors de l’arrivée de
l’interruption (la terminaison)
void fonction (int n) Le processus exécutera "fonction", définie par l’utilisateur, à l’arrivée de
l’interruption n. Il reprendra ensuite au point où il a été interrompu
Exemple
#include <stdio.h>
#include <sys/signal.h>
void detourne (int num_signal) {
printf ("signal num %d\n",num_signal) ;
}
void main () {
signal (SIGINT,detourne) ;
while (1) sleep(10);
. . . . . . . . . . . . . . . . . . . .
} . . . . . . . . . . . . . . . . . . . .
97/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
La gestion des processus
Communication entre processus
1 Système Unix
Introduction au système Unix
Commandes de base du Shell
Système de gestion de fichiers
2 Programmation Shell
Introduction à bash
Les scripts Shell
3 Filtre programmable awk
Introduction
Expressions régulières et commande egrep
Filtre programmable awk
4 La gestion des processus
Présentation des processus
Création de processus
Gestion des signaux
Communication entre processus
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
98/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
La gestion des processus
Communication entre processus
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
99/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
La gestion des processus
Communication entre processus
Communication par tube anonyme : Exemple… Communication par tube anonyme : Exemple (suite)
#include <stdio.h> if (pid_fils == 0) { /* fils */
#include <unistd.h> if (( n = read (tubeDesc[0],buffer,
#include <stdlib.h> S_BUF)) == -1) {
#include <sys/types.h> perror ("read"); exit (1);
#include <sys/wait.h> }
#define S_BUF 100 else {
int main (int argc, char ** argv) { buffer[n] = '\0';
int tubeDesc[2]; printf ("%s\n", buffer);
char buffer[S_BUF]; }
int n; pid_t pid_fils; exit (0);
if (pipe (tubeDesc) == -1) { }
perror ("pipe"); else { /* père */
exit (1); if ( write (tubeDesc[1],"Bonjour",
} 7)== -1) {
if ( (pid_fils = fork() ) == -1 ) { perror ("read"); exit (1);
perror ("fork"); }
exit (1); wait (NULL);
} }
return (EXIT_SUCCESS);
}
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
100/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
La gestion des processus
Communication entre processus
Ouverture/Lecture/Ecriture/Fermeture
• int open (char *file, int mode, int droits)
• int read (int desc, char *buf, int nb)
• int write (int desc, char *buf, int nb)
• void close (desc)
Exemple 1
Terminal 2 Terminal 1
$ mkfifo pipe1
$ cat < pipe1
$ cat > pipe1
Test
Test
pipe1
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
101/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes
Programmation des Systèmes
La gestion des processus
Communication entre processus
Communication par tube nommé : Exemple… Communication par tube nommé : Exemple (suite)
#include <stdio.h> #include <stdio.h>
#include <unistd.h> #include <unistd.h>
#include <stdlib.h> #include <stdlib.h>
#include <sys/types.h> #include <sys/types.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <fcntl.h> #include <fcntl.h>
#define S_BUF 100 #define S_BUF 100
int n ; char buffer[S_BUF]; int n ; char buffer[S_BUF];
int main (int argc, char ** argv) { int main (int argc, char ** argv) {
int fd_write; int fd_read;
if (mkfifo(argv[1],S_IRUSR|S_IWUSR)==-1){ if ((fd_read=open(argv[1],O_RDONLY))==-1){
perror ("mkfifo"); exit (1); perror ("open"); exit (1);}
} if ((n=read(fd_read,buffer,S_BUF))==-1){
if ((fd_write=open(argv[1],O_WRONLY))==-1){ perror ("read"); exit (1);}
perror ("open"); exit (1); else {
} buffer[n] = '\0';
if ((n= write(fd_write,"Bonjour",7))==-1){ printf ("%\n",buffer);
perror ("write"); exit (1); }
} close (fd_read);
close (fd_write); return EXIT_SUCCESS;
return EXIT_SUCCESS; }
}
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
102/102 Pr. Hicham Laanaya — [email protected] Programmation des Systèmes