当前位置:网站首页>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-------读写函数有三类,全缓存,行缓存,无缓存
边栏推荐
- 新建STM32F407ZG Keil5项目
- 常用模块封装-pymysql、pymongo(可优化)
- 【从零设计 LaTex 模板】1. 一些基础知识
- 【fiddler4】使用fiddler设置简单并发
- LeetCode 1720. Decoding XORed Arrays (Simple)
- Deep learning TensorFlow entry environment configuration
- 在Unity中判断游戏物体是否在游戏屏幕范围之内
- 【简易笔记】PyTorch官方教程简易笔记 EP2
- pytorch-11. Convolutional Neural Network (Advanced)
- I don't like my code
猜你喜欢
随机推荐
二维卷积定理的验证(上)
菜谱小程序源码免费分享【推荐】
STM32F407ZG TIM通用定时器
ASP.Net利用代码点击相应按钮来关闭当前的页面(亲测有效)
详解 Hough 变换(下)圆形检测
通过adb devices命令在控制台显示企业级PicoNeo3设备号
51单片机BH1750智能补光灯台灯光强光照恒流源LED控制系统
AR Foundation Editor Remote插件使用方法
C陷阱与缺陷 个人阅读笔记
I don't like my code
自定义View的流程总结学习
STM32F407ZG PWM
Gradle学习(二)Groovy
Pico设备中的截图以及视频文件通过adb命令保存到电脑中
手机端应用类型
Convolutional Neural Network (CNN) for mnist handwritten digit recognition
通过配置CubeMX的TIMER的PWM初始化实现硬件PWM呼吸灯闪烁
【fiddler2】使用fiddler mock response 数据
深度学习TensorFlow入门环境配置
Radon 变换原理和应用









