pthread_setname_np(3) Library Functions Manual pthread_setname_np(3) NUME pthread_setname_np, pthread_getname_np - stabilete/obine numele unui fir BIBLIOTECA Biblioteca de fire de execuie POSIX (libpthread, -lpthread) SINOPSIS #define _GNU_SOURCE /* Consultai feature_test_macros(7) */ #include int pthread_setname_np(pthread_t thread, const char *name); int pthread_getname_np(pthread_t thread, char name[.size], size_t size); DESCRIERE In mod implicit, toate firele create cu ajutorul funciei pthread_create() motenesc numele programului. Funcia pthread_setname_np() poate fi utilizata pentru a stabili un nume unic pentru un fir, ceea ce poate fi util pentru depanarea aplicaiilor cu mai multe fire. Numele firului este un ir semnificativ in limbajul C, a carui lungime este limitata la 16 caractere, inclusiv octetul nul de terminare (,,\0"). Argumentul thread specifica firul al carui nume urmeaza sa fie schimbat; name specifica noul nume. Funcia pthread_getname_np() poate fi utilizata pentru a prelua numele firului. Argumentul thread specifica firul al carui nume trebuie sa fie recuperat. Memoria tampon name este utilizata pentru a returna numele firului; size specifica numarul de octei disponibili in name. Memoria tampon specificata de name trebuie sa aiba o lungime de cel puin 16 caractere. Numele firului returnat in memoria tampon de ieire va avea terminaie nula. VALOAREA RETURNATA In caz de succes, aceste funcii returneaza 0; in caz de eroare, ele returneaza un numar de eroare diferit de zero. ERORI-IEIRE Funcia pthread_setname_np() poate eua cu urmatoarea eroare: ERANGE Lungimea irului specificat indicat de name depaete limita permisa. Funcia pthread_getname_np() poate eua cu urmatoarea eroare: ERANGE Memoria tampon specificata de name i size este prea mica pentru a conine numele firului. Daca oricare dintre aceste funcii nu reuete sa deschida /proc/self/task/tid/comm, apelul poate eua cu una dintre erorile descrise in open(2). ATRIBUTE Pentru o explicaie a termenilor folosii in aceasta seciune, a se vedea attributes(7). +--------------------------------------+---------------------+---------+ |Interfaa | Atribut | Valoare | +--------------------------------------+---------------------+---------+ |pthread_setname_np(), | Sigurana firelor | MT-Safe | |pthread_getname_np() | | | +--------------------------------------+---------------------+---------+ STANDARDE GNU; de aici i sufixul ,,_np" (neportabil) din denumiri. ISTORIC glibc 2.12. NOTE pthread_setname_np() scrie intern in fiierul specific firului comm din cadrul sistemului de fiiere /proc: /proc/self/task/tid/comm. pthread_getname_np() il recupereaza din aceeai locaie. EXEMPLE Programul de mai jos demonstreaza utilizarea pthread_setname_np() i pthread_getname_np(). Urmatoarea sesiune shell arata un exemplu de execuie a programului: $ ./a.out A fost creat un fir. Numele implicit este: a.out Numele firului dupa definire este THREADFOO. ^Z # Suspenda 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 #include #include #include #include #include #include #define NAMELEN 16 static void * threadfunc(void *parm) { sleep(5); // permite programului principal sa stabileasca 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 dupa 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); } CONSULTAI I prctl(2), pthread_create(3), pthreads(7) 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.12 23 iulie 2024 pthread_setname_np(3)