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

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ță │ Atribut │ Valoare │
├─────────────────────────────────────────────────────────────────────────┼───────────────────┼─────────┤
│ 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)