为什么有的内核函数前面会有“_ _”双下划线

为什么有的内核函数前面会有“_ ”双下划线
在我们阅读内核代码时,经常会看到有的函数名称前面会带有“
_”的双下划线,而有些又没有,这个有什么用呢?
原来内核API函数具有这种名称的,通常都是一些接口的底层函数,应该谨慎使用。实质上,这里的双下划线就是要告诉程序员:谨慎调用,后则后果自负。举个例子,在内核模块的初始函数时,实际的定义如下:
 
static int _ _init initializition_function(void)
{
       /具体的初始化代码/
}
module_init(initialization_function);
 
还有清除函数:
static void _ exit cleanup_function(void)
{
       /具体的清除代码/
}
module_exit(cleanup_function);
因为清除函数没有返回值,所以会被声明为void。
exit 修饰词标记该代码仅用于模块卸载(编译器将把该函数放在特殊的ELF段中),如果在编译时被编译进内核,而不是以模块化编译,则这个函数将会被忽略丢掉,它只能在模块被卸载或者是关闭系统的时候被调用,其他的任务时间的调用都是错误的。
 
这里面就用到了
init 和 _exit有双下划线函数,虽然这个函数看起来的点不一般,它对内核来说是一种暗示,表明这个函数是在模块初始化的时候使用。但是当模块被卸载后,模块装载器就会把这个函数给丢弃掉,将这个模块占用的系统资源释放。
       所以当我们在写程序代码或者是修改内核代码时,如果希望在初始化结束后仍然使用这个函数或者是数据结构,就千万不要加上双下划线,否则会带来意想不到的严重后果。
————————————————
版权声明:本文为CSDN博主「Hens007」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Hens007/article/details/7279781

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值