一、标准IO
1.概念:
标准IO实际上是调用C库中的函数,遵循ANSIC标准
2.文件类型分类
普通文件 '-'
目录文件 'd'
管道文件 'p' 进程间通信之一
链接文件 'l'
字符设备文件 'c' 单字符进行操作
块设备文件 'b' 一堆字符进行操作
套接字文件 's'
3.特点
标准IO利用缓冲机制,减少系统调用的次数,从而提高程序运行效率
名词解释:
系统调用:本质上是函数(操作系统提供的函数),调用函数会消耗资源;
裸机编程:没有操作系统 例如:单片机;
缓冲机制:调用函数会消耗资源缓冲区:连续的空间(只调用一次),减少系统调用。
标准IO--高级IO
文件IO--低级IO
标准IO:是在文件IO的基础上做的一次再封装,一般用于操作普通文件。
二、流
1.概念
数据仅是简单的从文件进行流入、流出,我们把这种现象称为流,本质上的读和写都是以字节流的方式输入输出。
2.1 流的类型
流的类型有两种:文本流、二进制流
区别:
(1)处理数据的方式不一样(最根本的区别)
(2)文本流和二进制流处理换行符的方式不同:
文本流:将换行符转换为'\r'\n';
二进制流:换行符不做处理--'\n'
(1)文本流:将数据转换为对应的ASCII码再进行二进制存取。
eg:"1 2 3 4" 对应ASCII码值为:
49 50 51 52(2)二进制流:将数据转换为二进制再进行存取。
eg:"1234"
1234--整数
10011010010--二进制
在linux中没有对文本流和二进制流作区分,换行符不做任何处理,Windows中需要区分。
2.2 三个特殊流
标准输入流------stdin------对应的设备:键盘
标准输出流-----stdout-----终端
标准错误流-----stderr
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <strings.h>
int main()
{
printf("stdin_num = %d\n", stdin->_fileno);
printf("stdout_num = %d\n", stdout->_fileno);
printf("stderr_num = %d\n", stderr->_fileno);
}
3.缓冲区类型
(1)全缓冲:打开一个文件默认使用全缓冲,当缓冲区满或者空时,才进行实际的IO操作;
(2)行缓冲:当输入输出跟终端相关时使用行缓冲,当缓冲区满或者遇到换行符时才进行实际的IO操作;程序结束之后所有缓冲区会强制刷新;
(3)无缓冲:错误输出相关时使用无缓冲,即不使用缓冲区。
测量行缓冲的大小 :
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <strings.h>
int main()
{
/*printf("stdin_num = %d\n", stdin->_fileno);
printf("stdout_num = %d\n", stdout->_fileno);
printf("stderr_num = %d\n", stderr->_fileno);
*/
printf("hello");
printf("size = %ld\n", stdout->IO_buf_end - stdout->IO_buf_base);//printf是标准输出流
while(1);//直到填满1024个字节,才会输出
}
结果 :
hellosize = 1024
总结
以上就是标准IO相关的部分概念内容,学习IO进线程的第一天,一起进步呀!