湘潭学校网站建设 磐石网络,黄页推广有限公司,广州网站建设怎么样,河南省建设部官方网站文章目录 FILE SYSTEM软硬链接 动静态库 使用别人提供的库 FILE SYSTEM
文件的管理工作#xff1a; 1.基础知识#xff1a; 文件 属性 内容不是所有文件都会打开所有的打开的#xff0c;未打开的文件会进行管理未打开文件#xff0c;要能做到快速定位文件磁盘–物理存… 文章目录 FILE SYSTEM软硬链接 动静态库 使用别人提供的库 FILE SYSTEM
文件的管理工作 1.基础知识 文件 属性 内容不是所有文件都会打开所有的打开的未打开的文件会进行管理未打开文件要能做到快速定位文件磁盘–物理存储结构 机械磁盘定位是CHS定位法逻辑抽象–逻辑存储结构 抽象成线性结构变成对数组的增删查改访问磁盘是一块一块(块级别的IO)的访问 2.文件系统格式化格式化成对应的初始化管理磁盘的状态 3.磁盘的文件管理是磁盘的分区管理一般是分区管理
Boot blockerBlock group 0Block group …Block group n一般是存储BIOS等最初始启动系统的程序后面的这些块就是正常存储
Block group
Super BlockGroup Descriptor TableBlock Bitmapinode Bitmapinode TableData Block存放文件系统本身的结构信息。记录的信息主要有block 和 inode的总量未使用的block和inode的数量一个block和inode的大小最近一次挂载的时间最近一次写入数据的时间最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏可以说整个文件系统结构就被破坏了对每个 Block group 存有进入信息切包含了相关信息块位图存放对应的Data Block是否被占用对应的inode是否被占用存放文件属性 如 文件大小所有者最近修改时间等.一个文件值对应一个inode存数据
所以一般新建文件步骤是
找到一个空闲的inode节点把文件信息放入其中。需要几个存储块就找几个实在不够还可以通过映射的方式记录分配情况到inode对应的块上添加文件名到目录
删除就很简单置零inode和对应的block bitmap就好。
软硬链接
硬链接并非真正的文件其实还是同一个文件。其文件inode相同 ln file1 file2 建立文件2是文件1的硬链接 linux可以多个文件对应同一个inode。 ln -s file1 file2 建立文件2是文件1的软链接 ls -li 可以查看文件inode. 软连接本质还是文件相当于是windows下的的快捷方式。是一个区别之前文件的新文件。
目录不允许建立硬链接否则会存在find的时候循环。
我们在删除文件时干了两件事情1.在目录中将对应的记录删除2.将硬连接数-1如果为0则将对应的磁盘释放。但是linux下是具有这种结构的比如 . 和 .. (当前目录和上级目录
动静态库
静态库(a.)对 .o目标文件进行打包让使用者可以直接进行连接形成程序。程序运行时不再需要动态库。 动态库.so程序在运行的时候才去链接动态库的代码多个程序共享使用库的代码。一个与动态库链接的可执行文件仅仅包含它用到的函数入口地址的一个表而不是外部函数所在目标文 件的整个机器码在可执行文件开始运行以前外部函数的机器码由操作系统从磁盘上的该动态库中复制到内存中这个过程称为动态链接。 优点动态库可以在多个程序间共享所以动态链接使得可执行文件更小节省了磁盘空间。操作系统采用虚拟内存机制允许物理内存中的一份动态库被要用到该库的所有进程共用节省了内存和磁盘空间。
静态库生成ar -rc libname.a a.o b.o 其中 name是库的名字 查看静态库中的目录列表:ar -tv libmymath.a 打包对应的头文件和.o文件 静态库使用 gcc test.c -I myA_lib/include -lMyA -L myA_lib/lib^C -I 新增头文件搜索路径表示找头文件是也要去所给目录下找-L新增库文件搜索路径找库时要去所给目录下找。-l后面紧接所需要的库的名称 gcc默认是动态链接的第三方库默认不认识。如果gcc -static 就必须要有.a也就是静态库
动态库生成 gcc -fPIC -c CSource1.c CSource2.c 产生位置无关码 gcc -shared -o libname.so *.o 形成动态库 也需要打包表明对应的库和头文件 动态库使用 1.使得程序在运行时能找到对应的库和头文件 A.直接安装到系统
拷贝对应的动态库到系统库 /lib 或者 /lib64拷贝对应的头文件到 /usr/include/完后链接的时候连接你需要使用的库即可 gcc a.c -lname
B.给当前库在当前目录或者系统库目录下建立软链接
需要和库同名
C.或者添加到库环境变量
echo $LD_LIBRRAY_PATHexport 上述名称的环境变量和你的库的地址系统呢也能找到依赖的动态库
D.修改 /etc/ld.so.conf.d/
增加我们自己的文件内容是的存放动态库的地址
生成的代码例子
dy-liblibMyA.so$(dy-lib):Array.ogcc -shared -o $ $^
%.o:%.cgcc -fPIC -c $.PHONY:output
output:mkdir -p myA_lib/includemkdir -p myA_lib/libcp -f *.h myA_lib/includecp -f *.so myA_lib/lib.PHONY:clean
an: 18 rm -rf *.o *.so myA_lib
可执行程序使用的是绝对编址库使用的是相对编址
使用别人提供的库
1.CentoOS上可以用yum去安装对应的库 2.去yum安装之后一般都会在linux系统里面拷贝对应的头文件和库在系统目录。 3.我们在自己的源代码使用这些库包含头文件 4.编译链接时需要指明链了什么库