用glibc打电话给gettid

时间:2012-03-05 10:36:04

标签: linux-kernel malloc glibc system-calls libc

我在glibc工作,我需要获取当前线程的id。为此,我使用 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说明了这一点         “永远不要直接使用bits / syscall.h;而是包含sys / syscall.h。”

由于_LIBC将在我的情况下定义,因为我正在malloc.c直接编写代码, 请建议我如何克服这一点。

谢谢, 卡皮尔

1 个答案:

答案 0 :(得分:16)

gettid()是系统调用。至于我知道gettid没有glibc包装器。您需要使用syscall()调用gettid()。以下代码适用于我。

#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;
}