为什么有的内核函数前面会有“ 您所在的位置:网站首页 dragonboatraces中为什么race加s 为什么有的内核函数前面会有“

为什么有的内核函数前面会有“

2023-09-18 14:34| 来源: 网络整理| 查看: 265

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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有