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 |