Provided by: manpages-fr-dev_3.27fr1.4-1_all bug

NOM

       getsubopt - Parcourir les arguments des sous-options depuis une chaine

SYNOPSIS

       #include <stdlib.h>

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

   Exigences  de  macros  de  test de fonctionnalites pour la glibc (consultez
   feature_test_macros(7)) :

       getsubopt() :
           Depuis la glibc 2.12 :
               _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
               || _POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700
           Avant la glibc 2.12 :
               _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE &&'
               _XOPEN_SOURCE_EXTENDED

DESCRIPTION

       getsubopt()  parcourt  la  liste  des  sous-options  separees  par  des
       virgules   fournie   dans   optionp  (une  liste  de  sous-options  est
       typiquement creee lorsque getopt(3) est  utilisee  pour  parcourir  une
       ligne  de  commande ;  consultez  par exemple l'option -o de mount(8)).
       Chaque sous-option peut etre associee a une valeur qui est  separee  de
       son nom par un signe egal. La suite est un exemple de ce type de chaine
       qui peut etre passe a optionp :

           ro,name=xyz

       L'argument tokens est un pointeur vers une liste de  marqueur  terminee
       par  NULL que getsubopt() recherche dans optionp. Les marqueurs doivent
       etre distincts, contenant des chaines terminees par  un  caractere  nul
       d'au moins un caractere, sans signe egal ou virgule.

       Chaque  appel  a  getsubopt()  renvoie une information sur la prochaine
       sous-option contenue dans optionp qui n'a pas ete traitee.  Le  premier
       signal  egal  (s'il existe) est interprete comme un separateur entre un
       nom et une valeur de sous-option. La valeur se termine a  la  prochaine
       virgule  ou (pour la derniere sous-option) a la fin de la chaine. Si le
       nom d'une sous-option correspond a un nom de tokens et qu'une chaine de
       valeur  est  trouvee,  getsubopt() definit *valuep a l'adresse de cette
       chaine. La premiere virgule in optionp est surpassee par un octet  nul,
       ainsi  *valuep  est  exactement  << la  chaine  de  valeur >>  de cette
       sous-option.

       Si la  sous-option  est  reconnue,  mais  qu'aucune  chaine  de  valeur
       n'existe, *valuep est defini a NULL.

       Lorsque   getsubopt()   renvoie,   optionp  pointe  vers  la  prochaine
       sous-option, ou vers l'octet nul (<< \0 >>) en fin  de  chaine,  si  la
       derniere sous-option vient juste d'etre traitee.

VALEUR RENVOY'EE

       Si la premiere sous-option de optionp est reconnue, getsubopt() renvoie
       l'index de l'element de tokens correspondant a la  sous-option.  Sinon,
       -1 est renvoye et *valuep correspond a la chaine nom[=valeur].

       Puisque  *optionp  est modifie, la premiere sous-option avant l'appel a
       getsubopt() n'est pas necessairement la meme qu'apres.

CONFORMIT'E

       POSIX.1-2001.

NOTES

       Puisque getsubopt() reecrit toutes les virgules trouvees dans la chaine
       *optionp,  cette  chaine doit etre accessible en ecriture, elle ne peut
       pas etre une chaine constante.

EXEMPLE

       Le programme suivant attend des sous-options apres 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), feature_test_macros(7)

COLOPHON

       Cette page fait partie de  la  publication  3.27  du  projet  man-pages
       Linux.  Une description du projet et des instructions pour signaler des
       anomalies      peuvent      etre       trouvees       a       l'adresse
       <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

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

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

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

       Vous  pouvez  toujours avoir acces a la version anglaise de ce document
       en utilisant la commande << man -L C <section> <page_de_man> >>.