Changes between Version 5 and Version 6 of CaoCourseTme2


Ignore:
Timestamp:
Feb 15, 2007, 3:01:27 PM (18 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • CaoCourseTme2

    v5 v6  
    6060= Questions =
    6161
    62 == Le Makefile ==
    63 
    64  1. Completez la liste des dépendances lignes 24 à 28
     62== Le processus de construction : Makefile ==
     63
     64 1. Completez la liste des dépendances lignes 24 à 28.
    6565 1. Réécrivez les commandes en utilisant les variables automatiques : {{{$@ $< $^}}}
    66     * {{{$@}}} : désigne la cible d'une règle
    67     * {{{$<}}} : désigne le premier fichier de la liste des sources d'une règle
    68     * {{{$^}}} : désigne la liste des sources d'une règle
    69  1. Donnez une raison à la definition des commandes et parametres au début du Makefile
    70  1. A quoi servent les options -p, -g, -wall, -werror, -ansi
    71  1. Comment demander l'optimisation maximale du compilateur
    72  1. L'option -p est présente dans LDFLAGS et CFLAGS, pourquoi n'est-ce pas le cas de -g
    73  1. Que fait la regle indent ? quelle est la signification des flags utilisés par le programme indent?
     66    * {{{$@}}} : désigne la cible d'une règle.
     67    * {{{$<}}} : désigne le premier fichier de la liste des sources d'une règle.
     68    * {{{$^}}} : désigne la liste des sources d'une règle.
     69 1. Donnez une raison à la definition des commandes et paramètres au début du Makefile
     70 1. A quoi servent les options -p, -g, -wall, -werror, -ansi ?
     71 1. Comment demander l'optimisation maximale du compilateur ?
     72 1. L'option -p est présente dans LDFLAGS et CFLAGS, pourquoi n'est-ce pas le cas de -g ?
     73 1. Que fait la regle indent ? quelle est la signification des flags utilisés par le programme indent ?
    7474
    7575{{{
     
    114114 39         $(INDENT) $(IDFLAGS) *.c *.h
    115115}}}
     116
     117== le programme principal : main ==
     118
     119 *  A quoi servent les lignes 1, 2 et 11 ?
     120 *  Pourquoi inclure {{{stdio.h}}} ici ?
     121
     122{{{
     123  1 #ifndef _MAIN_H_
     124  2 #define _MAIN_H_
     125  3
     126  4 #include <stdio.h>
     127  5
     128  6 struct mainarg_s
     129  7 {
     130  8     FILE *INFILE;
     131  9     FILE *OUTPUTFILE;
     132 10     char VERBOSE;
     133 11 };
     134 12 extern struct mainarg_s MAINARG;
     135 13
     136 14 #endif
     137}}}
     138
     139 1. A quoi sert chaque include ?
     140 1. Pourquoi a-t-on un fichier main.h ?
     141 1. Expliquez le fonctionnement de la fonction getopt ({{{man 3 getopt}}})[[BR]]
     142    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]]
     143    Vous ajouterez plus tard l'option -s qui demande les statistiques d'usage de la tables de hachage.
     144 1. A quoi sert l'appel de return a la fin de la fonction main() ?
     145 1. Pourquoi y-a-t-il exit() a la fin de la fonction usage() ?
     146 1. Qu'est ce qu'un appel systeme, en voyez-vous dans ce fichier, si oui lesquels,
     147    citez en d'autres,
     148 1. Quelle precaution doit on prendre lors de leur utilisation ?
     149 1. Ou sont definiies les fonctions standards ?
     150 1. Qu'est-ce qu'un filtre unix ?
     151 1. Que faut-il faire pour transformer ce programme en filtre ?
     152
     153{{{
     154  1 #include <stdlib.h>
     155  2 #include <stdio.h>
     156  3 #include <getopt.h>
     157  4 #include "main.h"
     158  5 #include "count.h"
     159  6 #include "hte.h"
     160  7
     161  8 struct mainarg_s MAINARG;
     162  9
     163 10 void usage (char *command)
     164 11 {
     165 12     printf ("\nStatistique Diverses\n");
     166 13     printf ("Usage  : %s
     167 14             [-v] [-o OutFile] InFile\n", command);
     168 15     printf ("-v          verbose mode\n");
     169 16     printf ("-o OutFile  output file (stdout by default)\n\n");
     170 17     exit (EXIT_FAILURE);
     171 18 }
     172 19
     173 20 void getarg (int argc, char **argv)
     174 21 {
     175 22     extern char *optarg;
     176 23     extern int optind;
     177 24     char option;
     178 25
     179 26     MAINARG.OUTPUTFILE = NULL;
     180 27     while ((option = getopt (argc, argv, "vo:")) != EOF)
     181 28         switch (option)
     182 29         {
     183 30         case 'v':
     184 31             MAINARG.VERBOSE = 1;
     185 32             fprintf (stderr, "Verbose mode\n");
     186 33             break;
     187 34
     188 35         case 'o':
     189 36             if (MAINARG.VERBOSE)
     190 37                 fprintf (stderr, "Fichier de sortie : %s\n", optarg);
     191 38
     192 39             MAINARG.OUTPUTFILE = fopen (optarg, "w");
     193 40             if (MAINARG.OUTPUTFILE == NULL)
     194 41             {
     195 42                 fprintf (stderr, "%s: %s: \n", argv[0], optarg);
     196 43                 perror ("fopen");
     197 44                 exit (EXIT_FAILURE);
     198 45             }
     199 46             break;
     200 47
     201 48         case '?':
     202 49         default:
     203 50             usage (argv[0]);
     204 51         }
     205 52     if ((optind + 1) != argc)
     206 53     {
     207 54         usage (argv[0]);
     208 55     }
     209 56     else
     210 57     {
     211 58         if (MAINARG.VERBOSE)
     212 59             fprintf (stderr, "Fichier d'entrée : %s\n", argv[optind]);
     213 60
     214 61         MAINARG.INFILE = fopen (argv[optind], "r");
     215 62         if (MAINARG.INFILE == NULL)
     216 63         {
     217 64             fprintf (stderr, "%s: %s ", argv[0], argv[optind]);
     218 65             perror ("fopen");
     219 66             exit (EXIT_FAILURE);
     220 67         }
     221 68         if (MAINARG.OUTPUTFILE == NULL)
     222 69             MAINARG.OUTPUTFILE = stdout;
     223 70     }
     224 71 }
     225 72
     226 73 int main (int argc, char **argv)
     227 74 {
     228 75     getarg (argc, argv);
     229 76     count (MAINARG.INFILE);
     230 77     fclose (MAINARG.OUTPUTFILE);
     231 78     return EXIT_SUCCESS;
     232 79 }
     233}}}
     234