1 / 24

Génie de la production automatisée GPA435 Système d’exploitation et programmation de système

Génie de la production automatisée GPA435 Système d’exploitation et programmation de système Chapitre 6 Partie II 2014. Fonctions utilisateurs. Nous pouvons rendre la programmation plus structurée en utilisant des fonctions La syntaxe est: Nom_fonction () { commandes }

vern
Download Presentation

Génie de la production automatisée GPA435 Système d’exploitation et programmation de système

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Génie de la production automatisée GPA435 Système d’exploitation et programmation de système Chapitre 6 Partie II 2014

  2. Fonctions utilisateurs • Nous pouvons rendre la programmation plus structurée en utilisant des fonctions • La syntaxe est: • Nom_fonction () • { • commandes • } • Une fonction utilisateur joue le rôle d’une sous-routine. 2

  3. Fonctions utilisateurs • Caractéristiques des fonctions utilisateurs: • Syntaxe • nom_fonction () { commandes } • Définition des fonctions utilisateurs au début du fichier de commandes; • Prend préséance sur les commandes systèmes portant le même nom – Attention! Source de confusion! • Doit avoir un statut (valeur) de retour : exit noù n est un entier positif (0OK, 0Erreur). Par défaut une fonction utilisateur retourne la valeur 0 comme statut de retour. 3

  4. Fonctions utilisateurs • Passage des paramètres dans une fonction utilisateur • Par variables globales • ERRNO=1234 • gestion_erreur() { • case "$ERRNO" in • 0) ;; # pas d'erreur • 101) echo "Répertoire inexistant" ;; • 102) echo "Permission d'écriture obligatoire";; • *) echo "Code d'erreur inconnu" • exit 1 • ;; • esac • } • while[ $ERRNO -ne 0 ] • do • repertoire; ERRNO=$? • gestion_erreur • done 2) La fonction gestion_erreur()peut traiter le contenu de la variable globale ERRNO. 1) Le contenu de la variable globale ERRNOest visible par la fonction gestion_erreur()puisqu’elle a été déclarée avant la définition de la fonction. 4

  5. Fonctions utilisateurs • Passage des paramètres dans une fonction utilisateur • Par paramètres de position • gestion_erreur() { • case "$1" in • 0) ;; # pas d'erreur • 101) echo "Répertoire inexistant" ;; • 102) echo "Permission d'écriture obligatoire";; • *) echo "Code d'erreur inconnu" • exit 1 • ;; • esac • } • ERRNO=123 • while [ $ERRNO -ne 0 ] • do • repertoire; ERRNO=$? • gestion_erreur "$ERRNO" • done 2) La fonction gestion_erreur() reçoit le contenu de la variable ERRNO dans sa variable de position $1. 1) Le contenu de la variable ERRNO est passé à la fonction gestion_erreur() comme un paramètre de position. 5

  6. Fonctions utilisateurs • Passage des paramètres dans une fonction utilisateur • Par paramètres de position • De façon générale: • # définition de la fonction • funcA() { • # $# le nombre de paramètres de position • # $* et $@ la ligne des paramètres de position • # $1 reçoit le contenu de $par1 • # $2 reçoit le contenu de $par2 • # $3 reçoit le contenu de $par3 • # et ainsi de suite • } • # utilisation de la fonction • funcA par1 par2 par3 Donc, pour une fonction utilisateur, les paramètres de position se comportent exactement comme un programme 6

  7. Neutralisation des caractères • Certains caractères ont une signification spéciale pour l’interpréteur de commande • Par exemple: • &, (, ), *, !, $, etc. • Cependant, à cause du nombre limité de caractères disponibles, certaines commandes et programmes réutilisent ces mêmes caractères mais à d’autres fin • Par exemple: • $ pour signifie la valeur monétaire; • () pour regrouper les expressions mathématiques; • etc. 7

  8. Neutralisation des caractères • Sans un mécanisme de contournement, ces caractères spéciaux seront interprétés d’une façon erronée par l’interpréteur de commande. • Les commandes et programmes qui utilisent ces caractères spéciaux ne pourront pas s’exécuter correctement. • D’où la nécessité de neutraliser la signification particulière de ces caractères spéciaux pour l’interpréteur de commande. 8

  9. Neutralisation des caractères • Un exemple • Nous désirons afficher la chaîne de caractère « Lola & Lilo ». Voici le résultat: L’interpréteur de commande a interprété ceci: Exécuter echo Lola & (echo Lola en arrière-plan); Exécuter Lilo comme une commande. 9

  10. Neutralisation des caractères • Un exemple • Nous désirons afficher la chaîne de caractère « Lola & Lilo ». Voici le résultat: Le méta-caractère & est neutralisé par le symbole \ qui agit comme un neutralisateur. L’interpréteur de commande considérera \& comme le caractère & et non pas le symbole pour l’exécution en arrière-plan. 10

  11. Neutralisation des caractères • Ainsi, le symbole \ permet la neutralisation du caractère qui le suit. Le symbole \ a effectivement neutralisé le premier méta-caractère & mais pas le 2e. On dit que \ est un neutralisateur de simple (1 seul) caractère. 11

  12. Neutralisation des caractères • Nous pouvons neutraliser plus d’un caractère à la fois par les guillemets et les apostrophes. • Guillemets • Neutralise la signification spéciale du caractère ESPACE; • Permet la substitution des variables et des commandes; • Permet l’utilisation du neutralisateur \. Bug 1: $CAD est interprété comme le contenu de la variable CAD et non pas dollar canadien Bug 2: Le caractère ESPACE a séparé la chaîne de caractères en 2 parties L’utilisation des guillemets et de \ permet de solutionner ce problème. 12

  13. Neutralisation des caractères • Nous pouvons neutraliser plus d’un caractère à la fois par les guillemets et les apostrophes. • Apostrophes • Neutralise la signification spéciale du caractère ESPACE; • Empêche la substitution des variables et des commandes; • Neutralise le neutralisateur \. Les apostrophes ont effectivement neutralisé le neutralisateur \ et empêché la substitution de la variable CAD. 13

  14. Neutralisation des caractères • D’autres exemples qui aident à la compréhension de la neutralisation des méta-caractères gpa435> MACHINE=`hostname` gpa435 > echoLa machine \'$MACHINE\' est en panne La machine 'my-ubuntu' est en panne gpa435 > echo La machine "'$MACHINE'" est en panne La machine 'my-ubuntu' est en panne gpa435 > echoLa machine '$MACHINE' est en panne La machine $MACHINE est en panne gpa435 > echo"La machine '$MACHINE' est en panne" La machine 'my-ubuntu' est en panne gpa435 > echo'La machine $MACHINE est en panne' La machine $MACHINE est en panne gpa435 > echo'La machine '$MACHINE' est en panne' La machine my-ubuntu est en panne 14

  15. Commandes exec(1) et trap(1) • Dans un programme, la commande exec(1) permet l’exécution d’une commande sans la création d’un nouveau processus. • Vous pouvez donc passer des paramètres du programme à la commande à exécuter. • Attention! Ce n’est pas un appel de sous-routine car le contrôle ne revient pas au programme. 15

  16. Commandes exec(1) et trap(1) • Voici un exemple: La ligne exec date exécute la commande date et lui passe le contrôle. Résultat:On voit que la ligne echo"Fin du programme" n’est jamais exécutée. 16

  17. Commandes exec(1) et trap(1) • La commande exec(1) sert aussi à rediriger les entrées-sorties standard d’une façon globale. • Différentes syntaxes: • exec no_desc> nom_fich • exec no_desc>&no_desc • exec no_desc>> nom_fich • exec no_desc< nom_fich • exec no_desc<&no_desc Légende: no_desc : numérodescripteur nom_fich : nom de fichier >, >&, >>, <, <& : opérateurs de redirection 17

  18. Commandes exec(1) et trap(1) • Un exemple: À partir de ce point, tous les messages d’erreurserontenvoyésdans un fichiernomméerrmsg.txt. On pourra en faire de même pour redirigerd’unefaçonglobale la sortie standard et l’entrée standard en utilisant les opérateurs de redirection appropriés. 18

  19. Commandes exec(1) et trap(1) • La commande trap(1) est fort utile pour la programmation • La syntaxe: • trap ‘commandes’ signaux • commandes est un ensemble de commandes Linux; • signaux sont des numéros (entiers). • À la réception d’un signal par le programme, les commandes entre apostrophes sont exécutées. 19

  20. Commandes exec(1) et trap(1) • Quelle est l’utilité de trap(1) ? • Pour réaliser une fin de programme en « beauté » • Advenant une erreur fatale, le programme pourra effacer ses fichiers temporaires, arrêter ses processus fils, fermer ses ports internet, afficher un message d’urgence, etc. • Pour empêcher certainsévènements inappropriés de faire avorter le programme • Le disque plein, la clé USB n’est plus disponible, le programme change son état par les touches ctrl-c, ctrl-y, ctrl-z, etc. 20

  21. Commandes exec(1) et trap(1) • Voici quelques signaux disponibles Les signaux 9, 17, 19 et 23 ne peuventêtreinterceptés par trap(1), Saviez-vouspourquoi? 21

  22. Commandes exec(1) et trap(1) • Exemple d’utilisation de trap(1) Ce programme ne fait rien pendant 100 secondes (sleep 100). Envoyez le signal ctrl-c au programme. La commandetrap(1)interceptera le signal et affiche un message à la sortie standard. 22

  23. Commandes exec(1) et trap(1) • Exemple d’utilisation de trap(1) Ce programme ne fait rien pendant 100 secondes (sleep 100). Envoyez le signal ctrl-z pour suspendre le programme. Entrer la commandebg pour exécuter le programme en arrière-plan. Entrer la commandefg pour exécuter le programme en avant-plan À la fin du programme, trap(1)affiche un message. 23

  24. Fin de la deuxième partie du chapitre 6

More Related