Linux复习:基础IO 《系统IO》《文件系统》《动静态库的概念/生成和使用》

本文深入探讨C语言中的文件输入输出(IO)机制,包括标准输入输出、文件描述符的概念及其工作原理。同时,文章讲解了文件系统的运作方式,如inode的作用,文件创建与删除的过程。此外,还对比了静态库与动态库的特点和应用场景,帮助读者理解程序链接的细节。
#include<stdio.h>

extern FILE* stdin  //标准输入,对应设备 键盘
extern FILE* stdout //标准输出,对应设备 显示器
extern FILE* stderr //标准错误,对应设备 显示器
 

一,系统文件IO

注释:ctrl+v /按下(想要注释掉行数)/大写的 I /然后按Esc——就完成了

在这里插入图片描述
我们可以看到,无论怎么运行都是由三开始,向上递增,打印出来一个整型,那么这里有一个问题,0,1,2去哪里了?

答:就向我们上面所写的,一个C程序默认打开三个数据流,标准输入,标准输出,标准错误。

向我门上面所回答一样,在我们现在的进程里面,系统默认打开三个数据文件符,分别是0,1,2,它与上面相互对应

而现在知道,文件描述符就是从0开始的小整数。当我们打开文件时,操作系统在内存中要创建相应的数据结构来描述目标文件。于是就有了file结构体。表示一个已经打开的文件对象。而进程执行open系统调用,所以必须让进程和文件关联起来。每个进程都有一个指针*files, 指向一张表files_struct,该表最重要的部分就是包涵一个指针数组,每个元素都是一个指向打开文件的指针!所以,本质上,文件描述符就是该数组的下标。所以,只要拿着文件描述符,就可以找到对应的文件

文件描述符

在这里插入图片描述
无缓冲:指的是直接向缓冲区里面写数据,直接就刷新
行缓冲:当遇到换行符的时候,刷新缓冲区
全缓冲:当将缓冲区写满的时候,刷新缓冲区

一般而言,我们向显示器里面打印的缓冲为——行缓冲
向文件里面打印数据为——全缓冲

在这里插入图片描述
二,文件系统

文件的属性:Inode
文件内容

查看Inode信息命令:ls -i
查文件属性的更多信息:stat file
在这里插入图片描述

在Linux中,描述一个文件的属性,使用Inode表示,标识一个inode是用inode号表示的

创建一个新文件主要有一下4个操作:
1. 存储属性
内核先找到一个空闲的i节点(这里是263466)。内核把文件信息记录到其中。
2. 存储数据
该文件需要存储在三个磁盘块,内核找到了三个空闲块:300,500,800。将内核缓冲区的第一块数据复制到300,下一块复制到500,以此类推。
3. 记录分配情况
文件内容按顺序300,500,800存放。内核在inode上的磁盘分布区记录了上述块列表。
4. 添加文件名到目录
新的文件名abc。linux如何在当前的目录中记录这个文件?内核将入口(263466,abc)添加到目录文件。文件名和inode之间的对应关系将文件名和文件的内容及属性连接起来。

5.删除一个文件
根据他的目录,找到他的inode,把两个inode清理完,在这给目录里,把他的映射关系去掉

6.acm
下面解释一下文件的三个时间:

Access 最后访问时间
Modify 文件内容最后修改时间
Change 属性最后修改时间

我们可以查看时间:stat + 文件名
	修改文件权限:chomd + u+x +文件名
	再查看时间:只有Change改变了

在这里插入图片描述
三。动态库和静态库

静态库与动态库

静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库
动态库(.so):程序在运行的时候才去链接动态库的代码,多个程序共享使用库的代码。
一个与动态库链接的可执行文件仅仅包含它用到的函数入口地址的一个表,而不是外部函数所在目标文件的整个机器码
在可执行文件开始运行以前,外部函数的机器码由操作系统从磁盘上的该动态库中复制到内存中,这个过程称为动态链接(dynamic linking)
动态库可以在多个程序间共享,所以动态链接使得可执行文件更小,节省了磁盘空间。操作系统采用虚拟内存机制允许物理内存中的一份动态库被要用到该库的所有进程共用,节省了内存和磁盘的空间

静态链接的优点:独立性强,运行的快
动态链接的优点:消耗的内存小

要使用的库,那么一点要使用: .h .a/.so

 在编写的时候:变成替换模式《Shift + r》
 				 结束的时候《Esc》

查看动静态库:ldd + 运行程序
在这里插入图片描述
2。生成静态库
在这里插入图片描述

生成静态文件:首先我们先想到一个程序的运行,需要四的大步骤。
生成 .o 文件使用命令: gcc -c -test -o test.o
打包静态库:ar -rc +自己库的名字 + test.o
在这里插入图片描述
生成自己的静态库之后,想要使用它:
在这里插入图片描述
首先我们使用正常的命令,执行,发现并不能直接,报错为编译链接, 所以我们首先要添加链接属性: -l+cal(这里为自己生成库的名字去掉前缀和后缀)
然后编译:我们有可能发现还是云翔不了,报错不能找到这个库,那么下面我们就要是要另外的一个命令了: -L(表示查找的路径) . (表示在当前的路径下面)
运行程序:我们的程序就会跑过了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值