【发布时间】:2019-08-31 14:32:28
【问题描述】:
我们以gettid系统调用为例:
http://man7.org/linux/man-pages/man2/gettid.2.html
我知道 gettid 没有在 libc 中实现,我需要直接进行系统调用才能使用它 (syscall(SYS_gettid))。我自己用这个 C 代码验证了这一点:
#include <stdio.h>
#include <sys/types.h>
int main(){
pid_t a = gettid();
return 0;
}
编译时不链接并给出此警告:warning: implicit declaration of function 'gettid'; did you mean 'getline'。
现在我的问题是,为什么 Linux 文档记录了它,就好像这个函数确实存在一样?
SYNOPSIS
#include <sys/types.h>
pid_t gettid(void);
他们没有关于如何进行直接系统调用的示例,而是有上面的代码 sn-p 不存在且无法使用。我有什么遗漏吗?
【问题讨论】:
-
@Scheff 没有任何问题,这是实际情况:ubuntuforums.org/showthread.php?t=345317,其他一些系统调用也存在问题。
-
@josh,您链接的文档指定了首先提供包装函数的 glibc 版本,以及在早期版本中必须使用的机制 (
syscall())。那你到底在问什么? -
所以 linux 本身不提供任何包装器,这是 libc 的工作
-
josh 干得好,风格好,接受了我的狡猾提示。祝你好运。
-
@JohnBollinger 包装器已添加到 GlibC 版本 2.30,仅在四个星期前于今年 8 月 1 日发布,所以我们应该在这里给 OP 一点松懈,我认为 ;- )
标签: c linux system-calls