【Linux】详谈重定向原理、动态库和静态库的使用、文件系统、软硬链接

您所在的位置:网站首页 可重定向文件 【Linux】详谈重定向原理、动态库和静态库的使用、文件系统、软硬链接

【Linux】详谈重定向原理、动态库和静态库的使用、文件系统、软硬链接

2024-07-17 07:32| 来源: 网络整理| 查看: 265

目录 1.重定向1.1重定向原理:1.2重定向接口 2.动态库2.1生成动态库2.2使用动态库 3.静态库3.1生成静态库3.2使用静态库 4.文件系统4.1ext2文件系统4.2文件的存储4.3文件的获取 5.软连接6.硬连接

1.重定向

重定向分为两种:

清空重定向>:重定向到文件中,先清空文件中内容追加重定向>>:向文件中追加内容

比如说在bash中将一串字符重定向到文件中。

在这里插入图片描述

1.1重定向原理:

重定向实际上是更改了标准输出文件描述符的指向,让其标准输出指向另外一个文件描述符。

原理如图:凡是往标准输出中写的内容,都写到了newfile中 在这里插入图片描述

1.2重定向接口

#include int dup2(int oldfd, int newfd)

操作步骤:

关闭newfd,关闭成功走2,关闭失败则重定向失败newfd拷贝oldfd

例:标准输出被重定向了dup_test文件中。 在这里插入图片描述      

2.动态库

动态库(.so):程序在运行的时候才去链接动态库的代码,多个程序共享使用库的代码。

两个命令:

ldd [可执行程序],查看当前程序依赖的动态库文件 file [可执行文件],可查看文件的属性

在这里插入图片描述

2.1生成动态库 编译动态库的源码文件中不能出现main函数gcc -shared -fPIC 文件名 -o libfuc.so:fuc称之为动态库的名字,前缀:lib,后缀:.so 在这里插入图片描述 在这里插入图片描述 2.2使用动态库

包含动态库的头文件 在这里插入图片描述

指定链接动态库所在的路径:-L [路径] 在这里插入图片描述

指定链接动态库的名字:-L [库名称、去掉lib和so] 在这里插入图片描述

编译可执行程序的时候,一定要告诉编译器,我们链接的是哪个动态库。

动态库可以在多个程序间共享,所以动态链接使得可执行文件更小,节省了磁盘空间。      

3.静态库

静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。 windows下静态库后缀为.lib,动态库后缀为.dll。

3.1生成静态库 ar -rc libfuc.a 依赖的文件:fuc:静态库的名称,依赖的文件必须是.o文件 在这里插入图片描述 3.2使用静态库 gcc 文件名 -L 路径 -lfunc 在这里插入图片描述 在这里插入图片描述 若未使用-static时,则一定为动态链接。

     

4.文件系统

磁盘是一种顺序的存储介质,但是顺序存储方式会导致磁盘的利用率的问题,产生磁盘碎片。

所以采用离散式存储会提高程序对磁盘的利用率。

目前Linux中最常用的文件系统为:ext2。

4.1ext2文件系统

在这里插入图片描述 (图源:LinuxC编程一站式学习)

文件系统中存储的最小单位为块(Block),一个块有多大是在格式化时确定的。mke2fs -b可以设置块大小为1024、2048、4096字节。上图中启动块(Boot Block)的大小是确定的,就是1KB,启动块由PC标准决定,用来存储磁盘分区信息和启动信息,任何文件系统都不能使用启动块。ext2文件系统将整个分区划分成若干个同样大小的块组(Block Group)。

Super Block(超级块):描述整个分区的文件系统信息,例如块大小、文件系统版本号。超级块在每个块组的开头都有一份拷贝。GPT(块组描述符):由很多块组描述符组成,整个分区分成多少个块组就对应有多少个块组描述符。每个块组描述符存储一个块组的描述信息,例如块组从哪里开始是inode表、哪里是数据块、空闲的inode表和数据块还有多少等。在开头也有一份拷贝,这些信息十分重要。Block Bitmap(块位图):本质上是一个位图,每一个比特位表示Data blocks当中块的使用情况,为1表示占用,为0表示空闲。inode Bitmap(inode 位图):每个比特位表示一个inode是否空闲可用。inode Table(inode 表):每个文件都有一个inode,一个块组的所有inode组成了inode表。inode表占多少个块在格式化时就要决定并写入块组描述符。mke2fs默认策略是一个块组有多少个8KB就分配多少个inode。数据块:存放文件内容 4.2文件的存储 在Block Bitmap区域查找空闲的Data block块,将文件存储在空闲的Data block块当中。通过inode Bitmap获取空闲的inode节点,通过inode节点去描述文件在Data Block区域当中存储位置。inode+文件名称被作为目录的目录项保存下来 4.3文件的获取 通过文件名称和inode节点号找到inode对应的文件信息在Data Block区域获取当前文件存储的内容,再进行拼接,拼接完成之后就是文件内容了。

     

5.软连接

软连接:相当于文件的一个快捷方式(别名)

生成软连接文件:ln -s [源文件] [软连接文件]不同inode节点保存的信息是相同的在删除软连接文件或软连接文件指向的源文件的时候,一定要将二者都删除掉。

在这里插入图片描述

在这里插入图片描述      

6.硬连接

硬连接:通过inode引用另外一个文件。

ln 源文件 生成的硬连接文件inode节点一模一样两者除名称不一样,其余都一样

在这里插入图片描述

删除文件时干了两件事情:①将inode表中对应的记录删除掉,②硬连接数-1,如果为0,则将对应的磁盘空间释放。



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3