打电话给gettid witin glibc



我在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。"

由于在我的情况下CCD_ 8将被定义为我直接在CCD_,请建议我如何克服这一点。

谢谢,Kapil

gettid()是一个系统调用。据我所知,gettid没有油嘴滑舌的包装器。您需要使用syscall()调用gettid()。以下代码适用于我。
#include <sys/syscall.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
int main()
{
    long tid;
    tid = syscall(SYS_gettid);
    printf("%ldn", tid);
    return EXIT_SUCCESS;
}

相关内容

  • 没有找到相关文章

最新更新