Programmation Système et Réseau (sous Linux) T. KOUKI tarkou2001@yahoo.fr
Plan du module Chapitre 0 : Rappels et outils de développement. Chapitre 1 : La gestion des processus. Chapitre 2 : La gestion des signaux. Chapitre 3 : La gestion des entrées/sorties. Chapitre 4 : Programmation réseau avec les sockets.
Chapitre 0: Rappels et outils de développement. Programme et arguments. La commande gcc et ses principales options. Création des librairies ou bibliothèques. Utilitaires intéressants: strip, nm, strace, …
Programme & arguments int main(int argc, char **argv, char **arge) argc : argument count : Compte le nombre d'arguments passés au programme à l'exécution. argv : argument variable : Tableau de chaînes de caractères : Contient la liste des paramètres passés au programme à l'exécution. arge : argument environment : Tableau de chaînes de caractères : Contient l'environnement de travail de l'user. Exemple : Écrire un programme qui calcule et affiche le factoriel d'un entier passé comme paramètres.
La commande gcc et ses principales options gcc: Gnu C Collection : Collection C de GNU Par défaut : gcc génère un binaire exécutable a.out. Accepte plusieurs options; à titre d'exemple : -g Ne pas effacer les informations de débogage. -c Compiler uniquement. -o Output : Générer l'exécutable. -E S'arrêter après le prétraitement (pas de compilation) -S S'arrêter après la compilation (pas d'assemblage) -Wall Afficher tous les messages d'avertissement.
Création de bibliothèques statiques Extraire le code de la fonction et le recopier dans le binaire exécutable Chargement direct en mémoire du programme à exécuter. Les bibliothèques correspondantes sont construites avec l'utilitaire ar et ont .a comme extension. Le code de la fonction est chargé en mémoire centrale autant de fois qu'il y a de processus qui l'utilisent. Les applications construites sont figées. Si la bibliothèque est modifiée les applications déjà construites utiliseront toujours l'ancienne version.
Création de bibliothèques statiques (suite) Compile: gcc -Wall -c ctest1.c ctest2.c Créer la bibliothèque "libctest.a": $ar -cvq libctest.a ctest1.o ctest2.o Lister les fichiers contenus dans la bibliothèque $ar -t libctest.a Lier avec la bibliothèque: $gcc -o executable-name prog.c libctest.a $gcc -o executable-name prog.c -L/path/to/library-directory -lctest
Création de bibliothèques statiques (suite) ctest1.c void ctest1(int *i) { *i=100; } void ctest2(int *i) { *i=90; }
Création de bibliothèques statiques (suite) $vi prog.c #include <stdio.h> void ctest1(int *); void ctest2(int *); int main() { int x; ctest1(&x); printf("Valx=%d\n",x); return 0; } $
Création de bibliothèques statiques (suite) Remarque. Les bibliothèques ".a" sont conceptuellement les mêmes que les bibliothèques statiques ".lib" du Visual C++ (ou du d'un compilateur C classique sous DOS/Windows)
Création de bibliothèques dynamiques Motivation : ? Comment générer un shared object: (Dynamically linked object library file.) Créer le programme objet. Créer la bibliothèque. Optionnellement: Créer une version par défaut en utilisant un lien symbolique.
Création de bibliothèques dynamiques (suite) gcc -fPIC -c objfile1.c gcc -fPIC -c objfile2.c gcc -fPIC -c objfile3.c gcc -shared -o libmylib.so objfile1.o objfile2.o objfile3.o gcc -o foo -L. -lmylib foo.c
Commandes utiles strip : Éliminer les symboles des fichiers objets. nm : Afficher la table des symboles. Principaux symboles (man nm) strace : Ensemble d'appels système + Ensemble des signaux reçus. gprof : Détailler combien de temps processeur dure chaque fonction et combien de fois elle a été appelée (profil plat) ainsi que le nombre de fois où elle a été appelée par différentes fonctions (graphe d'appels) Fonctions prenant la majorité du temps processeur les optimiser.
Commandes utiles (suite) gdb: gnu debugger : Outil de mise au point de programmes. Intègre pas mal de fonctionnalités : notamment l'exécution étape par étape, visualisation du contenu des variables, … $ man gdb Commandes intéressantes : (voir document joint)