LINUX系统编程:软硬链接,动静态连接

本文详细解释了硬连接和软连接的工作原理,以及它们与inode引用计数的关系。同时,通过比喻动态链接和静态链接,阐述了它们在程序中的作用和优缺点。
摘要由CSDN通过智能技术生成

1.硬连接

什么是硬连接?,我们或许可以用操作清楚的认识什么是硬连接。

在我们学习文件的时候这个数字好像完全没有被提到过,这个代表什么意思呢?

这个代表该文件的inode编号与文件映射的次数,现在该文件的inode只与test.c这个文件名映射,所以该数字为1,这时候使用ln命令,给该文件建立一个硬连接文件。

ln test.c test.a//为test.c建立名为test.a的硬连接

看这两个文件的标号变为2,说明这两个文件使用的是一个inode编号,inode的编号一样说明他们本质上是一个文件。

所以硬连接的本质就是,给当前文件的inode编号再映射一个文件名

那这个数字的作用也很显而易见了,这就是大名鼎鼎的引用计数,我用这个inode映射一个文件,引用计数++,删除一个该inode与文件名的映射引用计数--。

同样目录的这个数字也是引用计数,因为目录也是文件,但是新创建的一个目录,为什引用计数是2呢?

这是因为我们经常使用的 .和..本质就是硬连接,.就是当前目录的硬连接呀!!!!

2.软连接

同样使用ln命令为test.c创建一个名为test.soft的软连接

ln -s test.c  test.soft

 这个时候我们发现test.c的引用计数没有++,说明test.soft这个文件用的不是test.c的inode编号,test.soft是一个独立的文件。

软连接的本质:存储目标文件的路径,通过路径解析,找到文件的indoe。

3.动静态连接

例:用去网吧上网举例子

动态链接:我想要上网,我必须先到网吧,然后找网管开机。

                我想用使用库的函数,得需要通过某种方式,去库中寻找这个函数。

                库被删除,不能使用。

静态链接:直接把网吧的电脑搬到家里,想要上网直接在家里上网,但是这个电脑会占我家里的空间。 

                直接把库拷贝到我的程序中,这样直接就可以直接使用,但是这个程序会变大很多。

                库被删除也可以使用。

gcc -static -o testhard test.c//生成静态连接的目标文件testhard

gcc - o testsoft test.c //生成动态连接的目标文件testsoft

让我们看看他们的大小分别是多少。

差了10倍有余,gcc默认的链接方式就是动态链接。

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值