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

为什么有的内核函数前面会有“_ ”双下划线
在我们阅读内核代码时,经常会看到有的函数名称前面会带有“
_”的双下划线,而有些又没有,这个有什么用呢?
原来内核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

发布了60 篇原创文章 · 获赞 0 · 访问量 588
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览