进一步了解系统I/O
文章目录
- 1.再次理解open接口
- 1.1opne的第三个参数
- 1.2第二个参数为什么为整形
- 2.write系统调用接口
- 2.1write接口
- 2.2系统调用接口和库函数接口区别
- 3.缓冲区
- 3.1缓冲区是由语言提供的
- 3.2为什么需要缓冲机制
- 4.dup2、文件重定向
- 4.1dup2
- 4.2文件重定向
- 5.理解文件系统
- 5.1文件系统是什么
- 5.2为什么需要文件系统
- 5.3文件系统如何对磁盘进行管理
- 5.3.1磁盘数据抽象化
- 5.3.1磁盘的分区管理
- 5.4我们的目录之中保存的是什么
- 5.5对文件操作的流程
- 5.6文件软硬链接
- 6.动静态库的打包方法
- 6.1什么是函数库
- 6.2动静态库的差别
- 6.3函数库生成
- 6.3.1常用命令
- 6.3.2函数库需具备条件
- 6.3.3静态库生成
- 6.3.4动态库生成
1.再次理解open接口
1.1opne的第三个参数
1.2第二个参数为什么为整形
2.write系统调用接口
2.1write接口
wtite的第一个参数是fp。我们的进程调用write接口,通过PCB之中保存的信息,,找到对应的结构体struct file_struct。再找到结构体之中的结构体指针数组 struct file*fd_array[],然后通过给定的参数fp即我们的数组的下标,取出保存的描述文件的结构体 struct file的指针,找到对应的文件结构体,得到文件的信息,与存储位置,即找到了我们的文件
2.2系统调用接口和库函数接口区别
系统调用接口是系统直接提供给外部使用的,库函数则是在此之上的进一步封装
3.缓冲区
3.1缓冲区是由语言提供的
我们的缓冲区是由语言提供的,由FILE 结构体进行维护
3.2为什么需要缓冲机制
提高计算器处理的效率,比如我们的程序会将数据全部存储在缓存区之中,在合适的时候再调用write刷新至系统之中
如果每产生一次数据就往系统刷新一次,这样会导致交互数据的次数大幅度的增长,效率也会急剧的下降
4.dup2、文件重定向
4.1dup2
int dup2(int oldfd, int newfd);
newfid是oldfd的一份拷贝
4.2文件重定向
结合上面描述可知,我们的输出函数之中,stdout的描述结构体之内,必然包含1号文件描述符;
而我们的dup2可以将文件描述符对应的内容进行赋值拷贝,因此文件重定向的实现原理就是,利用dup2狸猫换太子。
将1号文件描述符之中的内容替换成新的指向文件结构体的指针,但是我们的输出函数之中,保存的信息永远是1号文件描述符
调用输出函数还是会向1号文件描述符指向的文件之中输出信息,这样就完成了重定向。
追加重定向则是在打开文件的时候添加O_APPEND参数
打开的文件要进行关闭,实际我们的文件描述符是有限的(初始默认32个),无限制的打开而不关闭会造成文件描述符资源泄漏
5.理解文件系统
5.1文件系统是什么
文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构
我们的硬盘上面存储着许多文件,同样需要将其管理起来,对应的就需要有管理者进行管理,这个管理者就是文件系统,文件系统对磁盘进行分区统筹,管理。
再形象一点,文件系统管理着很多文件,这些文件就是数据,而这些数据存储在硬盘上。
所以文件系统就是管理磁盘的软件系统,它降低了磁盘空间的使用难度,将磁盘数据更加形象化的展示给用户
5.2为什么需要文件系统
5.3文件系统如何对磁盘进行管理
5.3.1磁盘数据抽象化
5.3.1磁盘的分区管理
5.4我们的目录之中保存的是什么
文件都是都在目录之下,目录(directory)中保存着文件名和inode编号的映射关系,对文件的管理最后转移到了对目录进行管理,对文件的描述组织实际上就是对目录的描述和组织,对目录的描述方法是用struct file, struct file的f_path之中保存着文件和目录之间的关系,
即只需要管理好目录,通过目录之中的文件名和inode编号之间的关系,就可以快捷的找到我们所需要的文件,即对文件进行管理本质是对目录进行管理,通过目录和文件之间的映射关系,间接的管理我们的文件
1、根据文件名,通过Directory里的对应关系,找到文件对应的Inode number
2、再根据Inode number读取到文件的Inode table
3、再根据Inode table中的Pointer读取到相应的Blocks
5.5对文件操作的流程
5.6文件软硬链接
文件链接分为硬链接和软链接两种。
硬链接没有独立的inode,只是增加了一个和inode具有映射关系的文件名,并没有创建新的文件
软链接则创建了新的文件,具有独立的inode,这个文件保存着链接文件的路径
6.动静态库的打包方法
6.1什么是函数库
由上述可知,我们在预处理阶段只是将头文件“stdio.h”进行了包含,并且头文件中只有printf函数的声明,并没有实现,那么是在哪里实现函数的呢?
系统将这些函数的实现都放到了名为libc.so.6的库文件中去了,在没有特别指定的时候,gcc会到系统默认的搜索路径/usr/lib下进行查找,也就是链接到libc.so.6库函数中去,这样就实现了函数,这也是链接的作用;
6.2动静态库的差别
静态链接:在编译链接的时候,将对应的代码拷贝至源文件
假如有n个程序都调用了库的同一个接口,则都需要拷贝一份,在一定程度上占用资源(硬盘资源和内存资源)
动态库:在运行的时候才去链接动态库的代码,整个系统里面可以只有一份,多个程序共享使用库的代码
6.3函数库生成
6.3.1常用命令
ldd:查看一个可执行文件依赖的库
ar -rc:静态库打包
ar -tv:查看库依赖的文件
6.3.2函数库需具备条件
6.3.3静态库生成
6.3.4动态库生成
进一步了解系统I/O相关推荐
- 医疗制药企业要怎么进一步进行系统的管理
医疗制药企业也是体现一个国家综合实力的表现,像这次疫情席卷全球影响了千千万万的人,还有一些国家因为政策的问题导致治理不利,进而影响到国家影响到人民,医疗制药行业也是必须要进行全面发展提升的行业,不断的 ...
- 主机入侵防御系统(HIPS)分析
主机入侵防御系统(Host Intrusion Prevent System,HIPS)是近几年出现并迅速发展的新兴产物,与传统意义的防火墙和杀毒软件不同,它并不具备特征码扫描和主动杀毒等功能,所以想 ...
- 分布式、服务化的ERP系统架构设计
http://www.cnblogs.com/liuche/p/7955462.html ERP之痛 曾几何时,我混迹于电商.珠宝行业4年多,为这两个行业开发过两套大型业务系统(ERP).作为一个ER ...
- 一种用户-系统协同的概念模型
来源:人机与认知实验室 翻译:何瑞麟,胡少波,关天海 一种用户-系统协同[的概念模型:增强复合型信息系统的易用性 摘要 世界各地的许多组织都使用复杂的信息系统(例如,企业资源计划和供应链管理系统) ...
- 使用LCC网络补偿设计无线功率系统
本文只是为了形成公众号推文,对博文 无线传输系统功率LCC功率补偿系统设计 进行简写.详细的内容可以参见原文的内容. ▌01 线圈补偿电路 1.设计背景 在无线磁共振电能传输系统中,由于发送线圈与接收 ...
- linux 使cpu使用率升高_Linux系统中CPU占用率较高问题排查思路与解决方法
Linux服务器上出现CPU负载达到100%居高不下的情况,如果CPU 持续跑高,则会影响业务系统的正常运行: CPU利用率.根据经验来看,用户空间进程占用CPU比例在 65-70%之间,内核(系统) ...
- compattelrunner.exe占用磁盘过高_Linux 系统 CPU 占用率太高?
在使用Linux 系统时,经常会遇到 CPU 占用率太高的问题.此篇文章教你如何解决,排查解决的思路是什么 CPU负载查看方法: 使用vmstat查看系统维度的CPU负载 使用top查看进程维度的CP ...
- AIX 系统的启动和关机
AIX 系统的启动和关机 系统启动模式 缺省的情况下,系统将用正常模式下的引导设备列表来引导.当机器正常启动时,系统将完成AIX启动的全过程,包括激活终端,并在各个终端上显示登录提示符,用于多用户访问 ...
- SAP系统与MES系统的数据协同技术方案
1.MES介绍 本文中提到的MES系统是在西门子公司的SIMATIC IT平台上开发完成.所有的应用子系统进行统一分析.统一设计.统一开发,利用统一的开发平台和数据库系统,保证了管理系统的集成性.高效 ...
最新文章
- 最好用的markdown编辑器推荐typora
- 447. 回旋镖的数量
- php 当前linux用户权限,Linux 下用户组别权限的理解
- 【Kafka】kafka Failed to acquire lock on file .lock in /data/kafak-logs a kafka instance
- 数据结构—栈的应用(括号匹配、表达式求值、递归)
- Python 模块,包与分发
- 【ORACLE】ORA-12547: TNS:lost contact
- 模拟退火算法(Python)
- PPAPI+VS2013开发(1):环境配置
- 计算机屏幕蓝光,电脑如何设置防蓝光?降低电脑屏幕蓝光危害的方法
- Android 车载应用开发与分析(12) - SystemUI (一)
- 日更100天(53)每天进步一点点
- html中自定义快捷键,电脑怎样自定义快捷键简单实现
- 八字起大运php代码,八字起大运方法有几种
- SQL Server连接本地数据库时系统找不到指定文件
- JavaScript判断系统语言
- 啊哈算法-DFS解救小哈python版
- 网络编程(python语言)
- C++ QT Bejeweled宝石迷阵 期末项目
- Java——编辑、编译和运行