我正在阅读源代码来理解sysctl
FreeBSD。
看起来是最重要的功能
int __sysctl(const int *name, u_int namelen, void *oldp, size_t *oldlenp, const void *newp, size_t newlen);
中没有定义lib/libc/gen/sysctl.c
。
我尝试 grep FreeBSD 的源代码,但未能找到__sysctl
.
它是在哪里定义的?
答案1
这是我学到的:
__syscall
未在任何 C 源文件中定义;根据马克·普洛特尼克的说法:
libc
是__sysctl
用几行汇编语言编写的系统调用包装器,在编译libc
[期间生成1]。- 系统调用的入口点是在 kern_sysctl.c 中[2]。系统调用是
sys_foo()
在内核中调用的。
链接
感谢 edje、Ed Schouten (@EdSchouten)、@FreeBSDHelp 和 Mark Plotnick。