永发信息网

如何调用Linux内核函数

答案:1  悬赏:10  手机版
解决时间 2021-01-25 10:53
如何调用Linux内核函数
最佳答案
注意看这个文件
sysdeps/unix/sysv/linux/syscalls.list
里面记录着系统调用的名字和一些属性,具体我也没有研究过,不懂。
再看select的实现,很让人惊讶,一旦使用,结果就是“报错“。
int
__select (nfds, readfds, writefds, exceptfds, timeout)
int nfds;
fd_set *readfds;
fd_set *writefds;
fd_set *exceptfds;
struct timeval *timeout;
{
__set_errno (ENOSYS);
return -1;
}
libc_hidden_def (__select)
stub_warning (select)
weak_alias (__select, select)
这是因为glibc并没有实现系统调用,而是调用系统调用,
更进一步,连调用系统调用都没有一个个实现,而是使用了通用的办法,
理由很简单,所有的系统调用在linux内核头文件里都能找到,
所有的系统调用参数类型就那么几种,参数个数也是有限的,
因此没有必要针对所有的系统调用一一封装,
于是就有了这个list文件,自动生成调用系统调用的函数,
如果生成失败,也就是你看到的“报错”。
符号是有强弱的,当自动生成成功的时候,“报错”的弱符号就被忽略了。
当你在glibc中找到一个系统调用的封装源码,是以下原因,
1. 编译的目标系统不支持这个系统调用,所以自己用另一种方式实现了。
2. 这个系统调用无法使用通用的自动生成方式生成,用特化的方式覆盖。
3. 针对这个系统调用做了特别的优化。
4. 其它可能的原因。
具体可以留意
SYSCALL, PSEUDO, DO_CALL, INLINE_CALL 等名字
这两个文件是重点所在
sysdeps/unix/i386/sysdep.h
sysdeps/unix/i386/sysdep.S
要搞清楚具体的自动生成过程,恐怕得研究glibc自身的编译过程了
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
碧泉纯净水有限公司地址在哪,我要去那里办事
请问,90mm厚,吸音系数90%的吸音墙多少价格
移动充值卡批发和代理业务是怎么弄的?
求MIKU泡沫樱花(泡沫セレシェイラ)歌词 日+
下列哪项不是阴虚发热的临床表现A.午后潮热B.
水利工程监理巡视记录巡视人有谁签1717
庆阳市玉竹综合经销部地址在哪,我要去那里办
中兴保险公司大不大
地中海咖啡地址好找么,我有些事要过去
网页中含有javascript按钮,点击后无反应
下列有关细胞核的叙述,正确的是A. 是细胞新
狗狗单睾,隐睾怎么办
14.7÷(3+1×4)=2.1为什么
我今年21岁,已婚妇女一枚,最近我发现我的腰
新潮沙发家具批发配送中心地址在什么地方,想
推荐资讯
上品社美发地址在哪,我要去那里办事
娇娇养发店怎么去啊,我要去那办事
天津人的祖先是来自安徽的多还是山西大槐树的
房产抵押贷款无法偿还,怎么办
铁观音茶苑怎么去啊,我要去那办事
日月潭KTV怎么去啊,我要去那办事
每台变压器都要配有载调压开关吗
“自隋以来,平民社会,穷困子弟,十年寒窗,
普通CT胸片可以鉴定尘肺病吗
神像手里有动物是啥意思
高昌区艾丁湖乡团结小学地址好找么,我有些事
谁知道七台河市同城寂莫交友联系方法
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?