SlideShare une entreprise Scribd logo
1  sur  80
http://www.isima.fr/~loic
Septembre 2016
1
2
Plan
• Déboguer en texte
• Xlib
• Arbres
• Systèmes
DÉBOGUER
Adaptation et traduction d'un tutorial écrit par Guy Keren
http://users.actcom.co.il/~choo/
4
En situation
• Programme syntaxiquement correct
MAIS
1. Programme avec un comportement aléatoire
2. Programme planté ?
 Message Segmentation Fault
 Fichier coredump (peut être très gros)
5
Déboguer ?
• A la main
 Afficher le nom des variables / valeurs
 Macro DUMP
• Utiliser un débogueur…
 gdb ou confrères
• Utiliser un éditeur de développement avec
débogueur intégré
 Eclipse, Visual, Borland
• Programmes tiers
 valgrind (erreurs de contexte + fuite mémoire)
6
Avertissement
• L'affichage printf pour un programme est une
tache qu'il est possible/souhaitable de remettre à
plus tard
• Forcer l'affichage avec fflush(stdout);
for (i = 0; i >= 0; ++i)
{
printf("%d", i);
}
7
Préalable
• Compiler tous les programmes avec l'option de
profilage –g
 Attention cela ralentit la compilation et l'exécution
• Lancer gdb / ddd dans le répertoire où se
trouvent les sources
 Plus facile
 Informations sur les lignes à problème
8
Invoquer gdb
• produit GNU au format texte
• "Surcouches" graphiques
 xgdb
 ddd
gdb executable
gdb executable fichier_core
gdb executable numero_processus
9
Exécuter un programme
Raccourci : r
Quitter : quit ou q
run
run paramètres_ligne_commande
run 10 "2eme param"
[ddd] paramètres spécifiés dans un
menu
10
Point-d'arrêt (1)
• Break point
• Arrêter le programme à un point donné
 Idéalement avec le bogue présumé
• A une ligne donnée
• A chaque fois qu'une fonction est appelée
break fonction
break prog.c:115
Raccourci : b
[ddd] click
11
Point-d'arrêt (2)
• Connaître les points d'arrêt
• Effacer des points d'arrêt
• Faire des points d'arrêts conditionnels
 Arrêter le programme si une condition est
réunie
help break
help breakpoints
continue (raccourci c)
12
Avancer dans l'exécution
• Exécute la commande courante et s'arrête
 Affiche la prochaine commande
• Exécute la commande courante
 Si la commande est une fonction, s'arrête au
début de cette fonction
step
next
13
Afficher des variables/expressions
• Afficher la valeur d'une variable
 Doit être accessible au moment de l'évaluation
• Afficher la valeur de toute expression
print i*i
p 3*i
print argv[argc-1]
print max(5, 10)
print i
print variable
[ddd] survol souris
14
Pile d'appel de fonctions ?
• Quelle fonction s'exécute ?
• Par qui a-t'elle été appelée ?
#0 fonction_courante
#1 in fonction_appelante
#2 in fonction_appelante_2
where
15
Contexte / Frame
• #n : numéro du contexte
#0 fonction_courante
#1 in fonction_appelante
frame 1
print i
Affiche la variable i de fonction_appelante
up (u)
down (d)
16
Déboguer un programme en cours
• Par paresse ?
• Programme dont l'initialisation est trop longue …
1. Le programme se met en pause
2. Faire les manipulations
3. Quitter gdb = le programme continue
gdb programme processus_id
gdb prog 16354
17
Fichier core/coredump (1)
• Obtenu au plantage d'un programme
• Le plantage n'est pas toujours facile à
reproduire
• Image mémoire d'un processus
• Pleins d'infos si options –g
 Pile d'appels, contenu de variables, …
• Le fichier n'est PAS toujours fiable
 il peut être corrompu si la mémoire l'est
18
Fichier core/coredump (2)
• Donner les chemins des fichiers s'ils ne sont
pas dans le répertoire de lancement de gdb
• Toutes les commandes ne sont pas
disponibles
  : commandes d'exécution (next)
  : print, where, frame
gdb programme fichier_core
19
Aller plus loin…
help (h)
help mot_clé
Exemples :
• Gérer des fichiers sources dans plusieurs répertoires : dir
• Lister des lignes de code : list ou l
Documentation officielle :
http://www.cs.utah.edu/dept/old/texinfo/gdb/gdb_toc.html
1. Généralités
2. Événements
3. Contexte graphique
21
X Windows System
• Système graphique d’affichage sous UNIX
 X11
 X
• Terminal texte α
• Gestion des événements asynchrone
22
Xlib
• Bibliothèque de bas niveau
 Orientée événements (X / Protocole X)
 Pas orientée composants (widgets)
 Principales fonctions/déclarations préfixées par X
• Base pour des bibliothèques de plus haut niveau
 Intrinsics (Xt)
 Motif
 Qt
 GTK
 SDL
• Peu d’alternatives
23
Un peu d’histoire
• 1980 : MIT – Projet ATHENA
• 1984 : Protocole X – Xlib
• 1987 : Réécriture de X11R1 + Intrinsics
• 1988 : fondation consortium X
 Dernière version X11R6.3 en 1997
• 1992 : projet XFree86
• 1997 : fondation de the Open Group
• 1999 : projet X.org
• 2012 : sortie en X11R7.7
24
Concepts
• Modèle client-serveur
• Protocole X
• Evénements
• Display / écrans
• Ressources
éventuellement
partagées
• Fenêtres
• Contextes graphiques
• Polices de caractères
• Cartes de couleurs
• Curseurs
• Pixmaps
25
Relation client-serveur
Serveur
Client
Client
Client
Protocole de communication
Service
Demandeur
Réseau (IP)
Même machine (IPC)
26
Client X / Serveur X
• Deux processus distincts
• Communication grâce au protocole X
• Client X
 Programme utilisateur qui exploite le serveur X
 Soumets de requêtes d’affichage
 Gère l’interaction avec l’utilisateur
• Serveur X
 Gestion et contrôle des E/S
 Gère un display (écran(s), souris, clavier)
• Inversion géographique par rapport au modèle
classique
27
Protocole X
• Description de la communication entre le
client et le serveur X
• Gestion asynchrone des événements
 Pas d’attente de synchronisation
 Zones mémoire tampon
• Indépendant de l’architecture
 Réseau TCP/IP
 Inter Processus Communication
28
Serveur X / Display
Carte graphique
Mémoire
Périphériques d’entrée sortie
Multi écrans ?
Multi écrans ?
Problématiques / portabilité
• Taille de l’écran
• Nombre de couleurs (profondeur)
29
1 serveur X, 1 display, 1 écran
a110.isima.fr:0.0
1 serveur X, 1 display, 2 écrans
a110.isima.fr:0.0 et a110.isima.fr:0.1
Clients X
Serveur
Terminal
Terminal
Réseau
Protocole X
30
Fenêtre
• Composant de base obligatoire
• Hiérarchie de fenêtres
 Fenêtre racine root non modifiable
 Client particulier : le gestionnaire
• Tous les événements/actions se font relativement
à une fenêtre
 Une seule fenêtre reçoit les événements claviers
• Le client est responsable de l’affichage, pas le
serveur
 Fenêtre pas affichée par défaut
31
Evénements (1)
1. Entrées-sorties
 Appui sur une touche (avoir le focus)
 Clic de souris
2. Gestion des fenêtres
 Affichage/rafraîchissement de fenêtre (Exposure)
 Redimensionnement
 Mise en icône
3. Changement de configuration
4. Communication entre clients
32
Evénements (2)
• Relatifs à une fenêtre
 Propagation dans la hiérarchie
 Sélection et filtre
• Asynchrones
• Pour le client
 boucle principale d’attente et de gestion
• Structures XEvent
33
Quelques rappels de codage
0 0 0
0 1 1
1 0 1
1 1 1
0 0 0
0 1 0
1 0 0
1 1 1
0 0 0
0 1 1
1 0 1
1 1 0
OU
|
ET
&
OU EXCLUSIF
XOR
Mettre à 1 les bits
d’un masque en fonction de certains critères
Afficher deux fois un pixel l’efface
34
Ecrire un programme
1. Déclarations & initialisations générales
2. Connexion au serveur X
3. Initialisations spécifiques X
• Créer les ressources
• Afficher la fenêtre
4. Boucle principale
• Réception & analyse des événements
5. Libération des ressources
35
Inclusions des entêtes
• Entêtes spécifiques à adapter, au minimum
• Ne pas oublier de mettre l’option –lX11
à l’édition des liens
• Préciser les chemins
 des bibliothèques –Lrépertoire
–L/usr/X11R6/lib par exemple
 Des entêtes -Irépertoire
#include <X11/Xlib.h> /* ou */
#include <X11R6/Xlib.h>
/* et d’autres suivant l’utilité */
36
Window root;
Window win;
Display * dpy;
int ecran;
unsigned int wpx,
bpx;
XEvent ev;
unsigned int mask;
Fenêtre racine
Fenêtre à créer
display
écran par défaut
couleur d’avant-plan
couleur de fond
événement
masque
Déclarations
37
Connexion & informations
dpy = XOpenDisplay(0);
ecran = DefaultScreen(dpy);
root = DefaultRootWindow(dpy);
bpx = BlackPixel(dpy,ecran);
wpx = WhitePixel(dpy,ecran);
Macros de convenance : ne commencent pas par X
Ouverture de la connexion
Tester si NULL
Récupération d’informations
Couleurs utilisées par l’écran
38
Créer une fenêtre
win = XCreateSimpleWindow( dpy,root,0,0,
LARGEUR,HAUTEUR,6,wpx,bpx);
XStoreName(dpy,win, "Titre fenêtre");
XSelectInput(dpy,win, ExposureMask );
XMapWindow(dpy,win);
Sélection des événements intéressants pour la fenêtre
Affichage de la fenêtre
39
Sélection d’événements
Evénement Masque
Valeur
(fictive)
Masque
résultat
00000000
Expose ExposeMask 00000001 00000001
KeyPress KeyPressMask 00000010 00000011
ButtonPress ButtonPressMask 00001000 00001011
ButtonRelease ButtonReleaseMask 00010000 00011011
MotionNotify Button1MotionMask 10000000 10011011
40
while(!sortie)
{
XNextEvent(dpy, &ev);
switch(ev.type)
{
case Expose :
afficheGraphisme();
break;
case KeyPress :
saisie();
break;
case ButtonPress :
default :
puts("Evenement Inconnu !");
break;
}
}
Boucle
principale
variable sortie mise à jour dans une des fonctions
41
Libérer les ressources
• Détruire la fenêtre & fermer la connexion
• Rendre les ressources liées aux
 Contextes graphiques
 Polices de caractères
 Curseurs souris
 Pixmaps
 …
XDestroyWindow(dpy, win);
XCloseDisplay(dpy);
XFreeGC(dpy, gcontext);
42
Contexte graphique
• Toutes les informations pour une opération
graphique
• Dessin d’une forme
 Épaisseur de trait
• Affichage de texte lié à une police de caractères
• Couleur d’avant plan
 foreground color ou white pixel
• Couleur de fond
 background color ou black color
43
GC gcontext;
XGCValues gcv;
unsigned long gcmask;
gcv.foreground = wpx;
gcv.background = bpx;
gcv.line_width = 3;
gcv.function = GXcopy;
gcmask = GCForeground | GCBackground |
GCLineWidth | GCFunction;
gcontext =
XCreateGC(dpy,win,gcmask,&gcv);
Variables
Couleur et trait
Affichage des pixels
(remplacement, XOR…)
Masque pour champs renseignés précédemment
Création du contexte graphique
44
Dessiner
• Dessin dans une boite (largeur, hauteur)
• XDrawLine
• XDrawRectangle
• XFillRectangle
• XDrawArc
• XFillArc
 angles en 64èmes de degrés
(0,0)
y
x
Coin haut gauche
+ largeur
+ hauteur
45
Dans les exemples fournis…
• Comment changer un curseur de souris
 Sablier, pointeur, …
• Comment afficher une chaîne de caractères
 Impossible avec un premier événement
• Saisir une chaîne de caractère
• Charger/libérer une police de caractères
46
Gestion de la couleur
• Gestion compliquée lié à la disparité du
matériel et à l’âge des concepts
 Frame buffer, plan de bits
 Profondeur d’écran depth
• Exemples de visuels visual
 Monochrome, niveau de gris
 Mode direct color & true color (24 bits)
• Palette colormap
 Niveaux de Rouge Vert Bleu
47
Couleurs et fonctions utiles
• XGetVisualInfo();
• DefaultVisual();
• DefaultDepth();
• DefaultColormap();
• XCreateColormap();
• XAllocColorCells();
• XSetWindowColormap();
• XStoreColor();
• XFreeColormap();
48
Images / pixmaps
• pixmap XCreatePixmap (display,
fenetre, largeur, hauteur,
codage_coul);
• XCopyArea(display, drawable_origine,
drawable_destination,
contexte_graphique, origine_x,
origine_y, largeur, destination,
destination_x, destination_y);
• XFreePixmap(display, pixmap);
• XClearWindow(display, fenetre);
49
Au delà du C …
• Concepts X réutilisés partout notamment la
programmation événementielle
• Notions
 Affichage graphique
 Portabilité
• Langages avec interfaces graphiques
quasi-natives
 JAVA
 C#
 Visual C++
• Aller plus loin
 http://pficheux.free.fr/articles/lmf/xlib/
 http://tronche.com/gui/x/xlib/
APERÇU SUR LES ARBRES
51
Arbres
• Structures arborescentes d'éléments
ordonnables
• Efficacité et rapidité des algorithmes
• Moins facile (parfois) à comprendre
• Insertion, suppression de nœuds
• Equilibrage des branches ?
52
10
5 13
3 7 15
91
Racine de l'arbre
Insertion de
5, 13, 7, 15, 3, 9, 1
Nœud
Feuille
53
10
5 13
3 7 15
91
P
R
O
F
O
N
D
E
U
R
Exemple d'arbre
équilibré
54
10
5
3 7
9
Exemple d'arbre
non équilibré
7
5 9
103
Exemple
d'équilibrage
possible
55
Déclaration
struct noeud
{
int valeur;
struct noeud * gauche;
struct noeud * droit;
}
Elément de classement
Fils gauche et fils droit
Données portées ?
g dvaleur
56
Parcours d'arbre
• Affichage ?
• Recherche ?
• Fonctions récursives (facile à comprendre)
 Parcours infixe
 Parcours préfixe
 Parcours postfixe
• Fonctions "dérécursivées"
 Souvent plus efficaces
 Usage d'une pile ?
57
Parcours infixe
void parcours_infixe(struct noeud * r)
{
if (r)
{
parcours_infixe(r->gauche);
printf("Valeur %d", r->valeur);
parcours_infixe(r->droit);
}
}
r
58
10
5 13
3 7 15
91
NULL
Parcours infixe
sur racine "10"
59
Parcours préfixe
void parcours_prefixe(struct noeud * r)
{
if (r)
{
printf("Valeur %d", r->valeur);
parcours_prefixe(r->gauche);
parcours_prefixe(r->droit);
}
}
60
10
5 13
3 7 15
91
NULL
Parcours préfixe
sur racine "10"
61
Parcours postfixe
void parcours_postfixe(struct noeud * r)
{
if (r)
{
parcours_postfixe(r->gauche);
parcours_postfixe(r->droit);
printf("Valeur %d", r->valeur);
}
}
62
10
5 13
3 7 15
91
NULL
Parcours suffixe
sur racine "10"
63
{
while ((r) && (valeur != r->valeur))
{
if (valeur < r->valeur) r = r->gauche;
else r = r->droit;
}
return r;
}
Recherche
struct noeud * recherche
(struct noeud * r, int valeur)
64
void inserer (struct noeud *r,
struct noeud * n)
{
int ind = 0;
struct noeud * prec;
while (r) {
prec = r;
if (n->valeur < prec->valeur)
{
ind = 0; r = r->gauche;
} else {
ind = 1; r = r->droit;
}
}
if (ind) prec->droit = n;
else prec->gauche = n;
}
Insertion
Conditions :
1. L'arbre existe
2. Pas d'équilibrage
65
TD
• Un arbre est créé dynamiquement
• Comment libérer toute la mémoire ?
 Procédure récursive ?
 Parcours correct de l'arbre
C & UNIX
1. Processus
2. Interface
3. Entrées/sorties de bas niveau
67
Processus
• Identifiant unique processus identifier
 Type spécial pid_t
• Processus père (sauf processus 0)
pid_t getppid();
pid_t getpid();
$ echo $$ (shell)
68
Copie de processus (1)
• Création d'un processus fils, copie conforme
du processus père
 Même zone de données et de code
 Même environnement
 Même priorité
 Même description de fichiers
• Exécution concurrente des deux processus
69
Copie de processus (2)
Valeur de retour :
-1 : erreur lors de la création
limite du nombre de processus
0 : processus fils
>0 : processus père, pid du processus fils
Après un fork(), tout se passe comme si chacun
venait de faire un fork()
pid_t fork(); #include <unistd.h>
70
Terminaison de processus
• Terminaison "normale"
 Fin de la fonction main()
 Fonction
• Valeur transmise au shell
 Retour du main()
 Paramètre d'exit()
void exit(int);
0 : fin normale
$ echo $? (shell [k]sh)
> print ERRORLEVEL (win)
71
exit()
• Définie dans
• Sortie propre du programme
 Tampons vidés
 Fichiers fermés
• Libérer la mémoire allouée sur le tas
#include <stdlib.h>
ptr = malloc(…);
if (!ptr) exit(2);
72
#include <stdio.h>
#include <unistd.h>
void main() {
pid_t pid;
switch(pid=fork()) {
case (pid_t) -1 :
printf("Erreur");
exit(2);
case (pid_t) 0 :
/* sleep(100); */
printf("FILS: %d (PERE: %d)",
getpid(), getppid());
exit(0);
default :
printf("PERE:%d (PÈRE: %d)",
getpid(), getppid());
}
Exemple 1
73
int i;
for (i = 0; i < 3; i++) fork();
Exemple 2
• Combien de processus sont créés ?
i=0 i=1
i=1
i=2
i=2
i=2
i=2
74
Interface C / Système
• Faire un appel système
• Passer des paramètres (ligne de commande)
• Flux standards
int system(char *);
int main(int, char **);
system("ls –l");
system("date");
stdin : entrée standard <
stdout : sortie standard >
stderr : sortie d'erreur standard 2>
75
Entrées/sorties de bas niveau
• Fonctions fichiers de haut niveau
 Fonctions textes ou binaires
• Fonctions de bas niveau
 Proches des primitives systèmes
 Plus rapide / plus directe
 Pas de formatage des données
 Pas de mémoire tampon
 Pas toujours portables
• Ne pas mélanger les deux types d'accès sur un même
fichier
76
Descripteur de fichier
• Simple entier pour repérer un fichier
 Equivalent de FILE des fonctions haut niveau
• Valeur réservée ou personnelle
• Nombre de fichiers ouverts simultanément limité
0 stdin
1 stdout
2 stdout
3 Fichier spécial E/S
4 Imprimante
Création / ouverture
• Création
 Permission d'accès en octal
• Ouverture
77
int creat(char * nom, int permission);
int open(char * nom, int mode, int perm);
O_RDONLY Lecture seule
O_WRONLY Ecriture seule
O_RDWR Lecture/écriture
Fonctions et constantes
non standardisées
• fcntl.h (Sys V)
• sys/file.h (BSD)
Fermeture/destruction
• Fermeture
 Permission d'accès en octal
• Destruction
78
int close(int fd);
void unlink(char * nom)
Lecture/écriture/position
• Lecture
 -1 en cas d'erreur, 0 pour EOF, n si tout va bien
• Ecriture
• Position
• PPP
79
int read(int fd, char * tampon, int n);
int write(int fd, char * tampon, int n)
long tell(int fd);
long lseek(int fd, long off, int or);
0 SEEK_SET Début fichier
1 SEEK_CUR Position courante
2 SEEK_END Fin de fichier
80
int getchar(void) {
char c;
return (read(0, &c,1)==1?(int)c:EOF;
}
int getchar(void) {
static char tampon[BUFSIZE];
static char * ptamp = tampon;
static int n = 0;
if (!n) {
n = read (0, tampon, BUFSIZE);
ptamp = tampon;
}
return (--n>=0)?(int)*ptamp++:EOF;
}
Avec buffer
Sans buffer

Contenu connexe

Tendances

Laura mulvey’s male gaze theory
Laura mulvey’s male gaze theoryLaura mulvey’s male gaze theory
Laura mulvey’s male gaze theorySumbul Khan
 
C2 - Langage C - ISIMA 1 - Deuxieme partie
C2 - Langage C - ISIMA 1 - Deuxieme partieC2 - Langage C - ISIMA 1 - Deuxieme partie
C2 - Langage C - ISIMA 1 - Deuxieme partieLoic Yon
 
Ficha de anlisis narrativo la dama de las camelias
Ficha de anlisis narrativo la dama de las cameliasFicha de anlisis narrativo la dama de las camelias
Ficha de anlisis narrativo la dama de las cameliasRoger Fernandez
 
The gangster film genre
The gangster film genreThe gangster film genre
The gangster film genreSubhajit Paul
 
Senderos de gloria
Senderos de gloriaSenderos de gloria
Senderos de gloriaSorayiita_
 
Diapositivas de unamuno
Diapositivas de unamunoDiapositivas de unamuno
Diapositivas de unamunoAskunze
 
nombres aléatoires en langage C
nombres aléatoires en langage Cnombres aléatoires en langage C
nombres aléatoires en langage Cmohamednacim
 
Détecter et réparer les pannes d
Détecter et réparer les pannes dDétecter et réparer les pannes d
Détecter et réparer les pannes dPaul Kamga
 

Tendances (13)

Laura mulvey’s male gaze theory
Laura mulvey’s male gaze theoryLaura mulvey’s male gaze theory
Laura mulvey’s male gaze theory
 
C2 - Langage C - ISIMA 1 - Deuxieme partie
C2 - Langage C - ISIMA 1 - Deuxieme partieC2 - Langage C - ISIMA 1 - Deuxieme partie
C2 - Langage C - ISIMA 1 - Deuxieme partie
 
Ficha de anlisis narrativo la dama de las camelias
Ficha de anlisis narrativo la dama de las cameliasFicha de anlisis narrativo la dama de las camelias
Ficha de anlisis narrativo la dama de las camelias
 
Analisis de bestiario
Analisis de bestiarioAnalisis de bestiario
Analisis de bestiario
 
The gangster film genre
The gangster film genreThe gangster film genre
The gangster film genre
 
Cours de c
Cours de cCours de c
Cours de c
 
Black Mirror
Black MirrorBlack Mirror
Black Mirror
 
Senderos de gloria
Senderos de gloriaSenderos de gloria
Senderos de gloria
 
Chap2fonctionscpp
Chap2fonctionscppChap2fonctionscpp
Chap2fonctionscpp
 
Diapositivas de unamuno
Diapositivas de unamunoDiapositivas de unamuno
Diapositivas de unamuno
 
nombres aléatoires en langage C
nombres aléatoires en langage Cnombres aléatoires en langage C
nombres aléatoires en langage C
 
Western Genre Essay
Western Genre EssayWestern Genre Essay
Western Genre Essay
 
Détecter et réparer les pannes d
Détecter et réparer les pannes dDétecter et réparer les pannes d
Détecter et réparer les pannes d
 

Similaire à C3 - Langage C - ISIMA 1 - Troisieme partie

Les technologies Open Source pour les interfaces graphiques embarquées
Les technologies Open Source pour les interfaces graphiques embarquéesLes technologies Open Source pour les interfaces graphiques embarquées
Les technologies Open Source pour les interfaces graphiques embarquéesAlexandre LAHAYE
 
LINUX : Système, administration et services réseaux
LINUX : Système, administration et services réseauxLINUX : Système, administration et services réseaux
LINUX : Système, administration et services réseauxTaoufik AIT HSAIN
 
composition sommaire pc windows aideinfor
composition sommaire pc windows aideinforcomposition sommaire pc windows aideinfor
composition sommaire pc windows aideinforAideinfor
 
Codedarmor 2012 - 03/04 - Android, What else?
Codedarmor 2012 - 03/04 - Android, What else?Codedarmor 2012 - 03/04 - Android, What else?
Codedarmor 2012 - 03/04 - Android, What else?codedarmor
 
0081-cours-systemes-exploitations.ppt
0081-cours-systemes-exploitations.ppt0081-cours-systemes-exploitations.ppt
0081-cours-systemes-exploitations.pptDenisKouakou1
 
.NET Microframework: du code, de l&rsquo;électronique, de la robotique
.NET Microframework: du code, de l&rsquo;électronique, de la robotique.NET Microframework: du code, de l&rsquo;électronique, de la robotique
.NET Microframework: du code, de l&rsquo;électronique, de la robotiqueMicrosoft
 
lpi 101 notes de cours
lpi 101 notes de courslpi 101 notes de cours
lpi 101 notes de coursISIG
 
MapReduce: Traitement de données distribué à grande échelle simplifié
MapReduce: Traitement de données distribué à grande échelle simplifiéMapReduce: Traitement de données distribué à grande échelle simplifié
MapReduce: Traitement de données distribué à grande échelle simplifiéMathieu Dumoulin
 
Qt4 et 5 pour Linux embarqué
Qt4 et 5 pour Linux embarquéQt4 et 5 pour Linux embarqué
Qt4 et 5 pour Linux embarquéAlexandre LAHAYE
 
Open Wide : Les interfaces graphiques dans l'embarque
Open Wide : Les interfaces graphiques dans l'embarqueOpen Wide : Les interfaces graphiques dans l'embarque
Open Wide : Les interfaces graphiques dans l'embarqueAlexandre LAHAYE
 
Introduction à la SDL2
Introduction à la SDL2Introduction à la SDL2
Introduction à la SDL2Loic Yon
 
Gestion multi-pays & multilingue avec Drupal
Gestion multi-pays & multilingue avec DrupalGestion multi-pays & multilingue avec Drupal
Gestion multi-pays & multilingue avec DrupalAdyax
 
C++ 11 - Tech Days 2014 in Paris
C++ 11 - Tech Days 2014 in ParisC++ 11 - Tech Days 2014 in Paris
C++ 11 - Tech Days 2014 in Parischristophep21
 
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++Microsoft
 
Gérer ses environnements de développement avec vagrant - PHP Tour Nantes 2012
Gérer ses environnements de développement avec vagrant - PHP Tour Nantes 2012Gérer ses environnements de développement avec vagrant - PHP Tour Nantes 2012
Gérer ses environnements de développement avec vagrant - PHP Tour Nantes 2012Jean-Marc Fontaine
 
Conférence Shinken à SophiaConf2012 (Jean Gabès)
Conférence Shinken à SophiaConf2012 (Jean Gabès)Conférence Shinken à SophiaConf2012 (Jean Gabès)
Conférence Shinken à SophiaConf2012 (Jean Gabès)Jean Gabès
 

Similaire à C3 - Langage C - ISIMA 1 - Troisieme partie (20)

Les technologies Open Source pour les interfaces graphiques embarquées
Les technologies Open Source pour les interfaces graphiques embarquéesLes technologies Open Source pour les interfaces graphiques embarquées
Les technologies Open Source pour les interfaces graphiques embarquées
 
LINUX : Système, administration et services réseaux
LINUX : Système, administration et services réseauxLINUX : Système, administration et services réseaux
LINUX : Système, administration et services réseaux
 
composition sommaire pc windows aideinfor
composition sommaire pc windows aideinforcomposition sommaire pc windows aideinfor
composition sommaire pc windows aideinfor
 
Pc windows
Pc windowsPc windows
Pc windows
 
Codedarmor 2012 - 03/04 - Android, What else?
Codedarmor 2012 - 03/04 - Android, What else?Codedarmor 2012 - 03/04 - Android, What else?
Codedarmor 2012 - 03/04 - Android, What else?
 
0081-cours-systemes-exploitations.ppt
0081-cours-systemes-exploitations.ppt0081-cours-systemes-exploitations.ppt
0081-cours-systemes-exploitations.ppt
 
.NET Microframework: du code, de l&rsquo;électronique, de la robotique
.NET Microframework: du code, de l&rsquo;électronique, de la robotique.NET Microframework: du code, de l&rsquo;électronique, de la robotique
.NET Microframework: du code, de l&rsquo;électronique, de la robotique
 
lpi 101 notes de cours
lpi 101 notes de courslpi 101 notes de cours
lpi 101 notes de cours
 
Windev
WindevWindev
Windev
 
MapReduce: Traitement de données distribué à grande échelle simplifié
MapReduce: Traitement de données distribué à grande échelle simplifiéMapReduce: Traitement de données distribué à grande échelle simplifié
MapReduce: Traitement de données distribué à grande échelle simplifié
 
Qt4 et 5 pour Linux embarqué
Qt4 et 5 pour Linux embarquéQt4 et 5 pour Linux embarqué
Qt4 et 5 pour Linux embarqué
 
Open Wide : Les interfaces graphiques dans l'embarque
Open Wide : Les interfaces graphiques dans l'embarqueOpen Wide : Les interfaces graphiques dans l'embarque
Open Wide : Les interfaces graphiques dans l'embarque
 
JavaSwing.pdf
JavaSwing.pdfJavaSwing.pdf
JavaSwing.pdf
 
Introduction à la SDL2
Introduction à la SDL2Introduction à la SDL2
Introduction à la SDL2
 
Gestion multi-pays & multilingue avec Drupal
Gestion multi-pays & multilingue avec DrupalGestion multi-pays & multilingue avec Drupal
Gestion multi-pays & multilingue avec Drupal
 
C++ 11 - Tech Days 2014 in Paris
C++ 11 - Tech Days 2014 in ParisC++ 11 - Tech Days 2014 in Paris
C++ 11 - Tech Days 2014 in Paris
 
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
 
Gérer ses environnements de développement avec vagrant - PHP Tour Nantes 2012
Gérer ses environnements de développement avec vagrant - PHP Tour Nantes 2012Gérer ses environnements de développement avec vagrant - PHP Tour Nantes 2012
Gérer ses environnements de développement avec vagrant - PHP Tour Nantes 2012
 
Tizen sdk-solutionslinux-20130529
Tizen sdk-solutionslinux-20130529Tizen sdk-solutionslinux-20130529
Tizen sdk-solutionslinux-20130529
 
Conférence Shinken à SophiaConf2012 (Jean Gabès)
Conférence Shinken à SophiaConf2012 (Jean Gabès)Conférence Shinken à SophiaConf2012 (Jean Gabès)
Conférence Shinken à SophiaConf2012 (Jean Gabès)
 

Plus de Loic Yon

Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018Loic Yon
 
Découverte d'UNIX - ISIMA
Découverte d'UNIX - ISIMADécouverte d'UNIX - ISIMA
Découverte d'UNIX - ISIMALoic Yon
 
C1 - Langage C - ISIMA - Première partie
C1 - Langage C - ISIMA - Première partieC1 - Langage C - ISIMA - Première partie
C1 - Langage C - ISIMA - Première partieLoic Yon
 
Web - ISIMA
Web - ISIMAWeb - ISIMA
Web - ISIMALoic Yon
 
Introduction à l'objet - Deuxième année ISIMA
Introduction à l'objet - Deuxième année ISIMAIntroduction à l'objet - Deuxième année ISIMA
Introduction à l'objet - Deuxième année ISIMALoic Yon
 
Alternance
AlternanceAlternance
AlternanceLoic Yon
 
Cours de C++ / Tronc commun deuxième année ISIMA
Cours de C++ / Tronc commun deuxième année ISIMACours de C++ / Tronc commun deuxième année ISIMA
Cours de C++ / Tronc commun deuxième année ISIMALoic Yon
 

Plus de Loic Yon (7)

Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
 
Découverte d'UNIX - ISIMA
Découverte d'UNIX - ISIMADécouverte d'UNIX - ISIMA
Découverte d'UNIX - ISIMA
 
C1 - Langage C - ISIMA - Première partie
C1 - Langage C - ISIMA - Première partieC1 - Langage C - ISIMA - Première partie
C1 - Langage C - ISIMA - Première partie
 
Web - ISIMA
Web - ISIMAWeb - ISIMA
Web - ISIMA
 
Introduction à l'objet - Deuxième année ISIMA
Introduction à l'objet - Deuxième année ISIMAIntroduction à l'objet - Deuxième année ISIMA
Introduction à l'objet - Deuxième année ISIMA
 
Alternance
AlternanceAlternance
Alternance
 
Cours de C++ / Tronc commun deuxième année ISIMA
Cours de C++ / Tronc commun deuxième année ISIMACours de C++ / Tronc commun deuxième année ISIMA
Cours de C++ / Tronc commun deuxième année ISIMA
 

Dernier

WBS OBS RACI_2020-etunhjjlllllll pdf.pdf
WBS OBS RACI_2020-etunhjjlllllll pdf.pdfWBS OBS RACI_2020-etunhjjlllllll pdf.pdf
WBS OBS RACI_2020-etunhjjlllllll pdf.pdfSophie569778
 
comprehension de DDMRP dans le domaine de gestion
comprehension de DDMRP dans le domaine de gestioncomprehension de DDMRP dans le domaine de gestion
comprehension de DDMRP dans le domaine de gestionyakinekaidouchi1
 
GAL2024 - Changements climatiques et maladies émergentes
GAL2024 - Changements climatiques et maladies émergentesGAL2024 - Changements climatiques et maladies émergentes
GAL2024 - Changements climatiques et maladies émergentesInstitut de l'Elevage - Idele
 
firefly algoriyhm sac a dos step by step .pdf
firefly algoriyhm sac a dos step by step .pdffirefly algoriyhm sac a dos step by step .pdf
firefly algoriyhm sac a dos step by step .pdffirstjob4
 
Algo II : les piles ( cours + exercices)
Algo II :  les piles ( cours + exercices)Algo II :  les piles ( cours + exercices)
Algo II : les piles ( cours + exercices)Sana REFAI
 
JTC 2024 - Réglementation européenne BEA et Transport.pdf
JTC 2024 - Réglementation européenne BEA et Transport.pdfJTC 2024 - Réglementation européenne BEA et Transport.pdf
JTC 2024 - Réglementation européenne BEA et Transport.pdfInstitut de l'Elevage - Idele
 
GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...
GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...
GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...Institut de l'Elevage - Idele
 
JTC 2024 La relance de la filière de la viande de chevreau.pdf
JTC 2024 La relance de la filière de la viande de chevreau.pdfJTC 2024 La relance de la filière de la viande de chevreau.pdf
JTC 2024 La relance de la filière de la viande de chevreau.pdfInstitut de l'Elevage - Idele
 
GAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenus
GAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenusGAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenus
GAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenusInstitut de l'Elevage - Idele
 
GAL2024 - Méthane 2030 : une démarche collective française à destination de t...
GAL2024 - Méthane 2030 : une démarche collective française à destination de t...GAL2024 - Méthane 2030 : une démarche collective française à destination de t...
GAL2024 - Méthane 2030 : une démarche collective française à destination de t...Institut de l'Elevage - Idele
 
GAL2024 - Traite des vaches laitières : au coeur des stratégies d'évolution d...
GAL2024 - Traite des vaches laitières : au coeur des stratégies d'évolution d...GAL2024 - Traite des vaches laitières : au coeur des stratégies d'évolution d...
GAL2024 - Traite des vaches laitières : au coeur des stratégies d'évolution d...Institut de l'Elevage - Idele
 
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdfJTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdfInstitut de l'Elevage - Idele
 
GAL2024 - Consommations et productions d'énergies dans les exploitations lait...
GAL2024 - Consommations et productions d'énergies dans les exploitations lait...GAL2024 - Consommations et productions d'énergies dans les exploitations lait...
GAL2024 - Consommations et productions d'énergies dans les exploitations lait...Institut de l'Elevage - Idele
 
GAL2024 - L'élevage laitier cultive la biodiversité
GAL2024 - L'élevage laitier cultive la biodiversitéGAL2024 - L'élevage laitier cultive la biodiversité
GAL2024 - L'élevage laitier cultive la biodiversitéInstitut de l'Elevage - Idele
 
Câblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdfCâblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdfmia884611
 
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...Institut de l'Elevage - Idele
 
GAL2024 - Décarbonation du secteur laitier : la filière s'engage
GAL2024 - Décarbonation du secteur laitier : la filière s'engageGAL2024 - Décarbonation du secteur laitier : la filière s'engage
GAL2024 - Décarbonation du secteur laitier : la filière s'engageInstitut de l'Elevage - Idele
 
GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...
GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...
GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...Institut de l'Elevage - Idele
 

Dernier (20)

WBS OBS RACI_2020-etunhjjlllllll pdf.pdf
WBS OBS RACI_2020-etunhjjlllllll pdf.pdfWBS OBS RACI_2020-etunhjjlllllll pdf.pdf
WBS OBS RACI_2020-etunhjjlllllll pdf.pdf
 
comprehension de DDMRP dans le domaine de gestion
comprehension de DDMRP dans le domaine de gestioncomprehension de DDMRP dans le domaine de gestion
comprehension de DDMRP dans le domaine de gestion
 
GAL2024 - Changements climatiques et maladies émergentes
GAL2024 - Changements climatiques et maladies émergentesGAL2024 - Changements climatiques et maladies émergentes
GAL2024 - Changements climatiques et maladies émergentes
 
firefly algoriyhm sac a dos step by step .pdf
firefly algoriyhm sac a dos step by step .pdffirefly algoriyhm sac a dos step by step .pdf
firefly algoriyhm sac a dos step by step .pdf
 
Algo II : les piles ( cours + exercices)
Algo II :  les piles ( cours + exercices)Algo II :  les piles ( cours + exercices)
Algo II : les piles ( cours + exercices)
 
JTC 2024 - Réglementation européenne BEA et Transport.pdf
JTC 2024 - Réglementation européenne BEA et Transport.pdfJTC 2024 - Réglementation européenne BEA et Transport.pdf
JTC 2024 - Réglementation européenne BEA et Transport.pdf
 
GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...
GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...
GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...
 
JTC 2024 Bâtiment et Photovoltaïque.pdf
JTC 2024  Bâtiment et Photovoltaïque.pdfJTC 2024  Bâtiment et Photovoltaïque.pdf
JTC 2024 Bâtiment et Photovoltaïque.pdf
 
JTC 2024 La relance de la filière de la viande de chevreau.pdf
JTC 2024 La relance de la filière de la viande de chevreau.pdfJTC 2024 La relance de la filière de la viande de chevreau.pdf
JTC 2024 La relance de la filière de la viande de chevreau.pdf
 
GAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenus
GAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenusGAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenus
GAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenus
 
GAL2024 - Méthane 2030 : une démarche collective française à destination de t...
GAL2024 - Méthane 2030 : une démarche collective française à destination de t...GAL2024 - Méthane 2030 : une démarche collective française à destination de t...
GAL2024 - Méthane 2030 : une démarche collective française à destination de t...
 
GAL2024 - Traite des vaches laitières : au coeur des stratégies d'évolution d...
GAL2024 - Traite des vaches laitières : au coeur des stratégies d'évolution d...GAL2024 - Traite des vaches laitières : au coeur des stratégies d'évolution d...
GAL2024 - Traite des vaches laitières : au coeur des stratégies d'évolution d...
 
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdfJTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
 
GAL2024 - Consommations et productions d'énergies dans les exploitations lait...
GAL2024 - Consommations et productions d'énergies dans les exploitations lait...GAL2024 - Consommations et productions d'énergies dans les exploitations lait...
GAL2024 - Consommations et productions d'énergies dans les exploitations lait...
 
GAL2024 - L'élevage laitier cultive la biodiversité
GAL2024 - L'élevage laitier cultive la biodiversitéGAL2024 - L'élevage laitier cultive la biodiversité
GAL2024 - L'élevage laitier cultive la biodiversité
 
Câblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdfCâblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdf
 
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...
 
GAL2024 - Décarbonation du secteur laitier : la filière s'engage
GAL2024 - Décarbonation du secteur laitier : la filière s'engageGAL2024 - Décarbonation du secteur laitier : la filière s'engage
GAL2024 - Décarbonation du secteur laitier : la filière s'engage
 
GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...
GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...
GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...
 
JTC 2024 - DeCremoux_Anomalies_génétiques.pdf
JTC 2024 - DeCremoux_Anomalies_génétiques.pdfJTC 2024 - DeCremoux_Anomalies_génétiques.pdf
JTC 2024 - DeCremoux_Anomalies_génétiques.pdf
 

C3 - Langage C - ISIMA 1 - Troisieme partie

  • 2. 2 Plan • Déboguer en texte • Xlib • Arbres • Systèmes
  • 3. DÉBOGUER Adaptation et traduction d'un tutorial écrit par Guy Keren http://users.actcom.co.il/~choo/
  • 4. 4 En situation • Programme syntaxiquement correct MAIS 1. Programme avec un comportement aléatoire 2. Programme planté ?  Message Segmentation Fault  Fichier coredump (peut être très gros)
  • 5. 5 Déboguer ? • A la main  Afficher le nom des variables / valeurs  Macro DUMP • Utiliser un débogueur…  gdb ou confrères • Utiliser un éditeur de développement avec débogueur intégré  Eclipse, Visual, Borland • Programmes tiers  valgrind (erreurs de contexte + fuite mémoire)
  • 6. 6 Avertissement • L'affichage printf pour un programme est une tache qu'il est possible/souhaitable de remettre à plus tard • Forcer l'affichage avec fflush(stdout); for (i = 0; i >= 0; ++i) { printf("%d", i); }
  • 7. 7 Préalable • Compiler tous les programmes avec l'option de profilage –g  Attention cela ralentit la compilation et l'exécution • Lancer gdb / ddd dans le répertoire où se trouvent les sources  Plus facile  Informations sur les lignes à problème
  • 8. 8 Invoquer gdb • produit GNU au format texte • "Surcouches" graphiques  xgdb  ddd gdb executable gdb executable fichier_core gdb executable numero_processus
  • 9. 9 Exécuter un programme Raccourci : r Quitter : quit ou q run run paramètres_ligne_commande run 10 "2eme param" [ddd] paramètres spécifiés dans un menu
  • 10. 10 Point-d'arrêt (1) • Break point • Arrêter le programme à un point donné  Idéalement avec le bogue présumé • A une ligne donnée • A chaque fois qu'une fonction est appelée break fonction break prog.c:115 Raccourci : b [ddd] click
  • 11. 11 Point-d'arrêt (2) • Connaître les points d'arrêt • Effacer des points d'arrêt • Faire des points d'arrêts conditionnels  Arrêter le programme si une condition est réunie help break help breakpoints continue (raccourci c)
  • 12. 12 Avancer dans l'exécution • Exécute la commande courante et s'arrête  Affiche la prochaine commande • Exécute la commande courante  Si la commande est une fonction, s'arrête au début de cette fonction step next
  • 13. 13 Afficher des variables/expressions • Afficher la valeur d'une variable  Doit être accessible au moment de l'évaluation • Afficher la valeur de toute expression print i*i p 3*i print argv[argc-1] print max(5, 10) print i print variable [ddd] survol souris
  • 14. 14 Pile d'appel de fonctions ? • Quelle fonction s'exécute ? • Par qui a-t'elle été appelée ? #0 fonction_courante #1 in fonction_appelante #2 in fonction_appelante_2 where
  • 15. 15 Contexte / Frame • #n : numéro du contexte #0 fonction_courante #1 in fonction_appelante frame 1 print i Affiche la variable i de fonction_appelante up (u) down (d)
  • 16. 16 Déboguer un programme en cours • Par paresse ? • Programme dont l'initialisation est trop longue … 1. Le programme se met en pause 2. Faire les manipulations 3. Quitter gdb = le programme continue gdb programme processus_id gdb prog 16354
  • 17. 17 Fichier core/coredump (1) • Obtenu au plantage d'un programme • Le plantage n'est pas toujours facile à reproduire • Image mémoire d'un processus • Pleins d'infos si options –g  Pile d'appels, contenu de variables, … • Le fichier n'est PAS toujours fiable  il peut être corrompu si la mémoire l'est
  • 18. 18 Fichier core/coredump (2) • Donner les chemins des fichiers s'ils ne sont pas dans le répertoire de lancement de gdb • Toutes les commandes ne sont pas disponibles   : commandes d'exécution (next)   : print, where, frame gdb programme fichier_core
  • 19. 19 Aller plus loin… help (h) help mot_clé Exemples : • Gérer des fichiers sources dans plusieurs répertoires : dir • Lister des lignes de code : list ou l Documentation officielle : http://www.cs.utah.edu/dept/old/texinfo/gdb/gdb_toc.html
  • 21. 21 X Windows System • Système graphique d’affichage sous UNIX  X11  X • Terminal texte α • Gestion des événements asynchrone
  • 22. 22 Xlib • Bibliothèque de bas niveau  Orientée événements (X / Protocole X)  Pas orientée composants (widgets)  Principales fonctions/déclarations préfixées par X • Base pour des bibliothèques de plus haut niveau  Intrinsics (Xt)  Motif  Qt  GTK  SDL • Peu d’alternatives
  • 23. 23 Un peu d’histoire • 1980 : MIT – Projet ATHENA • 1984 : Protocole X – Xlib • 1987 : Réécriture de X11R1 + Intrinsics • 1988 : fondation consortium X  Dernière version X11R6.3 en 1997 • 1992 : projet XFree86 • 1997 : fondation de the Open Group • 1999 : projet X.org • 2012 : sortie en X11R7.7
  • 24. 24 Concepts • Modèle client-serveur • Protocole X • Evénements • Display / écrans • Ressources éventuellement partagées • Fenêtres • Contextes graphiques • Polices de caractères • Cartes de couleurs • Curseurs • Pixmaps
  • 25. 25 Relation client-serveur Serveur Client Client Client Protocole de communication Service Demandeur Réseau (IP) Même machine (IPC)
  • 26. 26 Client X / Serveur X • Deux processus distincts • Communication grâce au protocole X • Client X  Programme utilisateur qui exploite le serveur X  Soumets de requêtes d’affichage  Gère l’interaction avec l’utilisateur • Serveur X  Gestion et contrôle des E/S  Gère un display (écran(s), souris, clavier) • Inversion géographique par rapport au modèle classique
  • 27. 27 Protocole X • Description de la communication entre le client et le serveur X • Gestion asynchrone des événements  Pas d’attente de synchronisation  Zones mémoire tampon • Indépendant de l’architecture  Réseau TCP/IP  Inter Processus Communication
  • 28. 28 Serveur X / Display Carte graphique Mémoire Périphériques d’entrée sortie Multi écrans ? Multi écrans ? Problématiques / portabilité • Taille de l’écran • Nombre de couleurs (profondeur)
  • 29. 29 1 serveur X, 1 display, 1 écran a110.isima.fr:0.0 1 serveur X, 1 display, 2 écrans a110.isima.fr:0.0 et a110.isima.fr:0.1 Clients X Serveur Terminal Terminal Réseau Protocole X
  • 30. 30 Fenêtre • Composant de base obligatoire • Hiérarchie de fenêtres  Fenêtre racine root non modifiable  Client particulier : le gestionnaire • Tous les événements/actions se font relativement à une fenêtre  Une seule fenêtre reçoit les événements claviers • Le client est responsable de l’affichage, pas le serveur  Fenêtre pas affichée par défaut
  • 31. 31 Evénements (1) 1. Entrées-sorties  Appui sur une touche (avoir le focus)  Clic de souris 2. Gestion des fenêtres  Affichage/rafraîchissement de fenêtre (Exposure)  Redimensionnement  Mise en icône 3. Changement de configuration 4. Communication entre clients
  • 32. 32 Evénements (2) • Relatifs à une fenêtre  Propagation dans la hiérarchie  Sélection et filtre • Asynchrones • Pour le client  boucle principale d’attente et de gestion • Structures XEvent
  • 33. 33 Quelques rappels de codage 0 0 0 0 1 1 1 0 1 1 1 1 0 0 0 0 1 0 1 0 0 1 1 1 0 0 0 0 1 1 1 0 1 1 1 0 OU | ET & OU EXCLUSIF XOR Mettre à 1 les bits d’un masque en fonction de certains critères Afficher deux fois un pixel l’efface
  • 34. 34 Ecrire un programme 1. Déclarations & initialisations générales 2. Connexion au serveur X 3. Initialisations spécifiques X • Créer les ressources • Afficher la fenêtre 4. Boucle principale • Réception & analyse des événements 5. Libération des ressources
  • 35. 35 Inclusions des entêtes • Entêtes spécifiques à adapter, au minimum • Ne pas oublier de mettre l’option –lX11 à l’édition des liens • Préciser les chemins  des bibliothèques –Lrépertoire –L/usr/X11R6/lib par exemple  Des entêtes -Irépertoire #include <X11/Xlib.h> /* ou */ #include <X11R6/Xlib.h> /* et d’autres suivant l’utilité */
  • 36. 36 Window root; Window win; Display * dpy; int ecran; unsigned int wpx, bpx; XEvent ev; unsigned int mask; Fenêtre racine Fenêtre à créer display écran par défaut couleur d’avant-plan couleur de fond événement masque Déclarations
  • 37. 37 Connexion & informations dpy = XOpenDisplay(0); ecran = DefaultScreen(dpy); root = DefaultRootWindow(dpy); bpx = BlackPixel(dpy,ecran); wpx = WhitePixel(dpy,ecran); Macros de convenance : ne commencent pas par X Ouverture de la connexion Tester si NULL Récupération d’informations Couleurs utilisées par l’écran
  • 38. 38 Créer une fenêtre win = XCreateSimpleWindow( dpy,root,0,0, LARGEUR,HAUTEUR,6,wpx,bpx); XStoreName(dpy,win, "Titre fenêtre"); XSelectInput(dpy,win, ExposureMask ); XMapWindow(dpy,win); Sélection des événements intéressants pour la fenêtre Affichage de la fenêtre
  • 39. 39 Sélection d’événements Evénement Masque Valeur (fictive) Masque résultat 00000000 Expose ExposeMask 00000001 00000001 KeyPress KeyPressMask 00000010 00000011 ButtonPress ButtonPressMask 00001000 00001011 ButtonRelease ButtonReleaseMask 00010000 00011011 MotionNotify Button1MotionMask 10000000 10011011
  • 40. 40 while(!sortie) { XNextEvent(dpy, &ev); switch(ev.type) { case Expose : afficheGraphisme(); break; case KeyPress : saisie(); break; case ButtonPress : default : puts("Evenement Inconnu !"); break; } } Boucle principale variable sortie mise à jour dans une des fonctions
  • 41. 41 Libérer les ressources • Détruire la fenêtre & fermer la connexion • Rendre les ressources liées aux  Contextes graphiques  Polices de caractères  Curseurs souris  Pixmaps  … XDestroyWindow(dpy, win); XCloseDisplay(dpy); XFreeGC(dpy, gcontext);
  • 42. 42 Contexte graphique • Toutes les informations pour une opération graphique • Dessin d’une forme  Épaisseur de trait • Affichage de texte lié à une police de caractères • Couleur d’avant plan  foreground color ou white pixel • Couleur de fond  background color ou black color
  • 43. 43 GC gcontext; XGCValues gcv; unsigned long gcmask; gcv.foreground = wpx; gcv.background = bpx; gcv.line_width = 3; gcv.function = GXcopy; gcmask = GCForeground | GCBackground | GCLineWidth | GCFunction; gcontext = XCreateGC(dpy,win,gcmask,&gcv); Variables Couleur et trait Affichage des pixels (remplacement, XOR…) Masque pour champs renseignés précédemment Création du contexte graphique
  • 44. 44 Dessiner • Dessin dans une boite (largeur, hauteur) • XDrawLine • XDrawRectangle • XFillRectangle • XDrawArc • XFillArc  angles en 64èmes de degrés (0,0) y x Coin haut gauche + largeur + hauteur
  • 45. 45 Dans les exemples fournis… • Comment changer un curseur de souris  Sablier, pointeur, … • Comment afficher une chaîne de caractères  Impossible avec un premier événement • Saisir une chaîne de caractère • Charger/libérer une police de caractères
  • 46. 46 Gestion de la couleur • Gestion compliquée lié à la disparité du matériel et à l’âge des concepts  Frame buffer, plan de bits  Profondeur d’écran depth • Exemples de visuels visual  Monochrome, niveau de gris  Mode direct color & true color (24 bits) • Palette colormap  Niveaux de Rouge Vert Bleu
  • 47. 47 Couleurs et fonctions utiles • XGetVisualInfo(); • DefaultVisual(); • DefaultDepth(); • DefaultColormap(); • XCreateColormap(); • XAllocColorCells(); • XSetWindowColormap(); • XStoreColor(); • XFreeColormap();
  • 48. 48 Images / pixmaps • pixmap XCreatePixmap (display, fenetre, largeur, hauteur, codage_coul); • XCopyArea(display, drawable_origine, drawable_destination, contexte_graphique, origine_x, origine_y, largeur, destination, destination_x, destination_y); • XFreePixmap(display, pixmap); • XClearWindow(display, fenetre);
  • 49. 49 Au delà du C … • Concepts X réutilisés partout notamment la programmation événementielle • Notions  Affichage graphique  Portabilité • Langages avec interfaces graphiques quasi-natives  JAVA  C#  Visual C++ • Aller plus loin  http://pficheux.free.fr/articles/lmf/xlib/  http://tronche.com/gui/x/xlib/
  • 50. APERÇU SUR LES ARBRES
  • 51. 51 Arbres • Structures arborescentes d'éléments ordonnables • Efficacité et rapidité des algorithmes • Moins facile (parfois) à comprendre • Insertion, suppression de nœuds • Equilibrage des branches ?
  • 52. 52 10 5 13 3 7 15 91 Racine de l'arbre Insertion de 5, 13, 7, 15, 3, 9, 1 Nœud Feuille
  • 53. 53 10 5 13 3 7 15 91 P R O F O N D E U R Exemple d'arbre équilibré
  • 54. 54 10 5 3 7 9 Exemple d'arbre non équilibré 7 5 9 103 Exemple d'équilibrage possible
  • 55. 55 Déclaration struct noeud { int valeur; struct noeud * gauche; struct noeud * droit; } Elément de classement Fils gauche et fils droit Données portées ? g dvaleur
  • 56. 56 Parcours d'arbre • Affichage ? • Recherche ? • Fonctions récursives (facile à comprendre)  Parcours infixe  Parcours préfixe  Parcours postfixe • Fonctions "dérécursivées"  Souvent plus efficaces  Usage d'une pile ?
  • 57. 57 Parcours infixe void parcours_infixe(struct noeud * r) { if (r) { parcours_infixe(r->gauche); printf("Valeur %d", r->valeur); parcours_infixe(r->droit); } } r
  • 58. 58 10 5 13 3 7 15 91 NULL Parcours infixe sur racine "10"
  • 59. 59 Parcours préfixe void parcours_prefixe(struct noeud * r) { if (r) { printf("Valeur %d", r->valeur); parcours_prefixe(r->gauche); parcours_prefixe(r->droit); } }
  • 60. 60 10 5 13 3 7 15 91 NULL Parcours préfixe sur racine "10"
  • 61. 61 Parcours postfixe void parcours_postfixe(struct noeud * r) { if (r) { parcours_postfixe(r->gauche); parcours_postfixe(r->droit); printf("Valeur %d", r->valeur); } }
  • 62. 62 10 5 13 3 7 15 91 NULL Parcours suffixe sur racine "10"
  • 63. 63 { while ((r) && (valeur != r->valeur)) { if (valeur < r->valeur) r = r->gauche; else r = r->droit; } return r; } Recherche struct noeud * recherche (struct noeud * r, int valeur)
  • 64. 64 void inserer (struct noeud *r, struct noeud * n) { int ind = 0; struct noeud * prec; while (r) { prec = r; if (n->valeur < prec->valeur) { ind = 0; r = r->gauche; } else { ind = 1; r = r->droit; } } if (ind) prec->droit = n; else prec->gauche = n; } Insertion Conditions : 1. L'arbre existe 2. Pas d'équilibrage
  • 65. 65 TD • Un arbre est créé dynamiquement • Comment libérer toute la mémoire ?  Procédure récursive ?  Parcours correct de l'arbre
  • 66. C & UNIX 1. Processus 2. Interface 3. Entrées/sorties de bas niveau
  • 67. 67 Processus • Identifiant unique processus identifier  Type spécial pid_t • Processus père (sauf processus 0) pid_t getppid(); pid_t getpid(); $ echo $$ (shell)
  • 68. 68 Copie de processus (1) • Création d'un processus fils, copie conforme du processus père  Même zone de données et de code  Même environnement  Même priorité  Même description de fichiers • Exécution concurrente des deux processus
  • 69. 69 Copie de processus (2) Valeur de retour : -1 : erreur lors de la création limite du nombre de processus 0 : processus fils >0 : processus père, pid du processus fils Après un fork(), tout se passe comme si chacun venait de faire un fork() pid_t fork(); #include <unistd.h>
  • 70. 70 Terminaison de processus • Terminaison "normale"  Fin de la fonction main()  Fonction • Valeur transmise au shell  Retour du main()  Paramètre d'exit() void exit(int); 0 : fin normale $ echo $? (shell [k]sh) > print ERRORLEVEL (win)
  • 71. 71 exit() • Définie dans • Sortie propre du programme  Tampons vidés  Fichiers fermés • Libérer la mémoire allouée sur le tas #include <stdlib.h> ptr = malloc(…); if (!ptr) exit(2);
  • 72. 72 #include <stdio.h> #include <unistd.h> void main() { pid_t pid; switch(pid=fork()) { case (pid_t) -1 : printf("Erreur"); exit(2); case (pid_t) 0 : /* sleep(100); */ printf("FILS: %d (PERE: %d)", getpid(), getppid()); exit(0); default : printf("PERE:%d (PÈRE: %d)", getpid(), getppid()); } Exemple 1
  • 73. 73 int i; for (i = 0; i < 3; i++) fork(); Exemple 2 • Combien de processus sont créés ? i=0 i=1 i=1 i=2 i=2 i=2 i=2
  • 74. 74 Interface C / Système • Faire un appel système • Passer des paramètres (ligne de commande) • Flux standards int system(char *); int main(int, char **); system("ls –l"); system("date"); stdin : entrée standard < stdout : sortie standard > stderr : sortie d'erreur standard 2>
  • 75. 75 Entrées/sorties de bas niveau • Fonctions fichiers de haut niveau  Fonctions textes ou binaires • Fonctions de bas niveau  Proches des primitives systèmes  Plus rapide / plus directe  Pas de formatage des données  Pas de mémoire tampon  Pas toujours portables • Ne pas mélanger les deux types d'accès sur un même fichier
  • 76. 76 Descripteur de fichier • Simple entier pour repérer un fichier  Equivalent de FILE des fonctions haut niveau • Valeur réservée ou personnelle • Nombre de fichiers ouverts simultanément limité 0 stdin 1 stdout 2 stdout 3 Fichier spécial E/S 4 Imprimante
  • 77. Création / ouverture • Création  Permission d'accès en octal • Ouverture 77 int creat(char * nom, int permission); int open(char * nom, int mode, int perm); O_RDONLY Lecture seule O_WRONLY Ecriture seule O_RDWR Lecture/écriture Fonctions et constantes non standardisées • fcntl.h (Sys V) • sys/file.h (BSD)
  • 78. Fermeture/destruction • Fermeture  Permission d'accès en octal • Destruction 78 int close(int fd); void unlink(char * nom)
  • 79. Lecture/écriture/position • Lecture  -1 en cas d'erreur, 0 pour EOF, n si tout va bien • Ecriture • Position • PPP 79 int read(int fd, char * tampon, int n); int write(int fd, char * tampon, int n) long tell(int fd); long lseek(int fd, long off, int or); 0 SEEK_SET Début fichier 1 SEEK_CUR Position courante 2 SEEK_END Fin de fichier
  • 80. 80 int getchar(void) { char c; return (read(0, &c,1)==1?(int)c:EOF; } int getchar(void) { static char tampon[BUFSIZE]; static char * ptamp = tampon; static int n = 0; if (!n) { n = read (0, tampon, BUFSIZE); ptamp = tampon; } return (--n>=0)?(int)*ptamp++:EOF; } Avec buffer Sans buffer

Notes de l'éditeur

  1. Calcul du nombre de tests pour trouver une valeur dans un arbre en comparaison d'une liste chainee meme triee
  2. 0 pour la permission de open si pas de création de fichier
  3. 0 pour la permission de open si pas de création de fichier
  4. 0 pour la permission de open si pas de création de fichier