X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;ds=inline;f=unix_prog_web%2Funix_prog_web_02.xhtml;h=829822618c520c37ff431433e1f673e340895eda;hb=f9fbf294b28a10938473ed9554d5c7e2ebaabe01;hp=497e323a81aaeb95238fce41ade23bb7e203e1e4;hpb=0a552a95e70324a04e9d06bd30ac5bc96b2a58b5;p=hacks%2FsimpleWebSlides.git diff --git a/unix_prog_web/unix_prog_web_02.xhtml b/unix_prog_web/unix_prog_web_02.xhtml index 497e323..8298226 100644 --- a/unix_prog_web/unix_prog_web_02.xhtml +++ b/unix_prog_web/unix_prog_web_02.xhtml @@ -41,27 +41,14 @@
- + - -Dans un fichier « counter.c
»
+
Dans un fichier « counter.c » (attention c'est du pseudo C)
gcc -o counter.exe counter.c
counter.exe
» est un
+ Le fichier « counter.exe » est un
exécutable (fichier binaire contenant du code machine)
./counter.exe â il faut la permission +x sur le fichier
@@ -155,11 +142,11 @@
réveil du thread listen
listen
- (incrémente count
)
+ (incrémente count)
attente de connexion â
⦠fin des 3s
â
- réveil du thread display
+ réveil du thread display
display (affiche
1 à l'écran)
@@ -178,7 +165,7 @@
pendant 50ã²
Exécution du processus qui dessine le bureau pendant 50
ã²
â¦
-
+
C'est le gestionnaire de processus qui décide quel
programme a la main et pour combien de temps (priorité aux
@@ -487,7 +474,7 @@
La commande ps
Permet d'avoir des informations sur les processus en cours
- d'exécution (voir « man ps
» pour les
+ d'exécution (voir « man ps » pour les
options):
$ ps -o user,pid,state,cmd x
USER PID S CMD
@@ -500,7 +487,7 @@
kim 29869 R ps -o user,pid,state,cmd x
-
+
Ãtats des processus (sous Linux)
@@ -576,7 +563,7 @@ libre)
directement en arrière plan en faisant:
$ gedit &
On peut envoyer un signal à un
- processus avec la commande « kill [-signal] pid
»
+ processus avec la commande « kill [-signal] pid »
$ kill -9 2345
@@ -585,18 +572,18 @@ libre)
Le terminal et le processus sont liés par trois fichiers
spéciaux:
- - L'entrée standard (
stdin
), reliée
+ - L'entrée standard (stdin), reliée
au clavier
- - La sortie standard (
stdout
), reliée
+ - La sortie standard (stdout), reliée
à l'affichage
- - La sortie d'erreur (
stderr
), reliée
+ - La sortie d'erreur (stderr), reliée
à l'affichage
Dans le shell, on peut utiliser les
- opérateurs <
, >
- et 2>
pour récupérer le contenu
- de stdin
, stdout
- et stderr
:
+ opérateurs <, >
+ et 2> pour récupérer le contenu
+ de stdin, stdout
+ et stderr:
$ sort < toto.txt
$ ls -l > liste_fichiers.txt
@@ -632,6 +619,176 @@ $ ls -l * 2> erreurs.txt
Mentalité Unix beaucoup de petits programmes spécifiques, + que l'on combine au moyen de scripts pour réaliser des actions + complexes. Exemple de fichier script: +
+
+ #!/bin/bash
+
+ for i in img_*.jpg
+ do
+ base=$(echo "$i" | cut -f 2- -d '_')
+ nouveau=photo_"$base"
+ if test -f "$nouveau"
+ then
+ echo "Attention, le fichier $nouveau existe déjà "
+ continue
+ else
+ echo "Renommage de $i en $nouveau"
+ mv "$i" "$nouveau"
+ fi
+ done
+
+Si un fichier texte (quel que soit son extension), commence + par les caractères #!/chemin/vers/un/programme, on peut + rendre ce fichier exécutable (chmod +x). Si on l'exécute, + le contenu du fichier est passé comme argument à programme + (qui est généralement un interpréteur) +
+#!/bin/bash signifie que le corps du fichier est passé au + programme bash qui est l'interprète de commande + (le shell). +
+On peut définir des variables au moyen de la notation
+VARIABLE=contenu
et on peut utiliser la variable
+avec la notation $VARIABLE
exemple de définition :
+ i=123
+ j="Ma super chaine"
+ TOTO=titi
+ echo $TOTO
+
+ exemple d'utilisation: echo $j $i $TOTO
+affiche « Ma super chaine 123 titi
Les boucles for ont la syntaxe:
+
+ for VARIABLE in elem1 ... elemn
+ do
+ ....
+ done
+
+chaque elemi est expansé (comme une ligne de
+commande) avant l'évaluation de la boucle:
+
+ for i in *.txt
+ do
+ echo $i est un fichier texte
+ done
+
+On peut quitter une boucle prématurément en utilisant break
+et passer directement au tour suivant avec continue
+
La syntaxe est :
+ if commande
+ then
+ ...
+ else
+ ...
+ fi
+
+commande est évaluée. Si elle se termine avec succès,
+la branche then est prise. Si elle se termine avec un code
+d'erreur, la branche else est prise. On peut utiliser la
+commande test qui permet de tester plusieurs conditions
+(existance d'un fichier, égalités de deux nombres, ...) et se termine
+par un succès si le teste est vrai et par un code d'erreur dans le
+cas contraire
On regarde tour à tour si fichier1.txt, fichier2.txt, ... existent :
+
+ for i in 1 2 3 4 5 6
+ do
+ if test -f "fichier$i".txt
+ then
+ echo le fichier "fichier$i".txt existe
+ fi
+ done
+
+
Il est pratique de pouvoir mettre l'affichage d'une commande
+ dans une variable. On utilise $( commande ... ):
+
+ MESFICHIER=$(ls *.txt)
+ for i in $MESFICHIER
+ do
+ echo Fichier: $i
+ done
+
+Attention à la présence de guillemets autour des variables. S'il y a
+f1.txt et f2.txt dans le répertoire courant:
+
+ MESFICHIER=$(ls *.txt)
+ for i in $MESFICHIER
+ do
+ echo Fichier: $i
+ done
+
+affiche:
+ Fichier: f1.txt
+ Fichier: f2.txt
+
+ MESFICHIER=$(ls *.txt)
+ for i in "$MESFICHIER"
+ do
+ echo Fichier: $i
+ done
+
+affiche:
+ Fichier: f1.txt f2.txt
+