目录
四、标准I/O –stdin,stdout,stderr(三个流)
一、标准I/O介绍(输入输出)
标准I/O由ANSI C标准定义
主流操作系统上都实现了C库
标准I/O通过缓冲机制减少系统调用,实现更高的效率
一、文件的概念和类型
概念:
一组相关数据的有序集合
文件类型:
常规文件 r (磁盘上的数据)
目录文件 d (文件夹)
字符设备文件 c (键盘、鼠标)
块设备文件 b (U盘、磁盘)
管道文件 p
套接字文件 s
符号链接文件 l (快捷方式、)
Unix基础知识-系统调用和库函数
不同操作系统的接口是不一样的,c库函数可以连接不同系统的接口
二、标准I/O-流
FILE
标准IO用一个结构体类型来存放打开的文件的相关信息
标准I/O的所有操作都是围绕FILE来进行
流(stream)
FILE又被称为流(stream)
文本流/二进制流
Windows:
二进制流: 换行符 ⬅➡ ‘\n’
文本流: 换行符 ⬅➡ ‘\r’ ‘\n’
Linux:
换行符 ⬅➡ ‘\n’ (换行是个符号)
三、标准I/O-流的缓冲类型
(100个文件,写一次交一次,和全部写完再一次交100份)前者就是无缓冲,后者就是缓冲
全缓冲
当流的缓冲区无数据或无空间时才执行实际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 |
stdin / stdout / stderr
stdin/stdout 默认是行缓冲
stderr没有缓冲
调用man查看手册的时候一般不是man 2 +函数,就是 man 3 +函数
1、行缓冲
第一种:
#include <stdio.h>
#include <unistd.h>
int main(int argc, char*argv[]){
printf("hello world");
}
第二种:
#include <stdio.h>
#include <unistd.h>#sleep的头文件
int main(int argc, char*argv[]){
printf("hello world");
while(1){
sleep(1);#s间隔一秒执行一次
}
}
第三种:
#include <stdio.h>
#include <unistd.h>
int main(int argc, char*argv[]){
printf("hello world\n");
while(1){
sleep(1);
}
}
结果:
第一种:程序结束所以打印了
第二种:打印了但是程序没结束在缓冲,所以不输出
第三种:行缓冲
2、全缓冲
第一种:
#include <stdio.h>
#include <unistd.h>
int main(int argc, char*argv[]){
int i = 0;
for (i = 0;i<1024;i++){
printf("a");
}
while(1){
sleep(1);
}
}
第二种:
#include <stdio