getsubopt(3) Library Functions Manual getsubopt(3) NUME getsubopt - analizeaza argumentele subopiunii dintr-un ir de caractere BIBLIOTECA Biblioteca C standard (libc, -lc) SINOPSIS #include int getsubopt(char **restrict optionp, char *const *restrict tokens, char **restrict valuep); Cerine pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultai feature_test_macros(7)): getsubopt(): _XOPEN_SOURCE >= 500 || /* Incepand cu glibc 2.12: */ _POSIX_C_SOURCE >= 200809L DESCRIERE getsubopt() analizeaza lista de subopiuni separate prin virgule furnizate in optionp. O astfel de lista de subopiuni este produsa de obicei atunci cand getopt(3) este utilizat pentru a analiza o linie de comanda; a se vedea, de exemplu, opiunea -o din mount(8). Fiecare subopiune poate include o valoare asociata, care este separata de numele subopiunii printr-un semn egal. Urmatorul este un exemplu al tipului de ir de caractere care ar putea fi trecut in optionp: ro,nume=xyz Argumentul tokens este un indicator catre o matrice cu terminaie NULL de indicatori catre token-urile pe care getsubopt() le va cauta in optionp. Token-urile trebuie sa fie iruri distincte, cu terminaie nula, care conin cel puin un caracter, fara semne egale sau virgule incorporate. Fiecare apel la getsubopt() returneaza informaii despre urmatoarea subopiune neprocesata din optionp. Primul semn egal dintr-o subopiune (daca exista) este interpretat ca un separator intre numele i valoarea subopiunii respective. Valoarea se extinde pana la urmatoarea virgula sau (pentru ultima subopiune) pana la sfaritul irului. Daca numele subopiunii corespunde unui nume cunoscut din tokens i a fost gasit un ir de valori, getsubopt() stabilete *valuep la adresa irului respectiv. Prima virgula din optionp este suprascrisa cu un octet nul, astfel incat *valuep este exact ,,irul de valori" pentru subopiunea respectiva. Daca subopiunea este recunoscuta, dar nu a fost gasit niciun ir de valori, *valuep este stabilita la NULL. Cand getsubopt() returneaza, optionp indica urmatoarea subopiune sau octetul nul (,,\0") de la sfaritul irului daca ultima subopiune tocmai a fost procesata. VALOAREA RETURNATA Daca prima subopiune din optionp este recunoscuta, getsubopt() returneaza indexul elementului de subopiune corespunzator din tokens. In caz contrar, se returneaza -1, iar *valuep este intregul ir nume[=valoare]. Deoarece *optionp este modificata, prima subopiune inainte de apelul la getsubopt() nu este (neaparat) aceeai cu prima subopiune dupa getsubopt(). ATRIBUTE Pentru o explicaie a termenilor folosii in aceasta seciune, a se vedea attributes(7). +--------------------------------------+---------------------+---------+ |Interfaa | Atribut | Valoare | +--------------------------------------+---------------------+---------+ |getsubopt() | Sigurana firelor | MT-Safe | +--------------------------------------+---------------------+---------+ STANDARDE POSIX.1-2008. ISTORIC POSIX.1-2001. NOTE Deoarece getsubopt() suprascrie orice virgula pe care o gasete in irul *optionp, acel ir trebuie sa poata fi scris; nu poate fi o constanta de ir. EXEMPLE Urmatorul program ateapta subopiuni dupa o opiune ,,-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, "Lipsete valoarea pentru subopiunea '%s'\n", token[NAME_OPT]); errfnd = 1; continue; } name = value; break; default: fprintf(stderr, "Nu s-a gasit nicio potrivire pentru token: /%s/\n", value); errfnd = 1; break; } } if (readwrite && readonly) { fprintf(stderr, "Doar una dintre '%s' i '%s' poate fi specificata\n", token[RO_OPT], token[RW_OPT]); errfnd = 1; } break; default: errfnd = 1; } } if (errfnd || argc == 1) { fprintf(stderr, "\nUtilizare: %s -o <ir-subopiune>\n", argv[0]); fprintf(stderr, "subopiunile sunt 'ro', 'rw', i 'nume='\n"); exit(EXIT_FAILURE); } /* Restul programului... */ exit(EXIT_SUCCESS); } CONSULTAI I getopt(3) TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.9.1 15 iunie 2024 getsubopt(3)