Provided by: manpages-fr-dev_3.65d1p1-1_all bug

NOM

       getsubopt - Parcourir les arguments des sous-options depuis une chaîne

SYNOPSIS

       #include <stdlib.h>

       int getsubopt(char **optionp, char * const *tokens, char **valuep);

   Exigences    de    macros    de   test   de   fonctionnalités   pour   la   glibc   (consultez
   feature_test_macros(7)) :

       getsubopt() :
           _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
           || /* Depuis la glibc 2.12 : */ _POSIX_C_SOURCE >= 200809L

DESCRIPTION

       getsubopt() parcourt la liste des sous-options séparées  par  des  virgules  fournie  dans
       optionp  (une  liste  de sous-options est typiquement créée lorsque getopt(3) est utilisée
       pour parcourir une ligne de commande ; consultez par exemple  l'option  -o  de  mount(8)).
       Chaque sous-option peut être associée à une valeur qui est séparée de son nom par un signe
       égal. La suite est un exemple de ce type de chaîne qui peut être passé à optionp :

           ro,name=xyz

       L'argument tokens est un pointeur vers un tableau de pointeurs (terminé par NULL) vers les
       marqueurs  que  getsubopt()  recherche dans optionp. Les marqueurs doivent être distincts,
       contenant des chaînes terminées par un caractère nul d'au moins un caractère,  sans  signe
       égal ou virgule.

       Chaque  appel  à getsubopt() renvoie une information sur la prochaine sous-option contenue
       dans optionp qui n'a pas été traitée. Le premier signal égal (s'il existe) est  interprété
       comme  un  séparateur entre un nom et une valeur de sous-option. La valeur se termine à la
       prochaine virgule ou (pour la dernière sous-option) à la fin de la chaîne. Si le nom d'une
       sous-option  correspond  à  un  nom  de  tokens  et  qu'une  chaîne de valeur est trouvée,
       getsubopt() définit *valuep à l'adresse de cette chaîne. La première  virgule  in  optionp
       est  surpassée  par  un octet nul, ainsi *valuep est exactement « la chaîne de valeur » de
       cette sous-option.

       Si la sous-option est reconnue, mais qu'aucune chaîne  de  valeur  n'existe,  *valuep  est
       défini à NULL.

       Lorsque getsubopt() renvoie, optionp pointe vers la prochaine sous-option, ou vers l'octet
       nul (« \0 ») en fin de chaîne, si la dernière sous-option vient juste d'être traitée.

VALEUR RENVOYÉE

       Si la première sous-option  de  optionp  est  reconnue,  getsubopt()  renvoie  l'index  de
       l'élément  de  tokens  correspondant  à  la  sous-option. Sinon, -1 est renvoyé et *valuep
       correspond à la chaîne nom[=valeur].

       Puisque *optionp est modifié, la première sous-option avant l'appel  à  getsubopt()  n'est
       pas nécessairement la même qu'après.

ATTRIBUTS

   Multithreading (voir pthreads(7))
       La fonction getsubopt() est sûre dans un contexte multithread.

CONFORMITÉ

       POSIX.1-2001.

NOTES

       Puisque  getsubopt()  réécrit  toutes les virgules trouvées dans la chaîne *optionp, cette
       chaîne doit être accessible en écriture, elle ne peut pas être une chaîne constante.

EXEMPLE

       Le programme suivant attend des sous-options après l'option « -o ».

       #define _XOPEN_SOURCE 500
       #include <stdlib.h>
       #include <assert.h>
       #include <stdio.h>

       int
       main(int argc, char **argv)
       {
           enum {
               RO_OPT = 0,
               RW_OPT,
               NAME_OPT
           };
           char *const token[] = {
               [RO_OPT]   = "ro",
               [RW_OPT]   = "rw",
               [NAME_OPT] = "name",
               NULL
           };
           char *subopts;
           char *value;
           int opt;

           int readonly = 0;
           int readwrite = 0;
           char *name = NULL;
           int errfnd = 0;

           while ((opt = getopt(argc, argv, "o:")) != -1) {
               switch (opt) {
               case 'o':
                   subopts = optarg;
                   while (*subopts != '\0' && !errfnd) {

                   switch (getsubopt(&subopts, token, &value)) {
                   case RO_OPT:
                       readonly = 1;
                       break;

                   case RW_OPT:
                       readwrite = 1;
                       break;

                   case NAME_OPT:
                       if (value == NULL) {
                           fprintf(stderr, "Missing value for "
                                   "suboption '%s'\n", token[NAME_OPT]);
                           errfnd = 1;
                           continue;
                       }

                       name = value;
                       break;

                   default:
                       fprintf(stderr, "No match found "
                               "for token: /%s/\n", value);
                       errfnd = 1;
                       break;
                   }
               }
               if (readwrite && readonly) {
                   fprintf(stderr, "Only one of '%s' and '%s' can be "
                           "specified\n", token[RO_OPT], token[RW_OPT]);
                   errfnd = 1;
               }
               break;

               default:
                   errfnd = 1;
               }
           }

           if (errfnd || argc == 1) {
               fprintf(stderr, "\nUsage: %s -o <suboptstring>\n", argv[0]);
               fprintf(stderr, "suboptions are 'ro', 'rw', "
                       "and 'name=<value>'\n");
               exit(EXIT_FAILURE);
           }

           /* Remainder of program... */

           exit(EXIT_SUCCESS);
       }

VOIR AUSSI

       getopt(3)

COLOPHON

       Cette page fait partie de la publication 3.65 du projet man-pages Linux.  Une  description
       du  projet  et  des  instructions  pour  signaler  des  anomalies  peuvent être trouvées à
       l'adresse http://www.kernel.org/doc/man-pages/.

TRADUCTION

       Depuis   2010,   cette   traduction   est   maintenue   à   l'aide   de    l'outil    po4a
       <http://po4a.alioth.debian.org/>  par l'équipe de traduction francophone au sein du projet
       perkamon <http://perkamon.alioth.debian.org/>.

       Florentin Duneau et l'équipe francophone de traduction de Debian (2006-2009).

       Veuillez     signaler     toute     erreur     de     traduction     en     écrivant     à
       <debian-l10n-french@lists.debian.org>   ou   par   un  rapport  de  bogue  sur  le  paquet
       manpages-fr.

       Vous pouvez toujours avoir accès à la version anglaise de  ce  document  en  utilisant  la
       commande « man -L C <section> <page_de_man> ».