1.存储文件流程
从data_bitmap中获取空间数据块,写入文件数据,从inode_bitmap获取空间节点inode,写入文件详细信息以及数据块位置将文件目录项写入所在目录文件中。目录文件中存放的是一张表:其记录的时目录下的文件信息(文件名+inode节点号)
2. 软链接/硬链接
软链接文件:创建:ln -s tmp.txt tmp.soft 文件类型是‘l’开头
是一个单独文件,通过记录源文件路径进而访问源文件数据 类似于快捷方式
硬链接文件:创建:ln tmp.txt tmp.hard
跟源文件没区别,通过相同的inode节点访问源文件数
如果删除源文件,对于硬链接文件只是链接数-1,但是依旧可以访问;软链接文件则失效,无法访问。
软链接文件可以跨分区建立,而硬链接不可以
软链接可以对目录创建,硬链接不可以
3.动态库/静态库生成、使用
动态库生成:动态库命名:lib是前缀 so是后缀,中间是库名字
gcc -fPIC -c b.c -o b.o //将每个c语言代码编译成自己的目标代码
gcc --share b.o libmytest.so //将所有的目标代码合到一起生成动态库
-fPIC:编译选项--产生位置无关代码
--share:连接选项--将所有目标代码连接到一起生成动态库而不是生成可执行程序
静态库生成:静态库命名:lib是前缀 a是后缀,中间是库名字
gcc -fPIC -c b.c -o b.o //将每个c语言代码编译成自己的目标代码
ar -cr libmytest.a b.o //将所有的目标代码合到一起生成静态库
ar:打开静态库
-c:创建 -r:模块替换
使用静态库:在linux下库文件只有被放到指定路径下才能被找到:/lib /lib64 /user/lib /user/lib64
程序链接时链接库文件:1.向/etc/ld.so.conf.d/添加配置文件,再配置文件中添加库的搜索路径;
2.将库文件直接放到指定路径下;
3.设置环境变量:LIBRARY_PATH = . 库的链接搜索路径环境变量
设置环境变量:LD_LIBRARY_PATH = . 程序运行时库的加载路径环境变量
4.使用gcc的-L选项指定库的链接搜索路径
gcc a.c -o main -L . -lmytest gcc -L 用于指定库的链接搜索路径 -l指定链接名称
因为程序链接静态库时不需要依赖静态库存在,因此可以不用拷贝到/lib下,链接静态库时不需要静态链接-static,只需要保证指定路径下只有静态库就行了。