硬链接
ln myfile.txt hard_file.link
264962 -rw-rw-r-- 2 zhangsan zhangsan 0 Sep 30 03:16 hard_file.link
264962 -rw-rw-r-- 2 zhangsan zhangsan 0 Sep 30 03:16 myfile.txt
273922 lrwxrwxrwx 1 zhangsan zhangsan 10 Sep 30 03:17 soft_file.link -> myfile.txt
硬链接没有独立的iNode
建立硬链接,根本没有创建新文件,因为没有为硬链接分配独立的iNode,因为没有创建文件,所以,硬链接没有自己的属性集合和内容集合,使用的是他人的iNode。
建立硬链接的本质:在指定路径下,新增文件名和iNode编号的映射关系
只有当一个文件的硬链接数变为0时,才算真正被删除
./..均为硬链接
软链接
ln -s myfile.txt soft_file.link
264962 -rw-rw-r-- 1 zhangsan zhangsan 0 Sep 30 03:16 myfile.txt
273922 lrwxrwxrwx 1 zhangsan zhangsan 10 Sep 30 03:17 soft_file.link -> myfile.txt
软链接有独立的iNode,可以被当做独立的文件看待。
软链接保存的是目标文件的路径。
软链接类似于快捷方式。
acm
Access 最后访问时间 不是实时更新的
Modify 文件内容最后修改时间
Change 属性最后修改时间
内容修改后属性大概率也会发生变化
静态库与动态库
静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库
链接时静态库的代码会被加载到程序中,故静态库必须用加载到内存
动态库(.so):程序在运行的时候才去链接动态库的代码,多个程序共享使用库的代码。
生成静态库
[root@localhost linux]# ar -rc libmymath.a add.o sub.o
ar是gnu归档工具,rc表示(replace and create)
生成动态库
shared: 表示生成共享库格式
fPIC:产生位置无关码(position independent code)
库名规则:libxxx.so
ldd mymath
查看链接方式
动态库的加载:采用与位置无关码进行编址,在动态库中形成的函数以偏移量的形式保存其地址,链接时将偏移量链接到可执行程序中,加载时一旦动态库加载完成,并且动态库的起始地址确定
那么函数在地址空间中的位置即可确定。
gcc
-I
gcc -o mymath main.c -I ./mylib/include
通过-I指定头文件的位置
-L
通过-L指定库所在路径
gcc -o mymath main.c -I ./mylib/include -L ./mylib/lib
-l
通过-l指定库名称
gcc -o mymath main.c -I ./mylib/include -L ./mylib/lib -l mymath
提取库名称是需要去掉其前缀和后缀。