目录
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