Provided by: manpages-ro-dev_4.27.0-1_all bug

NUME

       getsubopt - analizează argumentele subopțiunii dintr-un șir de caractere

BIBLIOTECA

       Biblioteca C standard (libc, -lc)

SINOPSIS

       #include <stdlib.h>

       int getsubopt(char **restrict optionp, char *const *restrict tokens,
                     char **restrict valuep);

   Cerințe pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultați feature_test_macros(7)):

       getsubopt():
           _XOPEN_SOURCE >= 500
               || /* Începând cu glibc 2.12: */ _POSIX_C_SOURCE >= 200809L

DESCRIERE

       getsubopt()  analizează lista de subopțiuni separate prin virgule furnizate în optionp. O astfel de listă
       de subopțiuni este produsă de obicei atunci când getopt(3) este utilizat pentru  a  analiza  o  linie  de
       comandă;  a  se  vedea,  de exemplu, opțiunea -o din mount(8). Fiecare subopțiune poate include o valoare
       asociată, care este separată de numele subopțiunii printr-un semn egal.  Următorul  este  un  exemplu  al
       tipului de șir de caractere care ar putea fi trecut în optionp:

           ro,nume=xyz

       Argumentul tokens este un indicator către o matrice cu terminație NULL de indicatori către token-urile pe
       care getsubopt() le va căuta în optionp. Token-urile trebuie să fie șiruri distincte, cu terminație nulă,
       care conțin cel puțin un caracter, fără semne egale sau virgule încorporate.

       Fiecare  apel  la getsubopt() returnează informații despre următoarea subopțiune neprocesată din optionp.
       Primul semn egal dintr-o subopțiune (dacă există) este  interpretat  ca  un  separator  între  numele  și
       valoarea  subopțiunii  respective.  Valoarea  se  extinde  până  la următoarea virgulă sau (pentru ultima
       subopțiune) până la sfârșitul șirului. Dacă numele subopțiunii corespunde unui nume cunoscut  din  tokens
       și  a  fost  găsit  un  șir  de valori, getsubopt() stabilește *valuep la adresa șirului respectiv. Prima
       virgulă din optionp este suprascrisă cu un octet nul, astfel încât *valuep este exact „șirul  de  valori”
       pentru subopțiunea respectivă.

       Dacă  subopțiunea  este  recunoscută, dar nu a fost găsit niciun șir de valori, *valuep este stabilită la
       NULL.

       Când getsubopt() returnează, optionp indică următoarea subopțiune sau octetul nul („\0”) de la  sfârșitul
       șirului dacă ultima subopțiune tocmai a fost procesată.

VALOAREA RETURNATĂ

       Dacă  prima  subopțiune  din  optionp  este  recunoscută,  getsubopt()  returnează indexul elementului de
       subopțiune corespunzător din tokens. În caz contrar, se returnează -1,  iar  *valuep  este  întregul  șir
       nume[=valoare].

       Deoarece  *optionp  este modificată, prima subopțiune înainte de apelul la getsubopt() nu este (neapărat)
       aceeași cu prima subopțiune după getsubopt().

ATRIBUTE

       Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).
       ┌─────────────────────────────────────────────────────────────────────────┬───────────────────┬─────────┐
       │ InterfațăAtributValoare │
       ├─────────────────────────────────────────────────────────────────────────┼───────────────────┼─────────┤
       │ getsubopt()                                                             │ Siguranța firelor │ MT-Safe │
       └─────────────────────────────────────────────────────────────────────────┴───────────────────┴─────────┘

STANDARDE

       POSIX.1-2008.

ISTORIC

       POSIX.1-2001.

NOTE

       Deoarece getsubopt() suprascrie orice virgulă pe care o găsește în șirul *optionp, acel  șir  trebuie  să
       poată fi scris; nu poate fi o constantă de șir.

EXEMPLE

       Următorul program așteaptă subopțiuni după o opțiune „-o”.

       #define _XOPEN_SOURCE 500
       #include <stdio.h>
       #include <stdlib.h>

       #include <assert.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,
                                       "Lipsește valoarea pentru subopțiunea '%s'\n",
                                       token[NAME_OPT]);
                               errfnd = 1;
                               continue;
                           }

                           name = value;
                           break;

                       default:
                           fprintf(stderr,
                                   "Nu s-a găsit nicio potrivire pentru token: /%s/\n", value);
                           errfnd = 1;
                           break;
                       }
                   }
                   if (readwrite && readonly) {
                       fprintf(stderr,
                               "Doar una dintre '%s' și '%s' poate fi specificată\n",
                               token[RO_OPT], token[RW_OPT]);
                       errfnd = 1;
                   }
                   break;

               default:
                   errfnd = 1;
               }
           }

           if (errfnd || argc == 1) {
               fprintf(stderr, "\nUtilizare: %s -o <șir-subopțiune>\n", argv[0]);
               fprintf(stderr,
                       "subopțiunile sunt 'ro', 'rw', și 'nume=<valoare>'\n");
               exit(EXIT_FAILURE);
           }

           /* Restul programului... */

           exit(EXIT_SUCCESS);
       }

CONSULTAȚI ȘI

       getopt(3)

TRADUCERE

       Traducerea    în   limba   română   a   acestui   manual   a   fost   făcută   de   Remus-Gabriel   Chelu
       <remusgabriel.chelu@disroot.org>

       Această traducere este  documentație  gratuită;  citiți  Licența publică generală GNU Versiunea 3  sau  o
       versiune   ulterioară   cu  privire  la  condiții  privind  drepturile  de  autor.   NU  se  asumă  NICIO
       RESPONSABILITATE.

       Dacă găsiți erori în traducerea acestui manual, vă rugăm să  trimiteți  un  e-mail  la  translation-team-
       ro@lists.sourceforge.net.

Pagini de manual de Linux 6.9.1                   15 iunie 2024                                     getsubopt(3)