0
点赞
收藏
分享

微信扫一扫

lv4 嵌入式开发-1 Linux文件IO

进击的包籽 2023-09-13 阅读 38
linux

目录

1 文件的概念和类型

2 如何理解标准IO

3 流(FILE)的含义

3.1 流

3.2 文本流和二进制流

3.3 流的缓冲类型

4 小结

5 缓存区实验


1 文件的概念和类型

概念:一组相关数据的有序集合

文件类型:
常规文件 r
目录文件 d
字符设备文件 c U盘(不含里面文件)
块设备文件 b
管道文件 p
套接字文件 s
符号链接文件 l

UNIX基础知识-系统调用和库函数 

应用层调用printf,C库函数调用内核系统调用

也可以直接应用代码系统调用

2 如何理解标准IO

标准I/O由ANSI C标准定义  

主流操作系统上都实现了C库  

标准I/O通过缓冲机制减少系统调用,实现更高的效率

3 流(FILE)的含义

3.1 流

FILE

标准IO用一个结构体类型来存放打开的文件的相关信息

标准I/O的所有操作都是围绕FILE来进行

流(stream)

FILE又被称为流(stream)

文本流/二进制流

3.2 文本流和二进制流

Windows

二进制流:换行符     ‘\n’      

文本流:    换行符     ‘\r’ ‘\n’

Linux             

                   换行符     ‘\n’

3.3 流的缓冲类型

全缓冲 当流的缓冲区无数据或无空间时才执行实际I/O操作

行缓冲 当在输入和输出中遇到换行符(‘\n’)时,进行I/O操作  当流和一个终端关联时,典型的行缓冲

无缓冲 数据直接写入文件,流不进行缓冲

标准I/O –stdin,stdout,stderr

标准I/O预定义3个流,程序运行时自动打开

标准输入流

0

STDIN_FILENO

stdin

标准输出流

1

STDOUT_FILENO

stdout

标准错误流

2

STDERR_FILENO

stderr

4 小结

标准IO

流的缓冲类型

stdin / stdout / stderr

stdin/stdout 默认是行缓冲

stderr没有缓冲

写代码显示缓冲区大小

5 缓存区实验

#include <stdio.h>
#include <unistd.h>

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

printf("hello world");

while(1){
sleep(1);
}

}

 如果程序没结束,printf不会输出

如果此时加入了换行符 

#include <stdio.h>
#include <unistd.h>

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

printf("hello world\n");

while(1){
sleep(1);
}

}

立刻进行了输出, 说明行缓冲

#include <stdio.h>
#include <unistd.h>
int main(int argc,char*argv[]){

int i=0;
//for(i=0;i<100;i++){
for(i=0;i<1025;i++){
printf("a");

}

while(1){
sleep(1);
}

}

100没能让缓存区写满,1025次写入让缓存写满了,进行了输出

练习:

1. 标准输入使用的是_______
A. 行缓冲 B. 全缓冲 C. 无缓冲 D. 自定义缓冲

A
2. 根据实验结果,标准输入的最大容量是____个字节 

1024

举报

相关推荐

0 条评论