getsubopt(3) Library Functions Manual getsubopt(3) NOM getsubopt - Parcourir les arguments des sous-options depuis une chaine BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include int getsubopt(char **restrict optionp, char *const *restrict tokens, char **restrict valuep); Exigences de macros de test de fonctionnalites pour la glibc (consulter feature_test_macros(7)) : getsubopt() : _XOPEN_SOURCE >= 500 || /* Depuis la glibc 2.12 : */ _POSIX_C_SOURCE >= 200809L 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 un tableau de pointeurs (termine par NULL) vers les marqueurs 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 RENVOYEE 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. ATTRIBUTS Pour une explication des termes utilises dans cette section, consulter attributes(7). +---------------------------------+--------------------------+---------+ |Interface | Attribut | Valeur | +---------------------------------+--------------------------+---------+ |getsubopt() | Securite des threads | MT-Safe | +---------------------------------+--------------------------+---------+ STANDARDS POSIX.1-2008. HISTORIQUE 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. EXEMPLES Le programme suivant attend des sous-options apres l'option << -o >>. #define _XOPEN_SOURCE 500 #include #include #include 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, "Valeur absente pour la sous-option '%s'\n", token[NAME_OPT]); errfnd = 1; continue; } name = value; break; default: fprintf(stderr, "Pas de correspondance trouvee pour le marqueur : /%s/\n", value); errfnd = 1; break; } } if (readwrite && readonly) { fprintf(stderr, "Seul un de '%s' et '%s' peut etre specifie\n", token[RO_OPT], token[RW_OPT]); errfnd = 1; } break; default: errfnd = 1; } } if (errfnd || argc == 1) { fprintf(stderr, "\nUtilisation : %s -o \n", argv[0]); fprintf(stderr, "les sous-options sont 'ro', 'rw', and 'name='\n"); exit(EXIT_FAILURE); } /* Remainder of program... */ exit(EXIT_SUCCESS); } VOIR AUSSI getopt(3) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et Jean-Pierre Giraud Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 getsubopt(3)