当前位置:网站首页>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-------读写函数有三类,全缓存,行缓存,无缓存
边栏推荐
猜你喜欢
随机推荐
详解 Hough 变换(下)圆形检测
离散数学的学习记录
【fiddler4】使用fiddler设置简单并发
Tensorflow 2.0 使用流程详解
接口自动化2.0
GC0053-STM32单片机NTC热敏电阻温度采集及控制LCD1602
pytorch-10.卷积神经网络
PyTorch的安装与基础知识
51单片机室内环境甲醛PM2.5光照温度湿度检测及窗帘加湿消毒控制系统
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)
基于 .NET Core MVC 的权限管理系统
我不喜欢我的代码
树结构——二叉查找树原理与实现
Unity中Xml简介以及通过脚本读取Xml文本中的内容
pytorch-10.卷积神经网络(作业)
Gradle学习(二)Groovy
常用模块封装-pymysql、pymongo(可优化)
Pytorch配置与实战--Tips
我不喜欢我的代码
Collection set interface









