linux c 缓存技术,嵌入式Linux C编程学习之路(九)——标准IO的缓存

1. 文件IO与标准IO的关系

文件IO:是直接调用内核提供的系统调用函数, 头文件是unistd.h

标准IO:是间接调用系统调用函数,头文件是: stdio.h

之前学过:输入输出相关的函数,都是和标准的输入(键盘),标准的输出(显示器)

getchar(),putchar() ----一个字符

gets(buf),puts(buf) ----一串字符

scanf(),printf()    ---- 一个字符,一串字符都可以

与一些普通文件的读写没有关系,也即这些函数不能读写普通文件。

而标准IO中的相关函数,不仅可以读写普通文件,也可以向标准的输入或标准的输出中读或写。

2. 示例,标准输出

可以通过write直接输出到标准输出;

也可以通过C库的printf函数输出;

但是如果在标准输出后加个while(1),程序会卡死,看不到输出。

#include "stdio.h"

#include "unistd.h"

int main(int argc, char *argv[]){

char buf[] = "hello linux.";

write(1,buf,sizeof(buf));

//printf("%s",buf);

while(1);

return 0;

}

3. 缓存的概念

三个缓存的概念(数组):

a.我们的程序中的缓存,就是你想从内核读写的缓存(数组)----用户空间的缓存 //user buffer

b.每打开一个文件,内核在内核空间中也会开辟一块缓存,这个叫内核空间的缓存 //kernel buffer

文件IO中的写即是将用户空间中的缓存写到内核空间的缓存中。

文件IO中的读即是将内核空间的缓存写到用户空间中的缓存中。

c.标准IO的库函数中也有一个缓存,这个缓存称为----库缓存 //lib buffer

4. 标准IO库缓存写满或满足一定条件时,会调用系统调用函数。

a. printf满足一定条件 : 遇到

时,即会将库缓存的内容写到内核中,即调用了系统调用函数。

#include "stdio.h"

int main()

{

char buf[]="hello linux

";

printf("%s",buf);

while(1);

return 0;

}

b. 库缓存写满时,会调用系统调用函数,将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;

}

通过如上函数可以测试出printf的库缓存大小为1024

5. 库函数的缓存分成:全缓存、行缓存、无缓存

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值