linux 系统编程--标准IO-缓存
1、什么是标准IO?与文件IO的区别?
文件IO:是直接调用内核提供的系统调用函数, 头文件是unistd.h
标准IO:是通过C库函数间接调用系统调用函数,头文件是: stdio.h
之前学过:输入输入相关的函数,都是和标准的输入(键盘)、标注的输出(显示器)相关
【getchar():从键盘得到一个字符,putchar():向显示器输出一个字符】
getchar(),putchar() ----一个字符
gets(buf),puts(buf) ----一串字符
scanf(),printf() ---- 一个字符,一串字符都可以
上述这些函数与一些普通文件(a.c)的读写没有关系,也即这些函数不能读写普通文件。
但标准IO 不同,既能读写一些普通的文件,也能向标准的输入和输出进行读写
代码范例:通过文件IO直接输出到显示器:0:标准输入;1:标准输出
#include <stdio.h>
#include <unistd.h>
int main()
{char buf[]="hello zengzhi";write(1,buf,sizeof(buf));return 0;
}
运行结果:
通过标准IO:
#include <stdio.h>
#include <unistd.h>
int main()
{char buf[]="hello zengzhi";printf("%s",buf);
// write(1,buf,sizeof(buf));return 0;
}
三个缓存的概念(数组):
- 我们的程序中的缓存,就是你想从内核读写的缓存(数组)----用户空间的缓存
- 每打开一个文件,内核在内核空间中也会开辟一块缓存,这个叫内核空间的缓存
文件IO中的写即是将用户空间中的缓存写到内核空间的缓存中。
文件IO中的读即是将内核空间的缓存写到用户空间中的缓存中。
3. 标准IO的库函数中也有一个缓存,这个缓存称为----库缓存,这个缓存介于用户空间的缓存和内核空间的缓存之间,标准IO就是通过库缓存为中间介质来进行用户空间缓存和内核空间的缓存进行交互的。
例1:测试验证库缓存的存在
标准IO库函数在什么时候会调用系统调用函数?
标准IO库缓存写满或满足一定条件时,会调用系统调用函数。
#include “stdio.h”
int main()
{
char buf[]=“hello linux”;
printf("%s",buf);
while(1);
return 0;
}
printf满足一定条件 : 遇到\n 时,即会将库缓存的内容写到内核中,即调用了系统调用函数。
#include “stdio.h”
int main()
{
char buf[]=“hello linux\n”;
printf("%s",buf);
while(1);
return 0;
}
库缓存写满时,会调用系统调用函数,将lib_buffer 内容写到kernel_buffer中去
#include “stdio.h”
int main()
{
char buf[]=“hello linux”;
int i=0;
while(i< 93)
{
printf("%s",buf);
i++;
}
printf(“h”);
while(1);
return 0;
}
linux 系统编程--标准IO-缓存相关推荐
- linux原子过程,linux系统编程:IO读写过程的原子性操作实验
所谓原子性操作指的是:内核保证某系统调用中的所有步骤(操作)作为独立操作而一次性加以执行,其间不会被其他进程或线程所中断. 举个通俗点的例子:你和女朋友OOXX的时候,突然来了个电话,势必会打断你们高 ...
- 【Linux系统编程】IO标准缓冲区
00. 目录 文章目录 00. 目录 01. 缓冲区概述 02. 全缓冲 03. 行缓冲 04. 不带缓冲区 05. 附录 01. 缓冲区概述 标准I/O提供了三种类型的缓冲: 1.全缓冲: 在填满标 ...
- 【Linux系统编程】IO多路复用之epoll
00. 目录 文章目录 00. 目录 01. 概述 02. epoll函数 03. 程序示例 04. epoll优缺点 05. 附录 01. 概述 epoll是Linux下多路复用IO接口select ...
- 【Linux系统编程】IO多路复用之select
00. 目录 文章目录 00. 目录 01. 概述 02. select函数 03. select程序示例 04. select优缺点 05. 附录 01. 概述 I/O 多路复用技术是为了解决进程或 ...
- linux系统编程:IO读写过程的原子性操作实验
所谓原子性操作指的是:内核保证某系统调用中的所有步骤(操作)作为独立操作而一次性加以执行,其间不会被其他进程或线程所中断. 举个通俗点的例子:你和女朋友OOXX的时候,突然来了个电话,势必会打断你们高 ...
- 【Linux系统编程】IO多路复用之poll
00. 目录 文章目录 00. 目录 01. 概述 02. poll函数 03. 程序示例 04. poll优缺点 05. 附录 01. 概述 select() 和 poll() 系统调用的本质一样, ...
- 【Linux】一步一步学Linux系统编程教程汇总(暂时暂停更新......)
00. 目录 文章目录 00. 目录 01. 概述和标准 02. 文件操作 03. 进程概念 04. 进程间通信 05. 多线程 06. 信号 07. 同步与互斥 08. 高级IO 09. 其它 10 ...
- 【Linux | 系统编程】Linux系统编程(文件、进程线程、进程间通信)
文章目录 Linux系统编程 文件IO open/close函数 read/write函数 文件描述符 阻塞.非阻塞 fcntl函数 lseek函数 传入传出参数 文件系统 文件存储 文件操作 sta ...
- Linux系统编程之文件IO
Linux系统编程之文件IO 文件IO第一天 一.标准IO基本概念 1.1c语言函数 (c库函数) 调用实现某一个功能,(API) 1.2系统调用:内核中的程序接口,应用程序和硬件设备之间的中间层 1 ...
- Linux系统编程:验证kernel内核缓存区大小->4096字节
Linux系统编程:验证kernel内核缓存区大小->4096字节 李四老师 于 2018-04-04 00:40:04 发布 2778 收藏 2 分类专栏: [Linux编程] [C/C++编 ...
最新文章
- python自动翻译导学案_批量翻译踩过的坑--python
- 相关及其快速算法的C++实现
- 服务器账号密码更改,如何更改服务器用户名和密码
- 【学习笔记】Javascript函数调用
- 利用CNN和迁移学习方法识别植物叶片疾病
- yolo之---非极大值抑制
- 神器--通过Workspaces来编辑本地文件
- ECharts初体验(下载使用步骤、vscode取色器插件)
- Android入门项目(校园软件)
- matlab 数据字典,以编程方式将数据存储到字典中
- JSP——JSP介绍以及运行原理
- 努比亚手机浏览器 安全证书失效_今日热闻 | OnePlus 8海外版发布、Redmi科幻大片第一部公布、努比亚Play 5G宣布、快播正式破产拍卖...
- 数据库:order by排序语句的用法
- 洛谷P1757 通天之分组背包
- 飞行棋java 30kb,飞行棋棋盘
- 前端JS校验银行卡卡号和身份证号码(附ES6版方法)
- css border实现图形
- RISC-V为中国MCU企业打开一个新窗口!
- sco unix 管理员速成
- 箱线图怎么看_股票000882:怎么看月k线图「歙县股票网」
热门文章
- JS数据结构与算法学习笔记大全 (温故而知新,可以为师矣。)
- linux时间设置与同步--NTP
- F - Endless Walk
- Endless Dice 游戏解析
- LiveData更新数据报错java.lang.IllegalStateException: Cannot invoke setValue on a background thread
- 木马克星――Trojan Ender正式国际版 2.0.0
- 瑞芯微读取寄存器_RK3326 RK3399 GPIO寄存器操作指南
- 考研复试(控制工程专硕)及大学本科(物联网工程)知识点回顾(三)——模拟电子技术
- 恒玄BES调试笔记-BES2500啸叫howling
- java 微服务 dubbo_Dubbo Spring Cloud 重塑微服务治理