Provided by: manpages-fr-dev_4.13-4_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   (consulter
   feature_test_macros(7)) :

       getsubopt() :
           _XOPEN_SOURCE >= 500
               || /* Since 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

       Pour une explication des termes utilisés dans cette section, consulter attributes(7).

       ┌────────────┬──────────────────────┬─────────┐
       │InterfaceAttributValeur  │
       ├────────────┼──────────────────────┼─────────┤
       │getsubopt() │ Sécurité des threads │ MT-Safe │
       └────────────┴──────────────────────┴─────────┘

CONFORMITÉ

       POSIX.1-2001, POSIX.1-2008.

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.

EXEMPLES

       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 5.10 du projet man-pages Linux.  Une  description
       du  projet et des instructions pour signaler des anomalies et la dernière version de cette
       page peuvent être trouvées à l'adresse https://www.kernel.org/doc/man-pages/.

TRADUCTION

       La traduction française de cette  page  de  manuel  a  été  créée  par  Christophe  Blaess
       <https://www.blaess.fr/christophe/>,  Stéphan  Rafin  <stephan.rafin@laposte.net>, Thierry
       Vignaud <tvignaud@mandriva.com>, François Micaux, Alain  Portal  <aportal@univ-montp2.fr>,
       Jean-Philippe    Guérard   <fevrier@tigreraye.org>,   Jean-Luc   Coulon   (f5ibh)   <jean-
       luc.coulon@wanadoo.fr>,   Julien    Cristau    <jcristau@debian.org>,    Thomas    Huriaux
       <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin
       Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>,  Denis
       Barbier <barbier@debian.org> et David Prévot <david@tilapin.org>

       Cette  traduction  est  une  documentation libre ; veuillez vous reporter à la GNU General
       Public  License  version 3  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩   concernant   les
       conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

       Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un
       message à debian-l10n-french@lists.debian.org ⟨⟩.