linux VFS快速入门,请参考我的博客如何在linux添加一个最简单的自己写的文件系统。源码今日头条,视频演示https://m.toutiaoimg.com/i6753964400429761031/?gd_ext_json=%7B%22enter_from%22%3A%22click_creation_center%22%2C%22category_name%22%3A%22creation_center%22%7D&enter_from=click_creation_center&category_name=creation_center&share_token=19b860f8-843e-4c8b-adfa-b6e3aa083c2b&tt_from=copy_link&utm_source=copy_link&utm_medium=toutiao_android&utm_campaign=client_share?=
参考上述,可快速了解vfs数据结构(比如inode和文件的关系,dentry,super_block等)及VFS API的使用。
以cdds_service、cdds动态库、cdds_bag举例。有同事在更新cdds动态库的时候,经常没有全部杀光调用了cdds动态库API的进程。比如cdds_service在运行,这个时候更新动态库(这样操作,动态库文件的inode不会发生改变),然后再启动cdds_bag,这个时候cdds_bag还会使用内存中缓冲的cdds动态库,导致cdds_bag crash,或其他各种诡异问题。如下图所示,动态库cdds_mm的inode没有发生改变。动态库的加载流程是open→mmap。由于inode没有发生改变,而且内存中缓冲有动态库文件,这个时候将导致新启动的进程将使用内存中缓冲的就动态库。如果新动态库API发生了改变,比如参数改变,这会导致各种诡异问题。