1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D....

26
1 GPA435 Systèmes GPA435 Systèmes d’exploitation et d’exploitation et programmation de programmation de système système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Exemples de programmation Bourne shell et nawk(1) U n ive rs ité d u Q uébec É co le d e te c h n o lo g ie s u p érieu re D é partem e n t de génie de la p ro du ctio n a u to m a tisée

Transcript of 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D....

Page 1: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Exemples de programmation Bourne shell et nawk(1)

1

GPA435 Systèmes GPA435 Systèmes d’exploitation et d’exploitation et programmation de programmation de systèmesystème

Copyright, 2000 © Tony Wong, Ph.D.

Chapitre 9Exemples de programmation

Bourne shellet

nawk(1)

Université du Québec

École de technologie supérieureDépartem ent de génie de la production autom atisée

Page 2: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Exemples de programmation Bourne shell et nawk(1)

2

Exemples de Exemples de programmation (1)programmation (1)Extraction des en-têtes de courrielExtraction des en-têtes de courriel

Les courriels sont enregistrés dans le fichier Les courriels sont enregistrés dans le fichier /var/mail/$USER/var/mail/$USER..

Les courriels est séparé par une ligne blanche.Les courriels est séparé par une ligne blanche.

Nous allons créer un petit programme Bourne Nous allons créer un petit programme Bourne shell afin de montrer les subtilités de sa shell afin de montrer les subtilités de sa programmation.programmation.

Système d’exploitation UNIX

Page 3: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Exemples de programmation Bourne shell et nawk(1)

3

Exemples de programmation Exemples de programmation (2)(2)

Système d’exploitation UNIX

OrdinogrammeOrdinogramme

Nous utiliserons Nous utiliserons grep(1)grep(1) et et expr(1)expr(1) pour extraire le pour extraire le champ Content-champ Content-Length:Length:

L’en-tête et le corps L’en-tête et le corps d’un courriel sont d’un courriel sont séparés par une ligne séparés par une ligne blanche. Chaque en-blanche. Chaque en-tête est enregistré dans tête est enregistré dans un fichier temporaireun fichier temporaireNous ferons un Nous ferons un bouclage pour passer bouclage pour passer « par dessus » le corps « par dessus » le corps du courrieldu courriel

D ébut

F in

Extraire l'en-tête

Extraire le cham pContent-Length:

Lire le nom bre decaractères indiqués par

Content-Length:

F in du fichier ?

Oui

Non

Page 4: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Exemples de programmation Bourne shell et nawk(1)

4

Exemples de programmation Exemples de programmation (3)(3)

Système d’exploitation UNIX

Chaque en-tête est enregistré dans un Chaque en-tête est enregistré dans un fichier temporaire. Pour la longueur fichier temporaire. Pour la longueur du corps du courriel:du corps du courriel:LONGUEUR=`egrep 'Content-Length:' entetes${COMPTEUR}.tmp`LONGUEUR=`egrep 'Content-Length:' entetes${COMPTEUR}.tmp`

LONGUEUR=`expr "$LONGUEUR" : 'Content-Length: \(.*\)'`LONGUEUR=`expr "$LONGUEUR" : 'Content-Length: \(.*\)'`

Variable qui contiendra Variable qui contiendra la longueur du corpsla longueur du corps

Trouver la ligne désirée Trouver la ligne désirée dans le corpsdans le corps

Extraire la valeur Extraire la valeur située après le mot située après le mot

clé clé Content-Content-Length:Length:

Page 5: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Exemples de programmation Bourne shell et nawk(1)

5

Exemples de Exemples de programmation (4)programmation (4)Pour passer au prochain en-tête. Il Pour passer au prochain en-tête. Il

faut lire le nombre de caractères faut lire le nombre de caractères donnés par la valeur de Content-donnés par la valeur de Content-Length:Length:read DUMMYread DUMMY

:: :: : :

CAR_LU=`/usr/ucb/expr length "$DUMMY"`CAR_LU=`/usr/ucb/expr length "$DUMMY"`

TOTAL=`expr "$TOTAL" + "$CAR_LU"`TOTAL=`expr "$TOTAL" + "$CAR_LU"`

TOTAL=`expr "$TOTAL" + 1`TOTAL=`expr "$TOTAL" + 1`

Système d’exploitation UNIX

Lire une ligne du fichier Lire une ligne du fichier d’entrée et faire la somme d’entrée et faire la somme des caractères lus.des caractères lus.

N’oublier pas de compter le N’oublier pas de compter le caractère Entercaractère Enter

Page 6: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Exemples de programmation Bourne shell et nawk(1)

6

Exemples de Exemples de programmation (5)programmation (5)Attention! Par défaut la commande Attention! Par défaut la commande read(1)read(1) utilise utilise

les caractères Espace, Tab et Enter comme les caractères Espace, Tab et Enter comme séparateur de champs.séparateur de champs.

La commande La commande read(1)read(1) ne conserve qu’une seule ne conserve qu’une seule copie des séparateurs dans une ligne lue. Ainsi,copie des séparateurs dans une ligne lue. Ainsi,

cette ligne contient des espacescette ligne contient des espaces

cette ligne contient des espacescette ligne contient des espaces

Système d’exploitation UNIX

Ligne originale dans le Ligne originale dans le fichier d’entréefichier d’entrée

Ligne lue par Ligne lue par read(1)read(1). . Donc, il y pertes de Donc, il y pertes de

caractères !!!!caractères !!!!

Page 7: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Exemples de programmation Bourne shell et nawk(1)

7

Exemples de Exemples de programmation (6)programmation (6)

Système d’exploitation UNIX

Solution pour ce problème ?Solution pour ce problème ?Régler la variable globale Bourne shell IFS (Régler la variable globale Bourne shell IFS (Internal Field Internal Field

SeparatorSeparator).).

Normalement la variable IFS est réglée à Espace, Tab et Normalement la variable IFS est réglée à Espace, Tab et Enter.Enter.

Il nous faut régler IFS à Enter seulement. Voici comment:Il nous faut régler IFS à Enter seulement. Voici comment:

IFS="IFS="

""

Oui. Il faut taper la touche Enter avant Oui. Il faut taper la touche Enter avant de fermer les guillemetsde fermer les guillemets

Page 8: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Exemples de programmation Bourne shell et nawk(1)

8

Système d’exploitation UNIX#!/bin/sh#!/bin/sh

# ex_entete# ex_entete

# Programme pour extraire l'en-tete des courriels.# Programme pour extraire l'en-tete des courriels.

##

# Fonction Bourne shell pour montrer l'usage de ce programme# Fonction Bourne shell pour montrer l'usage de ce programme

##

usage () {usage () {

echo "\nex_entete [-hkn] courriers\n"echo "\nex_entete [-hkn] courriers\n"

echo "-h = cet affichage"echo "-h = cet affichage"

echo "-k = garder les en-tetes dans des fichiers distincts"echo "-k = garder les en-tetes dans des fichiers distincts"

echo " portant les noms entetes1.tmp, entetes2.tmp ..."echo " portant les noms entetes1.tmp, entetes2.tmp ..."

echo "-n = pas d'affichage a la sortie standard"echo "-n = pas d'affichage a la sortie standard"

echo "courriers = fichier contenant les courriels a traiter\n"echo "courriers = fichier contenant les courriels a traiter\n"

echo "Par defaut, les en-tetes sont affiches a la sortie"echo "Par defaut, les en-tetes sont affiches a la sortie"

echo "standard separes par more(1)\n"echo "standard separes par more(1)\n"

exit 1exit 1

}}

L’usage du programme est affichéL’usage du programme est affichépar une fonction Bourne shellpar une fonction Bourne shell

Page 9: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Exemples de programmation Bourne shell et nawk(1)

9

Système d’exploitation UNIX##

# S'il y a pas d'options donnees a la ligne de commande...# S'il y a pas d'options donnees a la ligne de commande...

# #

[ $# -gt 0 ] || usage[ $# -gt 0 ] || usage

##

# Aller chercher les options de la ligne de commande ...# Aller chercher les options de la ligne de commande ...

##

while getopts hkn OPTIONwhile getopts hkn OPTION

dodo

case "$OPTION" incase "$OPTION" in

h | \?) usage ;;h | \?) usage ;;

k) GARDE=OUI ;;k) GARDE=OUI ;;

n) PAS_SORTIE=OUI ;;n) PAS_SORTIE=OUI ;;

esacesac

donedone

##

# Aller chercher le fichier contenant les courriels ...# Aller chercher le fichier contenant les courriels ...

##

shift `expr "$OPTIND" - 1`shift `expr "$OPTIND" - 1`

[ -z "$1" ] && usage # pas de fichier donne a la ligne de commande[ -z "$1" ] && usage # pas de fichier donne a la ligne de commande

Détection des options Détection des options données sur la ligne de données sur la ligne de commande.commande.

Page 10: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Exemples de programmation Bourne shell et nawk(1)

10

Système d’exploitation UNIX### Quelques variables globales ...# Quelques variables globales ...##CONTINUE=VRAICONTINUE=VRAICOMPTEUR=1COMPTEUR=1

# C'est tres important! Il faut regler IFS (separateur de champs pour# C'est tres important! Il faut regler IFS (separateur de champs pour# la commande read(1)) avec le caractere Enter. Sinon, read(1) va# la commande read(1)) avec le caractere Enter. Sinon, read(1) va# ignorer les caracters Espace et Tab. Dans le corps d'un courriel,# ignorer les caracters Espace et Tab. Dans le corps d'un courriel,# Espace et Tab sont comptes !!!# Espace et Tab sont comptes !!!IFS="IFS="""

while [ "$CONTINUE" = VRAI ]while [ "$CONTINUE" = VRAI ]dodo read LIGNE || exit 0read LIGNE || exit 0 # detecter la ligne blanche qui delimite l'en-tete# detecter la ligne blanche qui delimite l'en-tete if [ -z "$LIGNE" ]if [ -z "$LIGNE" ] thenthen ## # Obtenir la longueur du courriel# Obtenir la longueur du courriel ## LONGUEUR=`egrep 'Content-Length:' entetes${COMPTEUR}.tmp`LONGUEUR=`egrep 'Content-Length:' entetes${COMPTEUR}.tmp` LONGUEUR=`expr "$LONGUEUR" : 'Content-Length: \(.*\)'`LONGUEUR=`expr "$LONGUEUR" : 'Content-Length: \(.*\)'`

[ -z "$PAS_SORTIE" ] && more -w < entetes${COMPTEUR}.tmp[ -z "$PAS_SORTIE" ] && more -w < entetes${COMPTEUR}.tmp [ -z "$GARDE" ] && /bin/rm -f entetes${COMPTEUR}.tmp[ -z "$GARDE" ] && /bin/rm -f entetes${COMPTEUR}.tmp

COMPTEUR=`expr "$COMPTEUR" + 1`COMPTEUR=`expr "$COMPTEUR" + 1`

N’oubliez pas de régler N’oubliez pas de régler correctement la variable Bourne correctement la variable Bourne shell IFSshell IFS

OK. L ’en-tête est terminé. Aller OK. L ’en-tête est terminé. Aller chercher la longueur du corps ...chercher la longueur du corps ...

Page 11: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Exemples de programmation Bourne shell et nawk(1)

11

Système d’exploitation UNIX TOTAL=0TOTAL=0 while [ "$TOTAL" -lt "$LONGUEUR" ]while [ "$TOTAL" -lt "$LONGUEUR" ] dodo read DUMMYread DUMMY if [ $? -ne 0 ]if [ $? -ne 0 ] thenthen echo "La boite aux lettres est brisee !"echo "La boite aux lettres est brisee !" echo "Programme termine prematurement."echo "Programme termine prematurement." exit 1exit 1 elseelse CAR_LU=`/usr/ucb/expr length "$DUMMY"`CAR_LU=`/usr/ucb/expr length "$DUMMY"` TOTAL=`expr "$TOTAL" + "$CAR_LU"`TOTAL=`expr "$TOTAL" + "$CAR_LU"` TOTAL=`expr "$TOTAL" + 1`TOTAL=`expr "$TOTAL" + 1` fifi donedone # Sauter par dessus la derniere ligne blanche# Sauter par dessus la derniere ligne blanche read DUMMYread DUMMY elseelse ## # Ecrire l'en-tete dans le fichier temporaire# Ecrire l'en-tete dans le fichier temporaire ## echo "$LIGNE" >> entetes${COMPTEUR}.tmpecho "$LIGNE" >> entetes${COMPTEUR}.tmp fifidone < "$1"done < "$1"

Lire le nombre de Lire le nombre de caractères indiqués caractères indiqués par la valeur de par la valeur de « Content-Length: ».« Content-Length: ».Le fichier d’entrée Le fichier d’entrée est lu ligne par est lu ligne par ligne.ligne.N’oubliez pas N’oubliez pas d’ajouter le d’ajouter le caractère Enter caractère Enter dans le comptage.dans le comptage.

C’est une ligne de C’est une ligne de l’en-têtel’en-tête

Page 12: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Exemples de programmation Bourne shell et nawk(1)

12

Exemples de programmation Exemples de programmation (7)(7)

Système d’exploitation UNIX

Pour terminer une tâche errante, nous devons Pour terminer une tâche errante, nous devons utiliser la commande utiliser la commande ps(1)ps(1) et et kill(1)kill(1)..

La commande La commande ps(1)ps(1) permet d’obtenir le PID permet d’obtenir le PID du processus à fautif.du processus à fautif.

La commande La commande kill(1)kill(1) permet l’élimination permet l’élimination du processus à l’aide de son PID.du processus à l’aide de son PID.

Page 13: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Exemples de programmation Bourne shell et nawk(1)

13

Exemples de programmation Exemples de programmation (8)(8)

Système d’exploitation UNIX

centi 1> ps -ef | more UID PID PPID C STIME TTY TIME CMD root 0 0 0 avr 10 ? 0:01 sched root 1 0 0 avr 10 ? 0:00 /etc/init - root 2 0 0 avr 10 ? 0:00 pageout root 3 0 0 avr 10 ? 0:19 fsflush : : : : : : : : root 169 1 0 avr 10 ? 0:00 /usr/lib/autofs/automountd catia67 3864 1 0 08:37:05 ? 0:00 /usr/dt/bin/dsdm catia67 3865 3805 0 08:37:05 pts/2 0:00 [ sdt_shel ] root 3762 289 0 06:34:21 ? 0:00 /usr/dt/bin/dtlogin -daemon catia67 3867 3865 0 08:37:05 pts/2 0:00 /usr/dt/bin/dtsession catia67 3894 3884 0 08:37:13 ? 0:00 dtfile -session dtrUHiM_ root 3765 1 0 06:34:22 ? 0:00 /usr/openwin/bin/fbconsole catia67 3805 3762 0 08:37:03 ? 0:00 /bin/ksh /usr/dt/bin/Xsession catia67 3819 1 0 08:37:04 ? 0:00 /usr/openwin/bin/speckeysd wong 4003 3988 0 09:40:52 pts/4 0:00 more wong 3988 3986 0 09:40:05 pts/4 0:00 -csh

C’est le champ $1 pour C’est le champ $1 pour nawk(1)nawk(1) lorsque lorsque la commande utilisée est la commande utilisée est ps -eps -e

Page 14: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Exemples de programmation Bourne shell et nawk(1)

14

Exemples de programmation Exemples de programmation (8)(8)

Système d’exploitation UNIX

Pour terminer une tâche dont le PID Pour terminer une tâche dont le PID est 4003:est 4003:

kill -9 4003kill -9 4003

Le signal à envoyer au Le signal à envoyer au processus (par processus (par exemple)exemple)

Le PID du processus Le PID du processus à « tuer »à « tuer »

Page 15: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Exemples de programmation Bourne shell et nawk(1)

15

Exemples de programmation Exemples de programmation (9)(9)

Système d’exploitation UNIX

Le problème: il faut connaître le PID du processus Le problème: il faut connaître le PID du processus errant !!!errant !!!

Nous allons écrire un programme Bourne shell capable Nous allons écrire un programme Bourne shell capable de « tuer » un ou plusieurs processus par leur nom au de « tuer » un ou plusieurs processus par leur nom au lieu de leur PID.lieu de leur PID.

Mieux encore, nous pouvons aussi utiliser une Mieux encore, nous pouvons aussi utiliser une expression générique pour spécifier les noms de expression générique pour spécifier les noms de processus.processus.

Page 16: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Exemples de programmation Bourne shell et nawk(1)

16

Système d’exploitation UNIX#!/bin/sh#!/bin/sh

# Par mesure de securite ...# Par mesure de securite ...

PATH=/bin:/usr/bin:/usr/5bin:.PATH=/bin:/usr/bin:/usr/5bin:.

# Les PID retournes par nawk sont separes# Les PID retournes par nawk sont separes

# par des <return> ...# par des <return> ...

IFS='IFS='

'' # <return># <return>

##

# Traiter les options de la ligne de commandes# Traiter les options de la ligne de commandes

##

case $1 incase $1 in

"") echo 'Utilisation: zap [-n] expr' 1>&2"") echo 'Utilisation: zap [-n] expr' 1>&2

exit 1 ;;exit 1 ;;

# si le numero du signal est donne ...# si le numero du signal est donne ...

-*) SIG=$1-*) SIG=$1

shiftshift

esacesac

La variable IFS réglée à Espace ...La variable IFS réglée à Espace ...

Traitement des Traitement des options du options du programmesprogrammes

Page 17: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Exemples de programmation Bourne shell et nawk(1)

17

Système d’exploitation UNIX### Trouver les PID des processus identifies par leur nom# Trouver les PID des processus identifies par leur nom##numjob=`ps -e | egrep "$1" | nawk '{print $1}'`numjob=`ps -e | egrep "$1" | nawk '{print $1}'`

### Continuer le traitement seulement si les processus# Continuer le traitement seulement si les processus# sont trouves# sont trouves##if [ "$numjob" ]if [ "$numjob" ]thenthen set $numjob # les PID seront separes par desset $numjob # les PID seront separes par des # nouvelles lignes# nouvelles lignes while [ $# -ne 0 ]while [ $# -ne 0 ] dodo if [ $1 -lt $$ ] # tuer seulement les processus lances if [ $1 -lt $$ ] # tuer seulement les processus lances then # avant l'execution de ce scriptthen # avant l'execution de ce script kill $SIG $1 kill $SIG $1 fifi shiftshift done done elseelse echo "Ne trouve le ou les processus" 1>&2echo "Ne trouve le ou les processus" 1>&2fifi

La recherche du PID des processus à éliminerLa recherche du PID des processus à éliminer

Mettre les PID trouvés comme des paramètres Mettre les PID trouvés comme des paramètres de positionde position

Page 18: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Exemples de programmation Bourne shell et nawk(1)

18

Exemples de programmation Exemples de programmation (10)(10)

Système d’exploitation UNIX

L’intégration UNIX - PC est un but L’intégration UNIX - PC est un but recherché depuis longtemps.recherché depuis longtemps.

Une réalité est l’arrimage des systèmes de Une réalité est l’arrimage des systèmes de fichiers UNIX et PC.fichiers UNIX et PC.

Le système NFS (Le système NFS (Network FileSystemNetwork FileSystem) est ) est le dénominateur commun entre le monde le dénominateur commun entre le monde UNIX et le monde PC.UNIX et le monde PC.

La famille des produits HummingBird La famille des produits HummingBird Maestro permet l’intégration des systèmes Maestro permet l’intégration des systèmes de fichiers NTFS et UFS via le NFS.de fichiers NTFS et UFS via le NFS.

Page 19: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Exemples de programmation Bourne shell et nawk(1)

19

Exemples de programmation Exemples de programmation (11)(11)

Système d’exploitation UNIX

Un répertoire UNIX (Un répertoire UNIX ($HOME$HOME) en provenance ) en provenance du serveur UNIX du serveur UNIX lca0.lca.etsmtl.calca0.lca.etsmtl.ca

Page 20: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Exemples de programmation Bourne shell et nawk(1)

20

Exemples de programmation Exemples de programmation (12)(12)

Système d’exploitation UNIX

Pour réaliser la connexion des systèmes de fichiers:Pour réaliser la connexion des systèmes de fichiers:Une machine UNIX joue le rôle du serveur NFSUne machine UNIX joue le rôle du serveur NFSUne ou plusieurs machines PC jouent le rôle de clients NFSUne ou plusieurs machines PC jouent le rôle de clients NFS

Pour le serveur NFS (UNIX):Pour le serveur NFS (UNIX):Il faut démarrer le programme d’authentification NFS nommé Il faut démarrer le programme d’authentification NFS nommé hclnfsdhclnfsd

De plus, les programmes De plus, les programmes statdstatd et et lockdlockd doivent être démarrés doivent être démarrés au préalable.au préalable.

Page 21: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Exemples de programmation Bourne shell et nawk(1)

21

Exemples de programmation Exemples de programmation (13)(13)

Système d’exploitation UNIX

Dans notre cas, le programme d’authenti-fication NFS Dans notre cas, le programme d’authenti-fication NFS hclnfsdhclnfsd est invoqué automatiquement à l ’aide d’un est invoqué automatiquement à l ’aide d’un programme Bourne shell.programme Bourne shell.

Nous allons créer un programme capable de détecter la Nous allons créer un programme capable de détecter la présence de présence de statdstatd et et lockdlockd avant le lancement de avant le lancement de hclnfsdhclnfsd..

De plus, on s’assure qu’il n’existe pas de De plus, on s’assure qu’il n’existe pas de hclnfsdhclnfsd déjà déjà en mémoire avant son lancement.en mémoire avant son lancement.

Page 22: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Exemples de programmation Bourne shell et nawk(1)

22

Exemples de programmation Exemples de programmation (14)(14)

Système d’exploitation UNIX

Normalement, les programmes Normalement, les programmes statdstatd et et lockdlockd sont toujours en mémoire. sont toujours en mémoire.

Ils sont lancés au démarrage de la machine Ils sont lancés au démarrage de la machine UNIXUNIX PID TTY TIME CMD

0 ? 0:05sched 1 ? 2:57init 2 ? 0:04pageout 3 ? 223:53fsflush 27250 ? 0:05Xsun 195 ? 0:01lpsched 271 ? 0:00 sac 105 ? 0:06rpcbind 98 ? 7:55in.route 135 ? 0:03inetd 107 ? 0:00keyserv 142 ? 0:01lockd 140 ? 0:00statd

Résultats Résultats affichés par affichés par ps ps

-e-e

Note: La colonne Note: La colonne PID est le champ PID est le champ $1 pour $1 pour nawk(1)nawk(1)

statdstatd permet permet l’obtention des l’obtention des attributs de attributs de fichiers.fichiers.

lockdlockd permet le permet le verrouillage des verrouillage des fichiers.fichiers.

Page 23: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Exemples de programmation Bourne shell et nawk(1)

23

Système d’exploitation UNIX#!/bin/sh#!/bin/sh

# S991hclnfsd.server# S991hclnfsd.server

##

# Copyright (c) 1999 par # Copyright (c) 1999 par Tony WongTony Wong# Departement de genie de production automatisee# Departement de genie de production automatisee

# Ecole de technologie superieure# Ecole de technologie superieure

# Universite du Quebec # Universite du Quebec

##

##

# Demarrage du service d'authentification NFS pour PC# Demarrage du service d'authentification NFS pour PC

# (hclnfsd) de HummingBird Communications Ltd # (hclnfsd) de HummingBird Communications Ltd

D’accord… c’est de la D’accord… c’est de la publicité gratuite ...publicité gratuite ...

Page 24: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Exemples de programmation Bourne shell et nawk(1)

24

Système d’exploitation UNIX# arret() : Fonction qui termine l'execution d'un ou# arret() : Fonction qui termine l'execution d'un ou

# ou plusieurs processus hclnfsd# ou plusieurs processus hclnfsd

arret() {arret() {

/usr/bin/ps -e |/usr/bin/ps -e |

/usr/bin/nawk '/usr/bin/nawk '

BEGIN { i = 0 }BEGIN { i = 0 }

/hclnfsd/ { PID[i++] = $1 }/hclnfsd/ { PID[i++] = $1 }

END { for (i in PID) {END { for (i in PID) {

print "Termine processus ",PID[i]print "Termine processus ",PID[i]

system ("kill " PID[i])system ("kill " PID[i])

}}

}'}'

}}

trouve() {trouve() {

ps -e | grep $1 > /dev/null 2>&1ps -e | grep $1 > /dev/null 2>&1

}}

Fonction Bourne shell utilisant Fonction Bourne shell utilisant nawk(1)nawk(1) pour éliminer les instances de pour éliminer les instances de hclnfsdhclnfsd

déjà en mémoiredéjà en mémoire

Voici comment exécuter une Voici comment exécuter une commande ou programme UNIX à commande ou programme UNIX à

l ’intérieur de l ’intérieur de nawk(1)nawk(1)..

Noter le passage de paramètres Noter le passage de paramètres nawk(1)nawk(1) vers la commande UNIX. vers la commande UNIX.

Cette fonction retourne un statut de Cette fonction retourne un statut de sortie 0 si le nom du processus passé sortie 0 si le nom du processus passé en paramètre existe en mémoireen paramètre existe en mémoire

Page 25: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Exemples de programmation Bourne shell et nawk(1)

25

Système d’exploitation UNIXcase "$1" incase "$1" in

'start')'start') if trouve "statd" -a trouve "lockd" if trouve "statd" -a trouve "lockd" then then if trouve "hclnfsd"if trouve "hclnfsd" thenthen echo "hclnfsd deja en service !"echo "hclnfsd deja en service !" echo "Arreter le service d'abord"echo "Arreter le service d'abord" elseelse hclnfsd -A -Xhclnfsd -A -X fifi elseelse echo "Services de support inexistants"echo "Services de support inexistants" echo "(statd et/ou lockd)"echo "(statd et/ou lockd)" fifi ;;;;'stop')'stop')

arretarret;;;;

*)*)echo "Usage: S991hclnfsd.server { start | stop }"echo "Usage: S991hclnfsd.server { start | stop }";;;;

esacesac

S’assurer qu’ils sont déjà en S’assurer qu’ils sont déjà en mémoiremémoire

Lancer le programme Lancer le programme d’authentification NFSd’authentification NFS

Éliminer Éliminer hclnfsdhclnfsd de la mémoire de la mémoire

Page 26: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Exemples de programmation Bourne shell et nawk(1)

26

Exemples de programmation Exemples de programmation (15)(15)Pour en savoir plus sur l’intégration Pour en savoir plus sur l’intégration

multi-plateforme, le NFS, le multi-plateforme, le NFS, le HummingBird Maestro, etc. :HummingBird Maestro, etc. :

Système d’exploitation UNIX

Su jet Sou rce

N F S (N etw ork F i leSy stem ) h ttp :/ / w w w .cis.oh io-state.ed u / h tbin / r fc/ r fc1094.h tm l

N F S v ersion 3 h ttp :/ / w w w .cis.oh io-state.ed u / h tbin / r fc/ r fc1813.h tm l

I n terop érabi l i té en tre P C et M A C http :/ / w w w .rtd .com / p cn fsfaq/ faq.h tm l

E xceed p ou r P C h ttp :/ / w w w .hu m m ingbird .com

X -w in32 p ou r P C h ttp :/ / w w w .starnet.com

N T F S (N T F i leSy stem ) su rL inu x h ttp :/ / w w w .in form atik .hu -ber l in .d e/ ~loew is/ n tfs

N T F S su r F reeBSD http :/ / w w w .u sers.globalnet.co.u k / ~m ark ov / n tfs_ instal l .h tm l

N F S M aestro Solo h ttp :/ / w w w .hu m m ingbird .com

C oncep tC l ien t-serv eu r h ttp :/ / w w w .geck i l .com / ~harv est/ cl ien t-serv er / ind ex.h tm l