1. Connexion.
L'étape préliminaire à tout travail consiste à
établir la connexion entre le "serveur", qui offre les
"ressources" (capacité de calcul, logiciels, etc...) nécessaires
à la réalisation des travaux pratiques, et un "terminal
X" (ou console de travail) :
Pour cela, procéder comme suit :
- Sélectionner (par un "double-clic") le serveur marine-gw1.edu.ups-tlse.fr
dans la fenêtre de sélection des serveurs.
- Cette fenêtre est remplacée par une fenêtre de "login"
(ou "connexion") :
- Entrer le nom d'utilisateur.
- La fenêtre de login disparaît. On se retrouve sous un environnement
graphique, avec une fenêtre ouverte intitulée marine.edu.ups-tlse.fr.
Cette fenêtre permet de taper des "commandes
système". Elle est de ce fait dite "fenêtre système".
Dans cette fenêtre apparaît le caractère >
qui s'appelle le "prompt" (ou "invite").
La présence du prompt sur une nouvelle ligne indique que la commande précédente
a été exécutée, et qu'il est dès lors
possible de taper une nouvelle commande.
Remarque :
Le lancement d'une application est généralement accompagné de l'ouverture
d'une nouvelle fenêtre. La configuration usuelle est donc constituée de plusieurs fenêtres
(il est d'ailleurs demandé de ne jamais avoir plus de trois fenêtres simultanément,
afin de ne pas surcharger marine). Dans l'exemple suivant, deux fenêtres
sont ouvertes :
La fenêtre "active" est la fenêtre dans laquelle
on travaille (ici, la fenêtre active est la fenêtre située
en bas à droite). Pour rendre une fenêtre active, il suffit de cliquer
dessus avec la souris.
2. Déconnexion.
Pour se déconnecter, plusieurs solutions sont possibles :
- Taper logout ou exit dans la fenêtre système.
- Taper <Ctrl>D alors que la fenêtre système
est active (maintenir appuyée la touche <Ctrl>, et taper le caractère
D ou d).
3. Changement du mot de passe.
Dans la fenêtre système, taper la commande nispasswd.
Le système demande alors l'ancien mot de passe (Enter login(NIS)
password:). Une fois ce mot de passe tapé, le système
demande le nouveau mot de passe (New password:). Pour composer
ce nouveau mot de passe, il faut utiliser entre six et
huit caractères, dont au moins un chiffre. Il est également
possible d'utiliser des caractères de ponctuation.
Attention :
- Ce mot de passe est personnel : ne le communiquer en aucun cas.
- Ce mot de passe est absolument nécessaire à la connexion
: ne surtout pas l'oublier.
Une fois ce nouveau mot de passe tapé, le système demande
de le retaper afin de contrôler l'exactitude de celui-ci (Re-enter
new password:).
Exemple :
> nispasswd
nispasswd: Changing password for linfg250
Enter login(NIS) password:
New password:
Re-enter new password:
NIS passwd/attributes changed on lambi.cict.fr
> |
Remarque :
Dans les exemples d'exécution, seuls les caractères tapés par l'utilisateur apparaîtront en gras
(sauf ici les mots de passe, qui n'apparaissent pas à l'écran pour des raisons de sécurité).
4. Manipulation d'une fenêtre.
Une fenêtre est structurée graphiquement de la manière
suivante :
4.1. Différentes manipulations possibles.
- Le déplacement : positionner la souris sur la zone Titre
de la fenêtre, appuyer sur le bouton de gauche, et maintenir ce bouton
pressé tout en déplaçant la souris jusqu'à
amener la fenêtre à la position souhaitée.
- Le redimensionnement : positionner la souris sur une des zones
périphériques de la fenêtre (Zone 1
à Zone 8). Lorsque le positionnement est correct,
le curseur prend la forme d'une flèche surmontée d'un ou
de plusieurs traits indiquant le sens de redimensionnement de la fenêtre.
Appuyer sur le bouton de gauche de la souris tout en la faisant glisser
jusqu'à ce que la fenêtre atteigne la dimension désirée.
- La suppression : positionner la souris sur le Bouton
1 et "double-cliquer".
- La transformation d'une fenêtre en icône (ou "icônification")
: cliquer sur le Bouton 2.
- La transformation d'une icône en fenêtre. Deux solutions
sont possibles :
- Double-cliquer sur l'icône.
- Cliquer sur l'icône. Le menu suivant apparaît :
Remarque :
Dans les parties gauche, basse ou droite de la fenêtre peuvent figurer
des "ascenseurs" ("scrollbars" en anglais) qui permettent
de visualiser la totalité d'un document.
4.2. Application pratique.
Dans la fenêtre système, taper asedit &
pour lancer le logiciel d'édition de texte asedit
(le &, précédé ou non d'un espace, signifie que le logiciel
est lancé en "tâche de fond", c'est-à-dire
que l'utilisateur pourra taper d'autres commandes dans la fenêtre
système pendant l'exécution du logiciel).
Lorsque la fenêtre
de l'éditeur de texte est apparue :
- L'agrandir à la taille de l'écran, puis lui rendre sa
taille originale.
- Rouvrir la fenêtre à partir de l'icône.
5. Menu de fond d'écran.
En appuyant sur le bouton de gauche de la souris alors que le curseur
se trouve sur la zone bleue correspondant au "fond d'écran"
(à l'extérieur de toute fenêtre), on accède
au menu suivant :
Il suffit alors de placer le curseur de la souris sur la commande à
lancer. Par exemple, en sélectionnant xclock (en
faisant glisser la souris sur ce mot), puis en relachant le bouton, une
fenêtre contenant le dessin d'une horloge apparaît à l'écran :
Remarque :
Il se peut qu'en appuyant sur le bouton de gauche de la souris, le menu
n'apparaisse pas. Il faut alors "dévérouiller" le
clavier numérique, en tapant sur la touche Num Lock située
en haut à droite du clavier.
6. Quelques commandes UNIX.
La mémoire de stockage d'un serveur est structurée en
"répertoires" et "sous-répertoires",
dans lesquels il est possible d'enregistrer des "fichiers". Le
répertoire de plus haut niveau est dit "répertoire racine"
et se note / (caractère "slash"). À la
connexion, un utilisateur se trouve dans son "répertoire principal"
("home directory"). Le répertoire principal est le répertoire
dans lequel un utilisateur a le droit de créer des sous-répertoires
et d'enregistrer des fichiers. Le chemin qui mène à un répertoire
principal s'écrit, par exemple :
L'ensemble des chemins que l'on peut parcourir à partir d'un
répertoire (en allant de sous-répertoires en "sous-sous-répertoires")
est appelé "arborescence" :
Le serveur utilisé pour les travaux pratiques fonctionne sous
le système d'exploitation UNIX. Un système d'exploitation
propose un ensemble de commandes permettant de gérer le stockage
des informations en mémoire.
Sous UNIX, on désigne par . le "répertoire courant"
("working directory"), et par .. le "répertoire
père" du répertoire courant dans l'arborescence. Par
convention, le nom d'un fichier contenant un programme en langage C est
suivi de l'extension .c
Les commandes suivantes permettent de manipuler des fichiers et
des répertoires (les éléments situés entre crochets sont facultatifs) :
- pwd : permet à tout instant de connaître
le chemin menant de la racine au répertoire courant.
Taper la commande pwd dans la fenêtre système.
- mkdir nom_répertoire : permet de créer
un répertoire de nom nom_répertoire
Créer le sous-répertoire TEST, en tapant
dans la fenêtre système : mkdir TEST
- ls [nom_répertoire] : permet d'afficher le
contenu d'un répertoire. Suivie de l'option -l,
cette commande affiche à l'écran diverses informations sur chaque élément
contenu dans un répertoire (date de création, taille en octets,
droits d'accès, etc...). Suivie de l'option -a,
cette commande décrit aussi les "fichiers cachés" (c'est-à-dire les fichiers dont le
nom commence par un caractère .). Si la commande ls est
lancée sans paramètre (pas de nom de répertoire indiqué),
alors elle affiche à l'écran le contenu du répertoire courant.
Afficher le contenu du répertoire principal, en tapant ls
-al dans la fenêtre système.
- cd [nom_répertoire] : permet de changer de
répertoire courant. Si aucun
répertoire n'est passé en paramètre, le répertoire courant devient
le répertoire principal. Contrairement au système d'exploitation
DOS, UNIX exige que les commandes soient séparées de leurs
paramètres (par exemple : sous DOS, on peut écrire cd..
ou cd .., alors que sous UNIX, il est impératif
d'écrire cd ..).
Se positionner dans le sous-répertoire TEST,
en tapant : cd TEST
-
cp nom_fichier1 nom_fichier2 :
cette commande permet de faire une copie du fichier
nom_fichier1 dans le fichier nom_fichier2
cp nom_fichier1 nom_répertoire/[nom_fichier2] :
cette commande permet de faire une copie du fichier
nom_fichier1 dans le répertoire nom_répertoire,
sous le même nom ou sous le nom nom_fichier2
Copier le fichier .cshrc du répertoire principal
dans TEST, en tapant :
Cette commande copie
le fichier .cshrc, contenu dans le répertoire immédiatement
supérieur, dans le répertoire courant, désigné par le caractère .
qui fait donc bien partie de la commande. Vérifier que
la copie a bien eu lieu, en tapant : ls -a
-
mv nom_fichier1 nom_fichier2 : cette commande permet
de renommer le fichier nom_fichier1 en nom_fichier2
mv nom_fichier1 nom_répertoire/[nom_fichier2] : cette commande permet
de déplacer le fichier nom_fichier1 dans le
répertoire nom_répertoire,
sous le même nom ou sous le nom nom_fichier2
Renommer le fichier .cshrc du sous-répertoire
TEST en tempo
Pour cela, taper : mv .cshrc tempo
- rm nom_fichier : cette commande supprime le fichier
précisé. Avant l'effacement, une confirmation est demandé
à l'utilisateur. Celui-ci doit répondre en tapant y
pour confirmer l'effacement, ou en tapant n pour l'annuler.
Supprimer le fichier tempo du sous-répertoire
TEST en tapant : rm tempo
Confirmer en répondant y à la demande
de confirmation.
Vérifier que la suppression a bien eu lieu, en tapant à nouveau
: ls -a
- rmdir nom_répertoire : permet de supprimer un
répertoire vide.
Se placer dans le répertoire principal en tapant cd,
puis effacer le sous-répertoire TEST en tapant :
rmdir TEST
- more nom_fichier : permet d'afficher le contenu de nom_fichier,
page par page, dans la fenêtre
système. Pour passer à la page suivante (tant que le fichier
n'a pas été entièrement affiché), il suffit
d'appuyer sur la barre d'espace. Pour arrêter l'affichage, il suffit
de taper q
Consulter le contenu du fichier .cshrc en tapant
more .cshrc
- impu3 nom_fichier : cette commande permet d'imprimer un
fichier sur l'imprimante du bâtiment U3 (ne pas en abuser !).
- man nom_commande_ou_fonction : cette commande permet d'afficher une
documentation complète (en anglais...), appelée "manuel électronique", concernant
soit une commande UNIX (comme celles qui viennent d'être décrites ci-dessus), soit une
"fonction prédéfinie" du langage C, appartenant à l'une de ses bibliothèques standard
(comme la fonction getchar, qui appartient à la "bibliothèque
des entrées/sorties standard", et qui a été décrite dans la
première séance de travaux dirigés).
Deux de ces fonctions prédéfinies, printf (qui elle aussi a été décrite dans la
première séance de travaux dirigés) et exit,
ont un nom qui désigne également une commande UNIX.
Pour ces cas particuliers, il existe une commande permettant d'obtenir
l'affichage de tous les manuels électroniques concernant les objets de même nom :
- man -a printf affiche les manuels électroniques de la commande UNIX
de nom printf et de la fonction C de nom printf
- man -a exit affiche les manuels électroniques de
la commande UNIX de nom exit et de la fonction C de nom exit
Consulter la documentation de la commande impu3 en tapant
man impu3
Remarque :
Les commandes sous UNIX doivent être tapées
en minuscules. Le choix de majuscules ou de minuscules dans le nom d'un
répertoire ou d'un fichier doit être respecté lors
de sa désignation (exemple : TeMpO est différent
de tEmPo).
7. Utilisation du compilateur gcc.
La commande gcc permet de réaliser la
"compilation" et "l'édition de liens" des programmes écrits en langage C :
- La compilation permet de vérifier que
la syntaxe du programme répond aux règles grammaticales du
langage C.
- L'édition de liens permet de produire le "programme exécutable" directement exécutable
par la machine.
Pour atteindre ce double but, à partir d'un programme C écrit dans un fichier de nom
nom_source.c, la commande suivante peut être lancée :
gcc -ansi -pedantic -Wall -Werror -o nom_executable nom_source.c
À l'issue de l'exécution de cette commande, soit un ensemble d'erreurs
ont été détectées et sont présentées
à l'utilisateur pour qu'il les corrige, soit un fichier contenant un programme exécutable est créé, de nom
nom_executable. Pour lancer l'exécution de ce programme exécutable, il suffit de
taper, dans une fenêtre système, le nom du fichier contenant le programme exécutable.
Il peut encore se produire des erreurs ("erreurs à l'exécution") lors de l'exécution d'un programme
exécutable. Ces erreurs sont en général les plus difficiles à corriger.
Remarques :
- Le nom de la commande gcc signifie gnu C
compiler.
- L'option -ansi signifie que la compilation est effectuée selon la norme
ANSI.
- L'option -pedantic (qui signifie "pédant" en anglais) indique qu'aucune entorse
à la norme ANSI ne sera admise !
- L'option -Wall signifie que tous les messages d'avertissement
("Warning") seront systématiquement affichés (le caractère W est une lettre
majuscule).
- L'option -Werror signifie que la présence de messages
d'avertissement à la compilation empêche la production d'un programme exécutable.
- L'option -o est l'abréviation de "output" ("résultat"). Le paramètre qui suit
cette option désigne le nom du fichier qui contient le programmme exécutable. Si cette option est omise
(ainsi que le paramètre qui la suit), c'est-à-dire si on lance la commande :
gcc -ansi -pedantic -Wall -Werror nom_source.c
alors le fichier contenant le programme exécutable portera, par défaut, le nom a.out
En réalité, plutôt que de taper la commande :
gcc -ansi -pedantic -Wall -Werror -o nom_executable nom_source.c
qui est relativement longue à écrire, il est préférable de
redéfinir la séquence gcc -ansi -pedantic -Wall -Werror, qui est toujours la
même, par un "alias" (c'est-à-dire par un "surnom"). La manière de définir un alias
sera décrite dans le prochain paragraphe.
8. Logiciel d'édition de texte asedit.
Pour écrire les fichiers, il est quasi-indispensable d'utiliser un logiciel d'édition
de texte. Nous conseillons d'utiliser l'éditeur de texte asedit.
- Lancer l'éditeur de texte asedit en tapant asedit &
dans la fenêtre système.
- Charger le fichier .cshrc en cliquant sur File
puis en sélectionnant Open...
- À l'aide de la souris, se positionner juste après la ligne alias h history
et créer une nouvelle ligne.
- Sur cette nouvelle ligne, taper la ligne suivante :
On doit obtenir le contenu suivant :
#ident "$Header: stdcshrc,v 1.4 90/04/08 16:27:39 integ Exp $"
# This is the default standard profile provided to a user.
# They are expected to edit it to meet their own needs.
if ( $?prompt ) then
/bin/stty erase "^H" kill "^U" intr "^C" eof "^D" susp "^Z" hupcl echoe -tostop
endif
alias ls 'ls -C'
alias h history
alias gcc "gcc -ansi -pedantic -Wall -Werror"
set history=100
set lineedit
set filec
|
- Sauvegarder la modification en cliquant, dans le menu File,
sur Save. Fermer la fenêtre.
- Taper la commande source .cshrc pour prendre en compte
les modifications qui viennent d'être effectuées dans le fichier
.cshrc
Dorénavant, la commande à taper pour compiler un fichier source sera soit :
gcc -o nom_executable nom_source.c
auquel cas le programme exécutable sera contenu dans le fichier de nom nom_executable,
soit :
auquel cas le programme exécutable sera contenu dans le fichier de nom a.out
9. Logiciel netscape.
Le logiciel netscape est un "navigateur" (ou
"browser") de fichiers, et un interpréteur de programmes
écrits dans les langages HTML, JAVA, etc..., auxquels on peut accéder
par Internet. C'est à l'aide de ce logiciel (version 4 de "Navigator") qu'il sera possible
d'accéder aux sujets des travaux dirigés et des travaux pratiques,
à la correction des exercices ainsi qu'à diverses autres
informations.
- Lancer le logiciel netscape en tapant netscape &
dans la fenêtre système.
- Une fenêtre de demande d'agrément apparaît. Cliquer
sur Accept. Une fenêtre netscape apparaît au bout
d'un temps plus ou moins long.
- Cliquer sur Edit et sélectionner Preferences...
Dans la partie gauche de la fenêtre qui s'ouvre, cliquer sur Navigator puis,
dans la partie droite, cliquer sur Home page
- Enfin, au niveau de Location:, taper :
file:/users/linfg/linfg0/welcome.html |
Ceci permettra à l'utilisateur d'accéder, lors des prochains lancements du logiciel
netscape, aux "pages" du module 4, en
cliquant sur l'icône de la maison, de titre Home.
Après chargement de la page d'accueil du module 4, il est
possible de naviguer de "liens" en "liens" (un lien
renvoie à une autre page ou à un autre endroit de la même
page).
Application :
- Cliquer sur Séance 1 dans la Liste des
travaux dirigés. Une page correspondant à cette
séance apparaît.
- Cliquer sur Exercice 2. L'énoncé de l'exercice
apparaît.
- Cliquer à nouveau sur Exercice 2. La correction
de l'exercice est affichée (les corrections des exercices ne seront disponibles
qu'au fur et à mesure du déroulement du module).
- Pour revenir à la page précédente, il suffit de
cliquer sur le bouton Back situé en haut à
gauche de la fenêtre.
Il est possible de recopier directement le texte contenu dans une page
présentée par netscape vers asedit.
Pour cela :
- Lancer asedit à partir de la fenêtre système.
- Dans netscape, positionner la souris au début
de la zone à recopier.
- Appuyer sur le bouton de gauche de la souris.
- Faire glisser la souris jusqu'à la fin de la zone à recopier
(selon les cas, la zone sélectionnée apparaît en surbrillance
ou non). Relacher le bouton.
- Rendre la fenêtre asedit active et positionner
la souris dans celle-ci.
- Cliquer sur le bouton du milieu de la souris. Le texte est recopié
automatiquement.
10. Conseils pour l'écriture des programmes en C.
Outre l'utilisation, fortement conseillée, de commentaires, un certain nombre de conventions,
plus ou moins standard (mais qui ne sont en aucun cas spécifiées
par la norme ANSI) permettent de garantir une lisibilité optimale des programmes C.
10.1. Convention sur l'utilisation des lettres majuscules et minuscules.
En langage C, l'écriture des "identificateurs" (noms de constantes, de variables,
de fonctions, etc...) doit rester identique tout au long d'un programme, quant
au choix des majuscules et des minuscules.
Exemple :
int Aa,aA; /* Aa et aA sont des variables différentes. */
Dans la mesure du possible, on écrira les constantes en majuscules et les autres identificateurs
en minuscules.
10.2. Règles d'indentation.
Par ailleurs, il existe un certain nombre de conventions concernant "l'indentation".
On appelle "indentation" l'utilisation de caractères séparateurs (espace, tabulation et retour-chariot)
pour bien visualiser l'agencement des différentes parties d'un programme.
Exemple :
int bonne_indentation(int d)
{
int cpt;
if (d!=0)
{
cpt=0;
while (d!=0)
{
d=d-1;
cpt=cpt+1;
}
return(cpt);
}
else
{
return(0);
}
}
On peut donc retenir les règles suivantes :
- On ne doit pas écrire deux instructions sur la même ligne.
- Chaque caractère { ou } doit être seul sur sa ligne (aux caractères séparateurs
près). En particulier, on évitera systématiquement la séquence composée des deux caractères }; qui est
généralement admise par la norme ANSI (sauf en fin de fonction ou avant le mot-clé else),
et on conseille donc d'utiliser toujours le caractère } seul pour désigner une fin de bloc.
En fait, on verra dans la séance 5 de travaux dirigés que la séquence };
est nécessaire pour la définition des structures.
- Deux instructions de même niveau dans un même bloc doivent commencer sur des colonnes de même numéro.
Ces instructions doivent être décalées vers la droite d'un même nombre de colonnes, par rapport aux
délimiteurs de bloc { et }. Pour effectuer ce décalage, on conseille d'utiliser
soit le caractère de tabulation, soit un nombre d'espaces constant, supérieur ou égal à deux.
- Les deux délimiteurs { et } d'un même bloc doivent se situer
sur des colonnes de même numéro.
Remarque :
Lorsqu'une ligne comporte un trop grand nombre de caractères, elle risque de "déborder" de l'écran, ce qui diminue la
lisibilité du programme. Pour éviter cette situation, on peut utiliser un caractère retour-chariot, comme dans
l'exemple suivant :
identificateur_tres_long=identificateur_beaucoup_trop_long
*identificateur_beaucoup_trop_long;
En revanche, il ne faut pas utiliser cette possibilité au milieu d'une chaîne de caractères,
comme par exemple dans l'exemple suivant :
printf("Ceci est une chaîne de caractères trop longue
et voici un artifice incorrect pour y remédier.\n");
Pour un cas de ce type, il faut utiliser une séquence constituée d'un caractère \ et d'un caractère
retour-chariot, et prendre en compte le fait que tous les caractères qui suivent cette séquence feront partie de la
chaîne de caractères. Il faut donc éviter d'écrire :
printf("Ceci est une chaîne de caractères trop longue \
et voici un artifice correct pour y remédier mais qui \
inclut des tabulations non désirées.\n");
Voici, pour finir, une manière correcte de "couper" une chaîne de caractères trop longue :
printf("Ceci est une chaîne de caractères trop longue \
et voici un artifice correct pour y remédier.\n");
On peut aussi, et c'est certainement le plus simple, utiliser plusieurs constantes
chaînes de caractères qui seront unifiées, à la compilation, en une seule chaîne de caractères :
printf("Ceci est une chaîne de caractères trop longue "
"et voici un artifice encore plus simple pour y remédier.\n");
L'intérêt de cette dernière écriture est qu'elle permet de rajouter des tabulations
au début de la deuxième ligne sans que cela ait de conséquence lors de l'affichage.
11. Exercice 1.
Recopier la correction de l'exercice 1 de la première séance
de travaux dirigés (accessible sur les pages du module 4)
dans la fenêtre asedit. Sauvegarder le programme dans le fichier
ex1.c, le compiler puis l'exécuter.
12. Exercice 2.
Écrire un programme qui détermine si une phrase entrée au clavier, d'au plus
100 caractères, terminée par un retour-chariot, est un palindrome.
On suppose que le texte n'est composé que de lettres minuscules
non accentuées, que les mots ne sont séparés que par
des espaces, et qu'il n'y a aucune ponctuation.
Un palindrome est un mot ou une phrase qui n'est pas modifié lorsqu'on
inverse l'ordre des lettres qui le composent.
Exemples de palindromes :
- ressasser
- elu par cette crapule
- tu l as trop ecrase cesar ce port salut
Ces pages ont été réalisées
par A. Crouzil, J.D. Durou et Ph. Joly.
Pour tout commentaire, envoyer un mail à
crouzil@irit.fr, à durou@irit.fr ou à Philippe.Joly@irit.fr.