Vous êtes sur la page 1sur 5

L3Info SYS2

2006-2007

TP UNIX/C

1. Informations techniques
Dans les exemples, ce qui est affiché par la machine et ce que vous devez taper sera affiché en police
courrier.

1.1 Connexion
Connectez vous sur la machine Linux à l’aide de votre nom d’utilisateur et mot de passe. Une fois
connecté, ouvrez une fenêtre terminal xterm à partir du menu principal.

1.3 Editeur de texte


Pour créer un petit fichier, vous pouvez utiliser la commande cat, mais dans ce cas vous ne pouvez pas
modifier le fichier en dehors de la ligne courante. Vous pouvez autrement utiliser l’éditeur de texte
xemacs, qui se lance par la commande :
xemacs nom_de_fichier
Quelques unes des commandes clavier :
• Sauvegarder le texte dans le fichier : CTRL+X CTRL+S
• Ecrire le texte dans un fichier dont on donne le nom : CTRL+X CTRL+W
• Quitter l’éditeur : CTRL+X CTRL+C

1.4 Divers
Informations en ligne (man):
La commande man nom_commande permet de faire afficher des informations sur les fonctions et les
paramètres d'une commande. Ces informations sont affichées par page d’écran, pour passer d'une page à
l'autre il suffit de taper espace (ou retour pour avancer d'une ligne).

Exécution d'un programme de commandes :


En phase de mise au point d'un programme de commande, il peut être utile de tracer ce que fait le shell,
pour, cela on utilise l'appel suivant :

sh –x nom_prog_commandes paramètres

Pour utiliser le bon interpréteur, tous vos programmes de commandes doivent commencer par la ligne :

#!/bin/sh

S. Derrien, J. Barré, J. Moulierac 1/5


L3Info SYS2

2. Langages de commandes
Vous allez utiliser des fichiers se trouvant dans le répertoire /share/l3info/Sys2/TP-UNIX

2.1 Liens
Pour utiliser plus facilement des fichiers se trouvant dans un autre répertoire vous pouvez utiliser les
liens, qui permettent de donner plusieurs noms à un fichier (pas à un répertoire) :

ln ancien_nom nouveau_nom

Exercices :

1. Utiliser la commande ls -ilg /share/l3info/Sys2/TP-UNIX pour afficher le contenu


du répertoire indiqué.
2. Créer un lien lp1 sur le fichier /share/l3info/Sys2/TP-UNIX/prog1.c en utilisant
l’option –s.
3. Afficher le contenu de votre répertoire et comparer les informations données pour l’entrée lp1 et
celles données pour /share/l3info/Sys2/TP-UNIX/prog1.c

2.2 Variables d'environnement


Pour utiliser plus facilement des fichiers se trouvant dans un autre répertoire, vous pouvez également
utiliser une variable du shell et la commande setenv, par exemple :

setenv nom_variable nom_du_répertoire

Vous pouvez ensuite utiliser une référence à la variable $nom_variable à la place du chemin d’accès
complet au répertoire.

Exercices :
1. Initialiser une variable d'environnement rcom avec le chemin /share/l3info/Sys2/TP-UNIX
2. Utiliser cette variable pour afficher le contenu du répertoire /share/l3info/Sys2/TP-UNIX
(ls) et afficher le contenu du fichier /share/l3info/Sys2/TP-UNIX/prog1.c (cat)

2.3 Redirections
Exercices :
1. Afficher le contenu du fichier /share/l3info/Sys2/TP-UNIX/prog1.c puis recopier le fichier
exécutable /share/l3info/Sys2/TP-UNIX/prog1 chez vous.
2. Exécuter le programme prog1 dans les situations suivantes ( ./nom pour exécuter):
• entrée standard : clavier, sortie standard : écran
• entrée standard : fichier /share/l3info/Sys2/TP-UNIX/d1, sortie Standard : écran
• entrée standard : clavier, sortie standard : fichier res1 dans votre répertoire de travail
• entrée standard : fichier /share/l3info/Sys2/TP-UNIX/d1, sortie standard : fichier res2
dans votre répertoire de travail

S. Derrien, J. Barré, J. Moulierac 2/5


L3Info SYS2

2.4 Programmes de commande


Le programme prog2 du répertoire /share/l3info/Sys2/TP-UNIX lit sur l'entrée standard un
entier "i", suivi d'une chaîne de caractères. On souhaite pouvoir l'utiliser en fournissant d'un côté l'entier
"i" et de l'autre un fichier contenant seulement la chaîne.

Exercices :
1. Ouvrir le fichier prog2.c du répertoire /share/l3info/Sys2/TP-UNIX dans XEmacs pour
comprendre ce que fait le programme.
2. Ecrire un programme de commande select dont l’appel se fait avec 3 paramètres :
select i f1 f2
Le paramètre f1 désigne un fichier qui doit contenir une suite de caractères de la forme :
"......%........%........%".
Le programme de commande select utilisera le programme prog2 du répertoire
/share/l3info/Sys2/TP-UNIX pour recopier dans f2 la sous suite numéro i. Vous pouvez
utiliser comme fichier de donnée le fichier /share/l3info/Sys2/TP-UNIX/d2.
Pour effectuer ce travail vous pourrez utiliser la commande cat:
• cat f1 f2 : envoie sur la sortie standard le résultat de la concaténation de f1 et f2
• cat - f : envoie sur la sortie standard le résultat de la concaténation de l'entre
standard et de f
3. Ecrire un programme de commande selmult à 1 paramètre:
selmult f
Ce programme de commande boucle sur :
a) lecture d'un entier i
b) recopie sur la sortie standard de la sous-suite numéro i du fichier f (en utilisant prog2) en
s’arrêtant quand la valeur de i lue vaut 0.

3. Programmation en C sous Unix/Linux


L’objectif de cette partie est de vous familiariser avec le compilateur gcc, et de vous apprendre
à utiliser des makefile lorsque vous développez des programmes en C.

3.1 Compilation et exécution d’un programme C formé d’un seul module.


La compilation, l’assemblage, et l’édition de lien se font directement par la commande.

gcc nomfichier.c

Exercices :
1. créez un répertoire sur votre compte utilisateur, et copiez-y (en utilisant la commande cp -r) le
contenu du répertoire /share/l3info/Sys2/TP-UNIX/C/
2. Placez-vous dans ce répertoire et essayez de compiler le programme hms.c, que constatez-vous ?
3. Ouvrez le fichier source sous XEmacs, et corrigez les erreurs du programme.
4. Relancez une compilation, afin de s’assurer de la correction du programme

S. Derrien, J. Barré, J. Moulierac 3/5


L3Info SYS2

Normalement la commande précédente a générée un fichier a.out qui est l’exécutable correspondant
au programme hms.c. Si on souhaite préciser un nom d’exécutable particulier, on écrit :

gcc –o nomprog nomfichier.c

La commande produit alors un exécutable appelé nomprog (sous Linux, les exécutables n’ont pas
l’extension .exe comme c’est le cas sous DOS/Window). L’exécution de ce programme se fait alors
simplement par la commande :

./nomprog

Exercice :
1. Recompilez le programme de manière à produire un exécutable nommé hms, et vérifiez son bon
fonctionnement en l’exécutant dans le terminal de commande.

3.2 Compilation et exécution d’un programme C formé de plusieurs modules.


En règle générale, un module est formé d’un fichier .c contenant le source du module, et d’un fichier
d’entête (extension .h), qui permet d’exporter les définition des identificateurs du module (données,
sous-programmes, etc.). Ainsi, les commandes ci-dessous génèrent dans le répertoire courant les fichiers
objets module1.o et module2.o.

gcc –c src/module1.c
gcc –c src/module2.c

En revanche la commande :

gcc –c src/programme.c

Produit une erreur de compilation, avec le message :

programme.c:7: error: syntax error before '*' token


programme.c:7: warning: data definition has no type or storage class
programme.c: In function 'main':
programme.c:14: warning: assignment makes pointer from integer without a
cast

Exercice :
1. Que signifie cette erreur ?

2. Comment corriger le fichier programme.c (indice : on dispose de deux fichiers d’entêtes


module1.h et module2.h qui définissent les variable identificateurs exportées respectivement
exportés par les modules 1 et 2.

Une fois le problème réglé, on dispose de trois modules objets, que nous allons relier pour obtenir
l’exécutable final par la commande :

gcc –o programme programme.o module1.o module2.o

L’exécution de ce programme se fait alors simplement par la commande :

./programme

S. Derrien, J. Barré, J. Moulierac 4/5


L3Info SYS2

2.7 Utilisation de make


A chaque fois que l’on modifie un des fichiers source (.c ou .h), il faut recompiler les modules
dépendant de ces fichiers, et refaire l’édition de lien pour obtenir un exécutable à jour. Cette tache est
très fastidieuse à faire à la main, surtout quand le programme comporte de nombreux modules.
Il est bien sûr possible de tout recompiler à chaque fois, mais ce genre d’approche atteint rapidement ses
limites dès lors que l’on travaille sur des programmes conséquents, car le temps de compilation devient
prohibitif.
Le programme make dont le fonctionnement a été vu en cours permet justement d’automatiser cette
tâche, en ne recompilant à chaque fois que ce qui doit l’être.

Exercice :
1. Ecrire un fichier makefile permettant de réaliser l’assemblage et l’édition de lien du programme
vu en 2.6 ; celui-ci devra s’assurer que les fichiers .o soient à jour par rapport à leur sources .c et
aux fichier d’entêtes (.h) dont ils dépendent.
2. Vérifier le bon fonctionnement de votre makefile en modifiant un des fichiers puis en relançant le
makefile à l’aide de la commande make.

3. Ajouter dans le fichier makefile une entrée clean permettant d'effacer tous les fichiers
objets (*.o) ainsi que l’exécutable produit.

S. Derrien, J. Barré, J. Moulierac 5/5

Vous aimerez peut-être aussi