动态库和静态库

目录

深刻理解软硬链接

软链接

硬链接

软硬链接的应用

几个注意事项


我们今天来学习动态库和静态库!!!

深刻理解软硬链接

软链接

使用ln -s 待链接文件 生成的软链接文件名,指令格式可以创建软链接,这个ln指令是用来创建链接的,创建软连接时必须带-s指令,这个-s是区分创建的是软链接还是硬链接的依据。然后软连接名是随意的,取什么都可以,没有link等的后缀都可以的,但不能是单纯的路径。

我们可以看到,对file.txt建立了软链接,此时权限后面的数字都是1,这个数字是inode的引用计数count,就是计算有几个指针指向了这个文件(的inode),奇怪呀,软链接都链接了文件,为什么不是2,自己的文件名映射了inode是1嘛,为什么不是2,所以软链接其实没有真正的链接了文件,只是仅仅保存了目标文件的路径。这是软链接和硬链接的核心区别之一。

如上图可以看出我们如果删除了原文件,那这个路径就消失了,所以对于只保存路径的软链接来说就失去了链接对象,但是之前我们看到了软连接里面的内容和原本的file.txt里面的是一样的,说明软连接的本质就是原文件,就是一个独立的文件,使用软连接就是在使用原文件,软链接是相对独立的,软链接有独立的inode,这种特性有点像windows的快捷方式。既然软链接不算真正的链接,那count计数记的是什么呀,count引用计数记的是一个目录或者文件的硬链接数。

硬链接

ln指令不加 -s,默认创建硬链接,名字还是随便的。

我们创建硬链接,为什么硬链接的引用计数和原文件一样,为什么呢,系统创建一个新目录项 file_hard.link,但它指向了和原文件相同的 inode,多了一个硬链接所以变成2了,所以硬链接本质不是一个独立的文件,没有独立的inode,他的存在更像Linux里的文件备份,硬链接的本质是一组文件名和已经存在的文件的映射关系。我们创建一个新的文件,此时引用计数就是1,可得创建新文件的本质就相当于创建硬链接,是文件名和inode的硬链接。由于硬链接和原文件是独立的,所以就算我们删除了原文件也可以查看到硬链接里面的备份。

软硬链接的应用

由于软连接相当于快捷方式的特点,今天我们可以在自己的当前目录下运行code.exe,但是需要声明在当前的目录,我们可以使用软连接将这个文件链接到/usr/bin目录下,这样直接运行软链接就可以找到code.exe直接运行了。

链接到这个目录下需要root权限的,然后不对呀为什么填写的是从一个路径链接到一个路径呢,你不是说软链接不能是路径吗,这里是的软链接是code,前面的路径只是放置的位置。code里面放置的就是code.exe吧,那直接运行code就是在变向的运行code.exe吧。

我们的系统头文件都放在/usr/bin/include路径里面,我们可以使用软链接在当前目录里面链接这个路径,这样直接访问软链接,那所有的系统头文件是不是都在当前目录看到了。

几个注意事项

Linux下禁止了对目录的硬链接,这是为了放置目录自己形成回路,为什么软链可以,因为系统会自动略过软链接,反正只是存储路径,而且前面也讲过了,软链接不是真的链接了!!!

目录的引用计数会因为多了一个.指向当前目录而多一个,而如果会存在下级目录,那又会因为下级的..指向它而又多一个。

所以dir1等于3就是这么来的 count(dir1) = dir1(本身名字指向) + dir1的.指向 + dir2的..指向。

相关推荐
_OP_CHEN21 分钟前
【Linux系统编程】(二十九)深度解密静态链接:从目标文件到可执行程序的底层魔法
linux·操作系统·链接·文件系统·c/c++·静态链接
草莓熊Lotso27 分钟前
Qt 主窗口核心组件实战:菜单栏、工具栏、状态栏、浮动窗口全攻略
运维·开发语言·人工智能·python·qt·ui
RisunJan27 分钟前
Linux命令-lprm(删除打印队列中任务)
linux·运维·服务器
Web极客码28 分钟前
WordPress从经典编辑器升级到古腾堡编辑器
运维·编辑器·wordpress
zzzsde30 分钟前
【Linux】进程(5):命令行参数和环境变量
linux·运维·服务器
迎仔31 分钟前
E-自动化:GPU驱动维护自动化
运维·gpu·gpu驱动
代码游侠32 分钟前
复习——Linux设备驱动开发笔记
linux·arm开发·驱动开发·笔记·嵌入式硬件·架构
The森33 分钟前
Linux IO 模型纵深解析 03:同步 IO 与异步 IO
linux·服务器
草莓熊Lotso2 小时前
Linux 文件描述符与重定向实战:从原理到 minishell 实现
android·linux·运维·服务器·数据库·c++·人工智能
历程里程碑2 小时前
Linux22 文件系统
linux·运维·c语言·开发语言·数据结构·c++·算法