文章目录

  • 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相关推荐

  1. 医疗制药企业要怎么进一步进行系统的管理

    医疗制药企业也是体现一个国家综合实力的表现,像这次疫情席卷全球影响了千千万万的人,还有一些国家因为政策的问题导致治理不利,进而影响到国家影响到人民,医疗制药行业也是必须要进行全面发展提升的行业,不断的 ...

  2. 主机入侵防御系统(HIPS)分析

    主机入侵防御系统(Host Intrusion Prevent System,HIPS)是近几年出现并迅速发展的新兴产物,与传统意义的防火墙和杀毒软件不同,它并不具备特征码扫描和主动杀毒等功能,所以想 ...

  3. 分布式、服务化的ERP系统架构设计

    http://www.cnblogs.com/liuche/p/7955462.html ERP之痛 曾几何时,我混迹于电商.珠宝行业4年多,为这两个行业开发过两套大型业务系统(ERP).作为一个ER ...

  4. 一种用户-系统协同的概念模型

    来源:人机与认知实验室 翻译:何瑞麟,胡少波,关天海   一种用户-系统协同[的概念模型:增强复合型信息系统的易用性 摘要 世界各地的许多组织都使用复杂的信息系统(例如,企业资源计划和供应链管理系统) ...

  5. 使用LCC网络补偿设计无线功率系统

    本文只是为了形成公众号推文,对博文 无线传输系统功率LCC功率补偿系统设计 进行简写.详细的内容可以参见原文的内容. ▌01 线圈补偿电路 1.设计背景 在无线磁共振电能传输系统中,由于发送线圈与接收 ...

  6. linux 使cpu使用率升高_Linux系统中CPU占用率较高问题排查思路与解决方法

    Linux服务器上出现CPU负载达到100%居高不下的情况,如果CPU 持续跑高,则会影响业务系统的正常运行: CPU利用率.根据经验来看,用户空间进程占用CPU比例在 65-70%之间,内核(系统) ...

  7. compattelrunner.exe占用磁盘过高_Linux 系统 CPU 占用率太高?

    在使用Linux 系统时,经常会遇到 CPU 占用率太高的问题.此篇文章教你如何解决,排查解决的思路是什么 CPU负载查看方法: 使用vmstat查看系统维度的CPU负载 使用top查看进程维度的CP ...

  8. AIX 系统的启动和关机

    AIX 系统的启动和关机 系统启动模式 缺省的情况下,系统将用正常模式下的引导设备列表来引导.当机器正常启动时,系统将完成AIX启动的全过程,包括激活终端,并在各个终端上显示登录提示符,用于多用户访问 ...

  9. SAP系统与MES系统的数据协同技术方案

    1.MES介绍 本文中提到的MES系统是在西门子公司的SIMATIC IT平台上开发完成.所有的应用子系统进行统一分析.统一设计.统一开发,利用统一的开发平台和数据库系统,保证了管理系统的集成性.高效 ...

最新文章

  1. 最好用的markdown编辑器推荐typora
  2. 447. 回旋镖的数量
  3. php 当前linux用户权限,Linux 下用户组别权限的理解
  4. 【Kafka】kafka Failed to acquire lock on file .lock in /data/kafak-logs a kafka instance
  5. 数据结构—栈的应用(括号匹配、表达式求值、递归)
  6. Python 模块,包与分发
  7. 【ORACLE】ORA-12547: TNS:lost contact
  8. 模拟退火算法(Python)
  9. PPAPI+VS2013开发(1):环境配置
  10. 计算机屏幕蓝光,电脑如何设置防蓝光?降低电脑屏幕蓝光危害的方法
  11. Android 车载应用开发与分析(12) - SystemUI (一)
  12. 日更100天(53)每天进步一点点
  13. html中自定义快捷键,电脑怎样自定义快捷键简单实现
  14. 八字起大运php代码,八字起大运方法有几种
  15. SQL Server连接本地数据库时系统找不到指定文件
  16. JavaScript判断系统语言
  17. 啊哈算法-DFS解救小哈python版
  18. 网络编程(python语言)
  19. C++ QT Bejeweled宝石迷阵 期末项目
  20. Java——编辑、编译和运行

热门文章

  1. nanomsg----pair1 的介绍
  2. 风控催收的几个概念 ,入催率、出催率
  3. 剪辑师的基本素养--好剪辑六要素
  4. 计算机组成原理机器码怎么求,计算机组成原理--数据格式与机器码
  5. 基础排序算法----归并排序
  6. linux 5353端口禁止,系统运维|解决DNS污染与劫持之使用特殊DNS端口
  7. java 进制转换,二进制 十进制 十六进制 正数 负数的进制等等!
  8. win7查看端口占用的进程
  9. 持续集成实战 —— Jenkins自动化测试环境搭建
  10. OpenCV图像特征提取学习四,SIFT特征检测算法