1 Programmation système ? 2 Programmer en C sous linux. IDE. Editer son code.
Compiler : gcc. Outil de build. Debugguer. 3 Les includes importants de la ...
Unix - e2i5 - Introduction à la programmation système sous Linux Laurent Bobelin UJF
2011 L.Bobelin (MESCAL)
2011
1 / 31
1
Programmation système ?
2
Programmer en C sous linux IDE Editer son code Compiler : gcc Outil de build Debugguer
3
Les includes importants de la programmation système
4
Gestion de chier Pourquoi ? Comment ?
L.Bobelin (MESCAL)
2011
1 / 31
Programmation système ?
Dénition Dans les cours d'Unix précédents, vous avez appris à utiliser le système d'exploitation linux. Programmation système Développement de programmes qui font partie du système d'exploitation d'un ordinateur, qui en réalisent les fonctions, qui utilisent les fonctions avancées de celui-ci.
Exemples L'accès aux chiers, la gestion des processus, la programmation réseau, les entrées/sorties, la gestion de la mémoire... But du cours Le but de ce cours est de vous apprendre comment interagir avec un système d'exploitation de type Unix, et mettre en oeuvre les diérents mécanismes système classiques. L.Bobelin (MESCAL)
2011
2 / 31
Programmation système ?
Pourquoi la programmation système ? Les principales applications : La création de plusieurs processus Tout ce qui a trait à l'accès de ressources de manière concurrente par plsuieurs processus s'exécutant sur le même processeur.
Partage de données entre plusieurs processus (un exemple classique est le producteur/consommateur) Partage de ressources entre plusieurs processus, avec une possible exclusion mutuelle. ...
Les communications entre processus (échanger des données qui ne sont pas partagées) La synchronisation entre processus (ne pas lire des données qui ne sont pas complètement écrite) L.Bobelin (MESCAL)
2011
3 / 31
Programmation système ?
Pourquoi sous linux et comment
Les concepts sont généraux et se retrouvent dans tous les systèmes d'exploitation Les sources du noyau de linux sont accessibles et open source, Les interfaces sont normalisées (norme posix) Le noyau linux est écrit en C, Pour faire de la programmation système sous linux, il faut donc savoir comment coder en C sous linux.
L.Bobelin (MESCAL)
2011
4 / 31
Programmer en C sous linux
1
Programmation système ?
2
Programmer en C sous linux IDE Editer son code Compiler : gcc Outil de build Debugguer
3
Les includes importants de la programmation système
4
Gestion de chier Pourquoi ? Comment ? L.Bobelin (MESCAL)
2011
5 / 31
Programmer en C sous linux
Les diérentes tâches Pour programmer sous linux, on a besoin : D'éditer son code, De le compiler, De le builder, De le débugguer. La plupart du temps, on utilise un IDE (Eclipse, Netbeans ... regroupent l'ensemble de ces fonctionnalités). Pourquoi utiliser autre chose ? Lorsque l'on travaille sur des machines distantes, il est parfois dicile d'utiliser des outils nécessitant d'exporter le X. Les IDE reposent sur la plupart des outils que nous allons lister pour chacune des fonctionnalités qu'ils orent. Il est parfois utile de comprendre ce que l'on génère avec un IDE (pour voir ce qui ne va pas). L.Bobelin (MESCAL)
2011
5 / 31
Programmer en C sous linux
Eclipse Eclipse (projet de la Fondation Eclipse) : environnement de développement libre, extensible, universel et polyvalent. Créé en 2001 sous l'impulsion d'IBM pour contrer Sun qui a son propre IDE (NetBeans). Architecture volontairement orienté vers l'ajout de plugin. Permet de gérer des projets dans plus de 20 langages diérents. Maintenu, mis à jour régulièrement. Très répandu en entreprise. Mais ce n'est pas le seul !
L.Bobelin (MESCAL)
2011
6 / 31
Programmer en C sous linux
1
Programmation système ?
2
Programmer en C sous linux IDE Editer son code Compiler : gcc Outil de build Debugguer
3
Les includes importants de la programmation système
4
Gestion de chier Pourquoi ? Comment ? L.Bobelin (MESCAL)
2011
7 / 31
Programmer en C sous linux
Les outils à disposition Si l'on ne dispose pas d'achage graphique, on doit passer par un éditeur en ligne de commande, tels que : vi : date de ... 1976. Installé par défaut sur l'immense majorité des linux. emacs : date aussi de 1976. A peine moins installé que vi. Utilise lisp pour ses plug-in. A de nombreux fans. nano : date de 2000. Inclus la coloration syntaxique par exemple. pico : éditeur de texte par défaut pour le logiciel CLI pine (email). Sous licence. nano est basée sur l'interface pico.
L.Bobelin (MESCAL)
2011
7 / 31
Programmer en C sous linux
Editeur de texte vi vi : Visual Interface Ecrit par Bill Joy en 1976 (Unix BSD), Vi est l'un des éditeurs de texte CLI les plus populaires sous Linux (avec Emacs). Editeur en mode texte, ce qui signie que chacune des actions se fait à l'aide de commandes texte. (Très pratique en cas de non fonctionnement de l'interface graphique ...). Très puissant par un système de commandes (et de macros) On ne quitte jamais le clavier des doigts, donc très rapide quand on a l'habitude
L.Bobelin (MESCAL)
2011
8 / 31
Programmer en C sous linux
vi : modes de fonctionnement Vi possède plusieurs modes de fonctionnement. Les 2 principaux modes sont : Mode commande : mode à l'appel de l'éditeur.De nombreuses commandes peuvent être eectuées avec des séquences de touches simples :
Exemple1 : d3w pour "delete 3 words" eace les 3 mots qui suivent Exemple2 : c2fa pour "change le texte jusqu'à ce qu'il trouve le 2ième a" Les touches tapées en mode commande ne sont pas insérées dans le texte
Mode insertion :
Le texte tapé est inséré dans le document Passage d'un mode à l'autre ESc ou a A i I ...
L.Bobelin (MESCAL)
2011
9 / 31
Programmer en C sous linux
vi : commandes de base
Depuis le SHELL, pour appeler vi : vi nom_chier . Crée le chier si il n'existe pas (si on a les droits ...) Pour sauvegarder un chier, en mode commande : :w (pour enregistrer) q (pour quitter) Pour sortir sans sauvegarder, en mode commande : :quit ! (ou q !)
L.Bobelin (MESCAL)
2011
10 / 31
Programmer en C sous linux
Autres commandes de base Déplacements : h, j, k, l pour se déplacer caractère par caractère w, b pour se déplacer par mot ngg pour aller à la nième ligne (identique à :n) $, ^
pour aller en n ou en début de ligne Eacement : x pour eacer un char dd pour eacer une ligne (ndd pour eacer n lignes) Recherche : /motif pour rechercher un motif (n pour trouver le suivant) Remplacement : r remplace le char sur lequel on se trouve par celui qui sera tape apres le r cw pour "change word" Commande a l'appel : vi -c "1,%s/Deux/Trois/g|:wq" mon_fichier L.Bobelin (MESCAL)
2011
11 / 31
Programmer en C sous linux
Conclusion sur vi
On utilisera une version améliorée : vim Vim : logiciel libre. Son code source a été publié pour la première fois en 1991 par Bram Moolenaar, son principal développeur. VI aMélioré car il possède un langage de macro. Il existe aussi une version graphique de vi permettant l'utilisation de la souris (gvim) non installée dans la salle Linux 216.
L.Bobelin (MESCAL)
2011
12 / 31
Programmer en C sous linux
Compiler : gcc GCC et gcc GCC (GNU Compiler Collection, à l'origine GNU C Compiler). Permet de compiler du C, Mais aussi du C++, Ada, Fortran, Pascal, VHDL, D, Objective C... On parle de gcc quand on veut compiler du C. gcc (gnu c compiler) gcc est utilisé pour compiler le noyau linux gcc a de très nombreuses options (une quarantaine). Les plus utilisées sont : -I : include -L : link -l : librairies à linker -O : optimisation du code -Werror : Warning traités comme des erreurs -D : passer des paramètres
L.Bobelin (MESCAL)
2011
13 / 31
Programmer en C sous linux
gcc Beaucoup d'options : beaucoup de possibilités de se tromper ! Un exemple d'appel gcc pris au hasard :
/usr/bin/gcc -Dgras_EXPORTS -O0 -Wall -Wunused -Wmissing-prototypes -Wmissing-declarations -Wpointer-arith -Wchar-subscripts -Wcomment -Wformat -Wwrite-strings -Wno-unused-function -Wno-unused-parameter -Wno-strict-aliasing -Wno-format-nonliteral -Werror -L/usr/lib -I/usr/include -g3 -fPIC -I/home/lbobelin/postdoc/projects/simgrid/simgrid -I/home/lbobelin/postdoc/projects/simgrid/simgrid/include -I/home/lbobelin/postdoc/projects/simgrid/simgrid/src -I/home/lbobelin/postdoc/projects/simgrid/simgrid/src/include -I/home/lbobelin/postdoc/projects/simgrid/simgrid/build -I/home/lbobelin/postdoc/projects/simgrid/simgrid/build/include -I/home/lbobelin/postdoc/projects/simgrid/simgrid/build/src -o CMakeFiles/gras.dir/src/gras/Virtu/gras_module.c.o -c /home/lbobelin/postdoc/projects/simgrid/simgrid/src/gras/Virtu/gras_module.c L.Bobelin (MESCAL)
2011
14 / 31
Programmer en C sous linux
gcc gcc est le compilateur standard sous linux Il existe des portages sur les principaux OS (windows, macOS) et pour beaucoup de microprocesseurs (AMD64, ARM, DEC Alpha, M68k, MIPS, PowerPC, SPARC, x86, Hitachi H8). Il existe des alternatives (PathScale, TinyCC) mais leur utilisation reste exotique. On utilisera gcc pour compiler. Mais comme tout compilateur, il a ses inconvénients ... gcc est un outil très puissant ... ... Utilisable "à la main" quand on travaille sur des micro-projets, Il est vital d'utiliser des outils de build dès que l'on passe à des projets de taille même moyenne L.Bobelin (MESCAL)
2011
15 / 31
Programmer en C sous linux
Build ? Dénition construction de l'exécutable à partir des sources fournis et des bibliothèque à lier.
Il existe beaucoup d'outils de build : make : outil de build sous-jacent a pas mal de IDE. Se base sur des Makele. ant : Même utilisation que make, mais plus facile d'accès. Utilisé par NetBeans pour générer du code. Orienté java à la base. Syntaxe XML. Automake/Autoconf : outil GNU pour faire du "make", mais portable. Génère un Makele. cmake : moteur de production multiplate-forme. Permet de générer les chier make (mais pas forcément) avec une interface de plus haut niveau. 2 phases : on génère les chier de build (makele par exemple) et ensuite on utilise ces chiers. De plus en plus utilisé (gcc par exemple pour se compiler) L.Bobelin (MESCAL)
2011
16 / 31
Programmer en C sous linux
make Maintient la cohérence entre un programme exécutable et les chiers source permettant de le produire. basé sur les dates de dernière modication de chier nécessite un script contenant des règles chaque règle indique le moyen de construire une cible particulière à partir des ressources dont il a besoin si une cible est moins récente que une de ses cibles, elle est automatiquement reconstruite. Exécution : make -f [ fichier_script]
[cible]
si l'option -f est absente, le chier du répertoire courant appelé Makele ou makele est utilisé. Si cible est absente, la première cible est considérée L.Bobelin (MESCAL)
2011
17 / 31
Programmer en C sous linux
Makele : syntaxe # : commentaire jusqu'à n de ligne Chaque règle contient : La première ligne : une cible ' : ' un ensemble des ressources dont dépend la cible Les lignes suivantes : commencent par une tabulation expriment les commandes à exécuter pour construire la cible Exemple
# Construction du programme executable executable : fich1.o fich2.o fich3.o gcc -ansi -Wall -o executable fich1.o fich2.o fich3.o # Construction du fichier fich1.o fich1.o : fich1.c fich1.h fichier_entete.h gcc -ansi -Wall -o fich1.o -c fich1.c
L.Bobelin (MESCAL)
2011
18 / 31
Programmer en C sous linux
Makele : un exemple CC=gcc RM=rm -f CFLAGS= - ansi -Wall OBJECTS = f1.o f2.o all: executable # %.o : %.c similaire .c.o # $< premiere dependance %.o: %.c fichier.h $(CC) $(CFLAGS) -c $@ $< # $@ indique le nom de la cible executable: $(OBJECTS) $(CC) $(CFLAGS) -o $@ $(OBJECTS) # Si un fichier clean existe - execution de la commande .PHONY : clean clean: $(RM) $(OBJECTS) executable *~
Construction automatique de la liste des chiers objets SRC= hello.c main.c OBJECTS= $(SRC:.c=.o)
Commande silencieuse pour ne pas acher les messages @$(CC) $(CFLAGS) -c $@ $