当前位置: 首页 > news >正文

9.1 Linux_I/O_基本知识

文件类型

一切I/O皆文件,文件就是存放在磁盘上面的有序数据的集合。

文件类型:

  • 常规文件 r  :就是普通文件
  • 目录文件 d :就是目录,是一个索引
  • 字符设备文件 c :键盘、鼠标
  • 块设备文件 b :U盘、磁盘,以块的方式进行存储的设备
  • 管道文件 p :
  • 套接字文件 s :
  • 符号链接文件 l :就是快捷方式

系统调用与库函数

系统调用就是操作系统给我们提供的接口,库函数是在系统调用之上封装的函数。

系统调用与库函数的层次关系如下:

库函数存在的意义:

库函数可以让代码更兼容,方便代码的移植。库函数就相当于一个翻译可以将同一句话翻译为不同操作系统下对应的系统调用。 

尽管我们可以直接通过系统调用来实现功能,但每个操作系统提供的接口不一样,所以在移植到其他操作系统时,每次都需要重新编写代码实现同样的功能;而使用库函数后,因为库函数的接口是一样的,因此移植之后就不需要对代码进行修改(库函数是已经写好的代码)。

标准I/O

标准I/O由ANSI C标准定义,主流操作系统上都实现了C库(这就是库函数)

标准I/O通过缓冲机制减少系统调用,实现更高的效率。

流的概念:

在C语言中定义了一个结构体FILE,这个结构体用于存放标准I/O打开的文件相关信息。FILE就是流(stream),就是把数据当成水流一样从一个地方传到另一个地方。

流分为文本流和二进制流。

流的缓冲类型:

无缓冲:直接与磁盘进行数据交互,直接写磁盘,直接读磁盘。流不进行缓冲。

全缓冲:内存中有一个空间叫做缓冲区,用于与数据进行交互。缓冲区满之后,一次性发给磁盘。

行缓冲:当输入/输出中出现了换行符时,就把缓冲区中的数据发给磁盘,这时缓冲区不一定写满

三个标准I/O:

名称文件描述符结构体(流)
标准输入流0STDIN_FILENOstdin
标准输出流1STDOUT_FILENOstdout
标准错误流2STDERR_FILENOstderr

全缓冲与行缓冲实验:

数据输出的情况有:

  • 程序结束将缓冲区全部数据输出
  • 全缓冲时,缓冲区满,将全部数据输出。缓冲区的大小为1KB=1024Byte
  • 行缓冲时,输入有换行'\n',将全部数据输出
  • 手动刷新缓冲区时,将全部数据输出

程序结束输出实验如下:

全缓冲区实验如下: 

行缓冲实验如下:

文件I/O

文件I/O又叫系统I/O、系统调用,是系统提供的一个接口,对于不同的系统,提供的接口是不一样的。文件I/O不提供缓冲机制,每次读写都是直接操作磁盘空间。

什么是POSIX:

POSIX是一个可移植操作系统接口的标准,它定义了一组函数。它也是一种文件I/O

什么是文件描述符:

每个打开的文件都会有一个对应的文件描述符(fd),它是一个非负整数。一个程序最多可以打开1024个文件,文件描述符从0开始分配,其中0,1,2分别代表标准输入、标准输出、标准错误。

http://www.lryc.cn/news/446121.html

相关文章:

  • [Java]一、面向对象核心编程思想
  • 科研绘图系列:R语言多个AUC曲线图(multiple AUC curves)
  • JavaWeb--纯小白笔记06:使用Idea创建Web项目,Servlet生命周期,注解,中文乱码解决
  • jQuery——jQuery的2把利器
  • Day29笔记-Python操作pdfPython发送邮件
  • Seata分布式事务实践
  • 数字IC设计\FPGA 职位经典笔试面试整理--基础篇2
  • (务必收藏)推荐市面上8款AI自动写文献综述的网站
  • 【python】运算符
  • C++深入学习string类成员函数(1):默认与迭代
  • DataGrip远程连接Hive
  • go 读取excel
  • Linux进阶系列(四)——awk、sed、端口管理、crontab
  • 利用Metasploit进行信息收集与扫描
  • 基于Pytorch框架的深度学习MODNet网络精细人像分割系统源码
  • Go语言中的并发编程
  • python学习笔记(3)——控制语句
  • 关系数据库设计之Armstrong公理详解
  • 【Geoserver使用】SRS处理选项
  • python里面的单引号和双引号的区别
  • 为什么不要在循环,条件或嵌套函数中调用hooks
  • 将成功请求的数据 放入apipost接口测试工具,发送给后端后,部分符号丢失
  • N诺计算机考研-错题
  • vue3 数字滚动组件封装
  • 如何确保消息只被消费一次:Java实现详解
  • Web3技术在元宇宙中的应用:从区块链到智能合约
  • 关于QSizeGrip在ui界面存在布局的情况下的不显示问题
  • 开始场景的制作+气泡特效的添加
  • 位运算--(二进制中1的个数)
  • 使用Docker和Macvlan驱动程序模拟跨主机跨网段通信