pthread_setname_np(3)

NUME
pthread_setname_np, pthread_getname_np - stabilește/obține numele unui fir

BIBLIOTECA
Biblioteca de fire de execuție POSIX (libpthread, -lpthread)

SINOPSIS
#define _GNU_SOURCE             /* Consultați feature_test_macros(7) */
#include <pthread.h>

int pthread_setname_np(pthread_t thread, const char *name);
int pthread_getname_np(size_t size;
                       pthread_t thread, char name[size], size_t size);

DESCRIERE
În mod implicit, toate firele create cu ajutorul funcției pthread_create() moștenesc numele programului. Funcția pthread_setname_np() poate fi utilizată pentru a stabili un nume unic pentru un fir, ceea ce poate fi util pentru depanarea aplicațiilor cu mai multe fire. Numele firului este un șir semnificativ în limbajul C, a cărui lungime este limitată la 16 caractere, inclusiv octetul nul de terminare („\0”). Argumentul thread specifică firul al cărui nume urmează să fie schimbat; name specifică noul nume.

Funcția pthread_getname_np() poate fi utilizată pentru a prelua numele firului. Argumentul thread specifică firul al cărui nume trebuie să fie recuperat. Memoria tampon name este utilizată pentru a returna numele firului; size specifică numărul de octeți disponibili în name. Memoria tampon specificată de name trebuie să aibă o lungime de cel puțin 16 caractere. Numele firului returnat în memoria tampon de ieșire va avea terminație nulă.

VALOAREA RETURNATĂ
În caz de succes, aceste funcții returnează 0; în caz de eroare, ele returnează un număr de eroare diferit de zero.

ERORI-IEȘIRE
Funcția pthread_setname_np() poate eșua cu următoarea eroare:

ERANGE
    Lungimea șirului specificat indicat de name depășește limita permisă.

Funcția pthread_getname_np() poate eșua cu următoarea eroare:

ERANGE
    Memoria tampon specificată de name și size este prea mică pentru a conține numele firului.

Dacă oricare dintre aceste funcții nu reușește să deschidă /proc/self/task/tid/comm, apelul poate eșua cu una dintre erorile descrise în open(2).

ATRIBUTE
Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).
Interfață | Atribut | Valoare
pthread_setname_np(), pthread_getname_np() | Siguranța firelor | MT-Safe

STANDARDE
GNU; de aici și sufixul „_np” (neportabil) din denumiri.

ISTORIC
glibc 2.12.

NOTE
pthread_setname_np() scrie intern în fișierul specific firului comm din cadrul sistemului de fișiere /proc: /proc/self/task/tid/comm. pthread_getname_np() îl recuperează din aceeași locație.

EXEMPLE
Programul de mai jos demonstrează utilizarea pthread_setname_np() și pthread_getname_np().

Următoarea sesiune shell arată un exemplu de execuție a programului:

    $ ./a.out;
    A fost creat un fir. Numele implicit este: a.out
    Numele firului după definire este THREADFOO.
    ^Z                           # Suspendă programul
    [1]+  Stopped           ./a.out
    $ ps H -C a.out -o 'pid tid cmd comm'
      PID   TID CMD                         COMMAND
     5990  5990 ./a.out                     a.out
     5990  5991 ./a.out                     THREADFOO
    $ cat /proc/5990/task/5990/comm
    a.out
    $ cat /proc/5990/task/5991/comm
    THREADFOO

  Sursa programului
    #define _GNU_SOURCE
    #include <err.h>
    #include <errno.h>
    #include <pthread.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>

    #define NAMELEN 16

    static void *
    threadfunc(void *parm)
    {
        sleep(5);          // permite programului principal să stabilească numele firului
        return NULL;
    }

    int
    main(int argc, char *argv[])
    {
        pthread_t thread;
        int rc;
        char thread_name[NAMELEN];

        rc = pthread_create(&thread, NULL, threadfunc, NULL);
        if (rc != 0)
            errc(EXIT_FAILURE, rc, "pthread_create");

        rc = pthread_getname_np(thread, thread_name, NAMELEN);
        if (rc != 0)
            errc(EXIT_FAILURE, rc, "pthread_getname_np");

        printf("A fost creat un fir. Numele implicit este: %s\n", thread_name);
        rc = pthread_setname_np(thread, (argc > 1) ? argv[1] : "THREADFOO");
        if (rc != 0)
            errc(EXIT_FAILURE, rc, "pthread_setname_np");

        sleep(2);

        rc = pthread_getname_np(thread, thread_name, NAMELEN);
        if (rc != 0)
            errc(EXIT_FAILURE, rc, "pthread_getname_np");
        printf("Numele firului după definire este %s.\n", thread_name);

        rc = pthread_join(thread, NULL);
        if (rc != 0)
            errc(EXIT_FAILURE, rc, "pthread_join");

        printf("Gata\n");
        exit(EXIT_SUCCESS);
    }

CONSULTAȚI ȘI
prctl(2), pthread_create(3), pthreads(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 (https://www.gnu.org/licenses/gpl-3.0.html) 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.