当前位置:网站首页>Linux的文件IO与标准IO,以及IO缓存
Linux的文件IO与标准IO,以及IO缓存
2022-08-10 05:35:00 【牛同志】
前言
本文主要讲解了Linux系统中的标准IO和文件IO,重点讲解了它们的一同和关系。
并且集中阐释了IO缓存,并且有代码示例
`
一、标准IO与文件IO的区别
文件IO:是直接调用内核提供的系统调用函数,头文件是unistd.h
标准IO:是间接调用系统调用函数,头文件是:stdio.h。
标准IO中的相关函数,不仅可以读写普通文件,也可以向标准输入或者标准的输出中读或者写。
二、IO缓存
1.三个缓存空间
代码如下(示例):
(1)我们程序中的缓存,就是想从内核空间读取的缓存,叫用户空间缓存。
(2)每打开一个文件,内核在内核空间也会开辟一块缓存,叫做内核空间缓存。
文件IO写就是将用户空间的缓存写到内核空间的缓存中
文件IO读就是将内核空间的缓存写到用户空间的缓存中
(3)标准IO库函数也有一个缓存,这个缓存称为库缓存。
当标准IO库缓存被写时满足一定的条件,就会调用系统调用函数,即将库缓存写到内核空间的缓存中
2.代码实例
对于printf函数:
条件一:遇到\n时,会将库缓存的内容写到内核缓存中
条件二:库缓存写满时也会将内容写到内核缓存中,其中库缓存的大小为1024字节
相关代码:
(一)
#include<stdio.h>
#include<unistd.h>
Int main()
{
char buf[]=”hello world!”;
printf(“%s”,buf);
while(1);
return 0;
}
(二)
#include<stdio.h>
#include<unistd.h>
Int main()
{
char buf[]=”hello world!\n”;
printf(“%s”,buf);
while(1);
return 0;
}
(三)
#include<stdio.h>
#include<unistd.h>
Int main()
{
char buf[]=”hello world!”;
write(1,buf,sizeof(buf));
while(1);
return 0;
}
(四)
#include<stdio.h>
#include<unistd.h>
Int main()
{
int i=0;
char buf[]=”hello world!”;
while(i<100)
{
printf(“%s”,buf);
i++;
}
while(1);
return 0;
}
上述代码运行后,代码二和代码三会打印出信息,并且卡在循环处,而代码一会不显示任何内容卡在循环处。代码四会打印出几十个重复的打印信息,并且卡在循环处。
说明:
(1)write作为文件IO,直接进行用户缓存到内核缓存的写入
(2)出现上述两个情况后,库缓存就会写入内核缓存了
三、文件IO与标准IO的函数对应关系
open-----fopen
close-----fclose
lseek-----fseek或者rewind
read,write-------读写函数有三类,全缓存,行缓存,无缓存
边栏推荐
- 中间件-Rocktmq
- LeetCode 1351. Counting Negative Numbers in Ordered Matrices (Simple)
- 每日刷题(day03)——leetcode 899. 有序队列
- 51单片机智能蓝牙APP加油站火灾预警安防防控报警监控系统MQ2DHT11
- 2022李宏毅机器学习hw1--COVID-19 Cases Prediction
- pytorch-05.用pytorch实现线性回归
- 51单片机RS485远程双机多机温度采集主从机多节点蜂鸣器报警
- pytorch-07.处理多维特征的输入
- pytorch-10.卷积神经网络(作业)
- 微信小程序--模板与设置WXML
猜你喜欢
LeetCode 1351. Counting Negative Numbers in Ordered Matrices (Simple)
新建STM32F407ZG Keil5项目
pytorch-10. Convolutional Neural Networks
ASP.NET连接SQL Server的步骤
C陷阱与缺陷 个人阅读笔记
The way for programmers to make money from a sideline business and increase their monthly income by 20K
GC0053-STM32单片机NTC热敏电阻温度采集及控制LCD1602
LeetCode 94.二叉树的中序遍历(简单)
.NET操作Excel高效低内存的开源框架 - MiniExcel
Tensorflow 2.0 使用流程详解
随机推荐
Common class String overview
51单片机智能蓝牙APP加油站火灾预警安防防控报警监控系统MQ2DHT11
LeetCode 1894.找到需要补充粉笔的学生编号
Radon 变换原理和应用
PyTorch之模型定义
深度学习TensorFlow入门环境配置
LeetCode 100.相同的树(简单)
LeetCode refers to the offer 21. Adjust the order of the array so that the odd numbers are in front of the even numbers (simple)
VTK 初步 (1) ----- 可视化管线
LeetCode 292.Nim 游戏(简单)
过大数组导致爆栈的解决方法记录(堆栈)
.NET操作Excel高效低内存的开源框架 - MiniExcel
树结构——2-3树图解
每日刷题(day02)——leetcode 622. 设计循环队列
在Unity中判断游戏物体是否在游戏屏幕范围之内
LeetCode 100. The same tree (simple)
【图像识别】训练一个最最简单的AI使其识别Vtuber
我不喜欢我的代码
pytorch-06. Logistic regression
Gradle学习(二)Groovy