创客学院
Linux下支持两种IO接口
1、文件IO(open/close/read/write)——POSIX标准 2、标准IO(fopen/fclose/fread/fwrite)——ANSI标准
两者为相互依赖的关系
概念
对设备(如硬盘、内存、网卡、键盘)中的数据进行读写 input、output
IO作用
Linux“下一切皆文件”,磁盘、硬件、网络设备等都被虚拟成了相应的文件 Linux对这些文件的操作都通过IO接口来完成的。
Linux内核中IO操作的实现机制
Linux系统内部会将文件系统,设备驱动、网络协议等复杂的操作实现好,对应用层只提供简单的应用接口,即API(application interface)应用接口
一般计算机分三层——硬件-操作系统-APP
Linux内部的VFSC(虚拟文件系统层)层对不同文件系统,设备驱动、网络协议等接口做了标准化,这样在应用层就可以通过统一的接口操作不同的设备。 驱动——直接读写硬盘 在一个操作系统下,文件系统的种类也可以很多
华清创客学院
概念:
一组相关数据的集合
文件类型:
7种
-
常规文件 r
-
目录文件 d
-
字符设备文件 c
-
块设备文件 b
-
管道文件 p
-
套接字文件 s
-
符号链接文件 I
强调:操作系统不同,所支持的文件类型也不同
标准I/O
介绍
标准I/O由ANSI C标准定义
主流操作系统上都实现了C库
标准I/O通过缓冲机制减少系统调用,实现更高的效率
无缓冲
有缓冲
标准I/O-流
FILE
标准IO用一个结构体类型来存放打开的文件的相关信息
标准I/O的所有操作都是围绕FILE来进行
流(stream)
FILE又被称为流(stream)
文本流/二进制流
-
Windows
二进制流:换行符 ←→ '\n'
文本流:换行符 ←→ '\r'\n'
-
Linux
换行符 ←→ '\n'
标准I/O-流的缓冲类型
-
全缓冲
当流的缓冲区无数据或无空间时才执行实际I/O操作
-
行缓冲
当在输入和输出中遇到换行符('\n')时,进行I/O操作
当流和一个终端关联时,典型的行缓冲
-
无缓冲
数据直接写入文件,流不进行缓冲
标准I/O-stdin,stdout,stderr
标准I/O-打开流
下列函数可用于打开一个标准I/O流:
FILE *fopen(const char *path,const char *mode);
成功时返回流指针;出错时返回NULL
// 函数原型 FILE *fopen(const char *path,