Changes between Version 13 and Version 14 of CaoCourseTme2
- Timestamp:
- Feb 16, 2007, 5:24:23 PM (18 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
CaoCourseTme2
v13 v14 119 119 == le programme principal : main == 120 120 121 * A quoi servent les lignes 1, 2 et 11 ? 121 '''Fichier main.h''' 122 123 * A quoi servent les lignes les 2 premières lignes et la dernière ? 122 124 * Pourquoi inclure {{{stdio.h}}} ici ? 123 125 124 '''Fichier main.h'''125 126 {{{ 126 127 #ifndef _MAIN_H_ … … 140 141 }}} 141 142 142 1. A quoi sert chaque include ? 143 1. Pourquoi a-t-on un fichier main.h ? 144 1. Expliquez le fonctionnement de la fonction getopt ({{{man 3 getopt}}})[[BR]] 143 '''Fichier main.c''' 144 145 * A quoi sert chaque include ? 146 * Pourquoi a-t-on un fichier main.h ? 147 * Expliquez le fonctionnement de la fonction getopt ({{{man 3 getopt}}})[[BR]] 145 148 Ajoutez l'option -h qui affiche l'usage du programme et un petit texte de description du comportement (très court, c'est juste pour l'exercice).[[BR]] 146 149 Vous ajouterez plus tard l'option -s qui demande les statistiques d'usage de la tables de hachage. 147 1. A quoi sert l'appel de return a la fin de la fonction main() ? 148 1. Pourquoi y-a-t-il exit() a la fin de la fonction usage() ? 149 1. Qu'est ce qu'un appel systeme, en voyez-vous dans ce fichier, si oui lesquels, 150 citez en d'autres, 151 1. Quelle precaution doit on prendre lors de leur utilisation ? 152 1. Ou sont definiies les fonctions standards ? 153 1. Qu'est-ce qu'un filtre unix ? 154 1. Que faut-il faire pour transformer ce programme en filtre ? 155 156 '''Fichier main.c''' 150 * A quoi sert l'appel de return a la fin de la fonction main() ? 151 * Pourquoi y-a-t-il exit() a la fin de la fonction usage() ? 152 * Qu'est ce qu'un appel systeme, en voyez-vous dans ce fichier, si oui lesquels, 153 citez en d'autres. 154 * Quelle precaution doit on prendre lors de leur utilisation ? 155 * Ou sont definiies les fonctions standards ? 156 * Qu'est-ce qu'un filtre unix ? 157 * Que faut-il faire pour transformer ce programme en filtre ? 158 157 159 {{{ 158 160 include <stdlib.h> … … 242 244 == Les fonctions de bases de la tables de hachage == 243 245 244 1. Les types {{{hte_item_t}}} et {{{hte_data_t}}} sont des structures dont le contenu n'est pas défini ici. 246 '''Fichier hte.h''' 247 248 * Les types {{{hte_item_t}}} et {{{hte_data_t}}} sont des structures dont le contenu n'est pas défini ici. 245 249 Leur contenu n'est pas défini non plus dans le fichier {{{hte.c}}}, en revanche il est défini dans les fichiers {{{dico.c}}}, {{{dejavu.c}}} et {{{namealloc.c}}} 246 250 Quelle est alors la contrainte d'usage de ces types dans le fichier {{{hte.c}}} ? 247 251 Quel est l'intérêt de cette écriture ? 248 1. Dans la définition des prototypes de fonctions, le nom des paramètre est-il nécessaire ? si non pour les mettre ? 249 250 '''Fichier hte.h''' 252 * Dans la définition des prototypes de fonctions, le nom des paramètre est-il nécessaire ? si non pour les mettre ? 253 251 254 {{{ 252 255 #ifndef _HTE_H_ … … 358 361 '''Fichier hte.c''' 359 362 360 1.Faîte un dessin représentatif de la valeur de la variable locale {{{root}}} de la fonction {{{hte_create}}} si {{{nb_list==10}}} juste avant l'appel return.361 1.La fonction {{{hte_hash}}} peut-elle provoquer une erreur de segment ? Comment y remedier proprement ?362 1.Dans la fonction {{{hte_create}}} comment fait-on pour tester le retour de {{{malloc}}} ? à quoi celà sert-il ?363 * Faîte un dessin représentatif de la valeur de la variable locale {{{root}}} de la fonction {{{hte_create}}} si {{{nb_list==10}}} juste avant l'appel return. 364 * La fonction {{{hte_hash}}} peut-elle provoquer une erreur de segment ? Comment y remedier proprement ? 365 * Dans la fonction {{{hte_create}}} comment fait-on pour tester le retour de {{{malloc}}} ? à quoi celà sert-il ? 363 366 364 367 {{{ … … 421 424 == Le service ''dejavu'' == 422 425 423 1.Pourquoi définit on la structure {{{hte_item_s}}} ici ?424 1.La variable {{{root_namealloc}}} est static. Qu'est-ce que cela veut dire ?425 1.Donner les autres usages du mots clé static en langage C.426 1.A quoi sert la fonction {{{perror}}} ?426 * Pourquoi définit on la structure {{{hte_item_s}}} ici ? 427 * La variable {{{root_namealloc}}} est static. Qu'est-ce que cela veut dire ? 428 * Donner les autres usages du mots clé static en langage C. 429 * A quoi sert la fonction {{{perror}}} ? 427 430 428 431 '''Fichier dejavu.c''' … … 570 573 } 571 574 }}} 572 573 == Le service allocateur de nom ==574 575 '''Fichier namealloc.c'''576 {{{577 #include "hte.h"578 #include <stdio.h>579 #include <string.h>580 #include <stdlib.h>581 }}}582 {{{583 /*584 * structure définissant un item du dictionnaire585 * Un item est formé d'un couple (clé,valeur) plus un pointeur586 * permettant de chainer les items ayant le meme index de hachage587 */588 struct hte_item_s589 {590 struct hte_item_s *NEXT; /* pointeur sur l'item suivant */591 char KEY[]; /* tableau flexible contenant la clé */592 };593 }}}594 {{{595 char *namealloc (char *key)596 {597 int index;598 hte_item_t *curr;599 static hte_root_t *root_namealloc;600 601 if (key)602 {603 /* création du dictionnaire la première fois */604 if (root_namealloc == NULL)605 root_namealloc = hte_create (MAX_NAMEALLOC);606 607 /* calcul de l'index pour trouver la liste ou devrait être l'item */608 index = hte_hash (key) % root_namealloc->NB_LIST;609 610 /* recherche et l'item dans sa liste et sortie si trouvé */611 for (curr = root_namealloc->LIST[index]; curr; curr = curr->NEXT)612 {613 if (strcmp (curr->KEY, key) == 0)614 return curr->KEY;615 }616 617 /* création d'une nouvelle entrée */618 curr = malloc (sizeof (struct hte_item_t *) + strlen (key) + 1);619 if (curr)620 {621 strcpy (curr->KEY, key);622 curr->NEXT = root_namealloc->LIST[index];623 root_namealloc->LIST[index] = curr;624 return curr->KEY;625 }626 }627 perror ("namealloc");628 exit (1);629 }630 }}}