table of contents
GETSUBOPT(3) | Manuel du programmeur Linux | GETSUBOPT(3) |
NOM¶
getsubopt - Parcourir les arguments des sous-options depuis une chaîneSYNOPSIS¶
#include <stdlib.h>Exigences de macros de test de fonctionnalités pour la glibc (consultez feature_test_macros(7)) :
_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
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 ].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.44 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> ».26 septembre 2010 | GNU |