连接文件
软链接:
符号链接 相当于 windows上的快捷方式
软连接和源文件不是一个文件 —> inode结点不同
通过连接文件也能访问(读、写)源文件的内容
ln -s 源文件 链接文件
ls -i 查看文件结点
- ls -i 显示当前目录下所有文件的inode结点号
ln -s 源文件 链接文件
如果源文件一旦移除或者被修改存储路径或名称,则软连接文件失效
原因:
Linux的文件系统–>ext4 索引式文件系统
Windows的文件系统–>NTFS
U盘的文件系统–>FAT32 链接式文件系统
ext4 格式化时,会将磁盘划分为三个区域
1.superblock:
文件系统的整体信息 inode和block的总量 使用量 剩余量
2.inode区域:
文件的属性信息(文件类型 文件属主 组用户 大小…)以及文件内容所在的block
3.block区域:
文件的内容 一个大文件可以占据多个block
文件内容存储在block中,但是每一个block必须留有空间存储下一个block的位置.
硬链接:
相当于源文件的别名
软连接和源文件是一个文件 —> inode结点相同
ln 源文件 链接文件
ls -l 查看链接数,引用计数
(链接数指明了这个文件有几个别名 当链接数变为0 我们才能将这个文件的内容删除掉)
库文件:
提前写好的某些功能代码的集合 库中都没有main函数
例如:
Windows: 静态 .lib 动态.dll
Linux: 静态 .a 动态 .so
静态库
中间文件(.o)的集合
1. 将.c编译成.o文件–>没有main函数
2. 将.o文件打包成静态库
ar crv libxxxxx.a .o
静态库在链接阶段中会将程序中用到的功能代码合并到最终的可执行文件中,可执行文件执行时,并不依赖静态库.
优点: 效率高 (和动态库对比)
缺点: 占用磁盘(比如有十个程序都要用到这个静态库 就要加载十次)
动态库(共享库):不可执行的可执行文件(只是某些功能代码的集合)
不可执行的原因:没有main函数
gcc -shared -fPIC -o libxxxxx.so .c
共享库在程序执行时,由操作系统单独加载动态库(所以操作系统必须能够找到动态库存储的位置—必须依靠环境变量)
动态库存储的
- 默认路径: /lib 或 /usr/lib(首先考虑:把动态库拷贝到这两个里面)
- 环境变量:LD_LIBRARY_PATH export LD_LIBRARY_PATH=路径 仅对当前终端有效(或者考虑:把环境变量的路径一改)
- 特定用户的终端配置文件 /home/user/.bashrc 在这个文件下改环境变量,就可以在所有终端使用(在这个文件里把export LD_LIBRARY_PATH=path加进去)
- 系统的终端配置文件 /etc/bashrc
gcc -o main main.o -L库路径 -l库名