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

NUME

       insque, remque - inserează/elimină un element dintr-o coadă

BIBLIOTECA

       Biblioteca C standard (libc, -lc)

SINOPSIS

       #include <search.h>

       void insque(void *elem, void *prev);
       void remque(void *elem);

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

       insque(), remque():
           _XOPEN_SOURCE >= 500
               || /* glibc >= 2.19: */ _DEFAULT_SOURCE
               || /* glibc <= 2.19: */ _SVID_SOURCE

DESCRIERE

       Funcțiile insque() și remque() manipulează liste dublu legate. Fiecare element din listă este o structură
       ale  cărei  prime  două  elemente sunt un indicator înainte și un indicator înapoi. Lista legată poate fi
       liniară (adică, indicator înainte NULL la sfârșitul listei și indicator înapoi NULL la începutul  listei)
       sau circulară.

       Funcția insque() inserează elementul indicat de elem imediat după elementul indicat de prev.

       Dacă  lista este liniară, atunci apelul insque(elem, NULL) poate fi utilizat pentru a introduce elementul
       inițial al listei, iar apelul stabilește indicatorii înainte și înapoi ai lui elem la NULL.

       Dacă lista este circulară, apelantul trebuie să se asigure că indicatorii înainte și înapoi  ai  primului
       element  sunt  inițializați pentru a indica elementul respectiv, iar argumentul prev al apelului insque()
       trebuie să indice și el elementul.

       Funcția remque() elimină elementul indicat de elem din lista dublu legată.

ATRIBUTE

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

VERSIUNI

       În sistemele vechi, argumentele acestor funcții erau de tipul struct qelem *, definite astfel:

           struct qelem {
               struct qelem *q_forw;
               struct qelem *q_back;
               char          q_data[1];
           };

       Aceasta este ceea ce veți obține dacă _GNU_SOURCE este definit înainte de a include <search.h>.

       Locația prototipurilor pentru aceste funcții diferă între mai multe versiuni ale UNIX.  Cea  de  mai  sus
       este versiunea POSIX. Unele sisteme le plasează în <string.h>.

STANDARDE

       POSIX.1-2008.

ISTORIC

       POSIX.1-2001.

ERORI

       În glibc 2.4 și anterior, nu era posibil să se specifice prev ca NULL. În consecință, pentru a construi o
       listă  liniară, apelantul trebuia să construiască o listă utilizând un apel inițial care conținea primele
       două  elemente  ale  listei,  cu  indicatorii  înainte  și  înapoi  din  fiecare   element   inițializați
       corespunzător.

EXEMPLE

       Programul de mai jos demonstrează utilizarea lui insque(). Iată un exemplu de execuție a programului:

           $ ./a.out -c a b c
           Parcurgerea listei completate:
               a
               b
               c
           Aceasta a fost o listă circulară

   Sursa programului

       #include <search.h>
       #include <stdio.h>
       #include <stdlib.h>
       #include <unistd.h>

       struct element {
           struct element *forward;
           struct element *backward;
           char *name;
       };

       static struct element *
       new_element(void)
       {
           struct element *e;

           e = malloc(sizeof(*e));
           if (e == NULL) {
               fprintf(stderr, "malloc() failed\n");
               exit(EXIT_FAILURE);
           }

           return e;
       }

       int
       main(int argc, char *argv[])
       {
           struct element *first, *elem, *prev;
           int circular, opt, errfnd;

           /* Opțiunea de linie de comandă „-c” poate fi utilizată
              pentru a specifica faptul că lista este circulară.. */

           errfnd = 0;
           circular = 0;
           while ((opt = getopt(argc, argv, "c")) != -1) {
               switch (opt) {
               case 'c':
                   circular = 1;
                   break;
               default:
                   errfnd = 1;
                   break;
               }
           }

           if (errfnd || optind >= argc) {
               fprintf(stderr,  "Utilizare: %s [-c] șir...\n", argv[0]);
               exit(EXIT_FAILURE);
           }

           /* Creați primul element și plasați-l în lista legată. */

           elem = new_element();
           first = elem;

           elem->name = argv[optind];

           if (circular) {
               elem->forward = elem;
               elem->backward = elem;
               insque(elem, elem);
           } else {
               insque(elem, NULL);
           }

           /* Adaugă argumentele de linie de comandă rămase ca elemente de listă. */

           while (++optind < argc) {
               prev = elem;

               elem = new_element();
               elem->name = argv[optind];
               insque(elem, prev);
           }

           /* Parcurge lista de la început, imprimând numele elementelor. */

           printf("Parcurgerea listei completate::\n");
           elem = first;
           do {
               printf("    %s\n", elem->name);
               elem = elem->forward;
           } while (elem != NULL && elem != first);

           if (elem == first)
               printf("Aceasta a fost o listă circulară\n");

           exit(EXIT_SUCCESS);
       }

CONSULTAȚI ȘI

       queue(7)

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                                        insque(3)