позвони Гетти с Глибком - PullRequest
6 голосов
/ 05 марта 2012

Я работаю в glibc, и мне нужно получить идентификатор текущего потока.Для этого я использую syscall(SYS_gettid); Проблема в том, что я вынужден включить bits/syscall.h вместо идеального случая, то есть sys/syscall.h.

sys/syscall.h внутренне вызывает bits/syscall.h, но это обернуто макросом #ifndef _LIBC,то есть

     #ifndef _LIBC
        /* The Linux kernel header file defines macros `__NR_<name>', but some
           programs expect the traditional form `SYS_<name>'.  So in building libc
           we scan the kernel's list and produce <bits/syscall.h> with macros for
           all the `SYS_' names.  */
       # include <bits/syscall.h>
    #endif

также bits/syscall.h заявляет, что «Никогда не используйте биты / syscall.h напрямую; вместо этого включите sys / syscall.h».

Так как _LIBC будет определен в моемВ случае, когда я пишу код непосредственно в malloc.c, предложите, пожалуйста, как мне это преодолеть.

Спасибо, Капиль

1 Ответ

16 голосов
/ 12 марта 2012

gettid () - системный вызов.Насколько я знаю, для gettid нет glibc-оболочки.Вам нужно вызвать gettid () с помощью syscall ().Следующий код работает для меня.

#include <sys/syscall.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>

int main()
{
    long tid;

    tid = syscall(SYS_gettid);
    printf("%ld\n", tid);
    return EXIT_SUCCESS;
}
...