0.UNIX输入输出基本概念 异步
Q1.程序与文件创建链接或通讯有几种机制?流与文件描述字有什么区别? Q2.打开文件的实质? async
打开文件就是程序与文件之间创建链接或通讯。 函数
流的类型是FILE; spa
文件描述字的类型是int; .net
流函数创建在文件描述字之上。 设计
1.标准I/O 【针对流】 对象
a. NULL blog
b.流与FILE对象 教程
c.打开与关闭流 进程
d.读写流 {读的方式不一样;写的方式不一样}
e.文件定位
f.文件结束和错误指示器 为了区分到底是错误返回仍是文件返回。ferror()肯定是否存在错误;feof()检查是否遇到文件结束。【每一个流对象内部有两个指示器:一个为错误指示器,一个是文件结束指示器】clearerr()清除这两个指示器。
g.流缓冲 每个流都有一个输入输出缓冲区。写入流的字符并不当即写到文件中,而是先在缓冲区中汇集为一块,而后异步地以块为单位传送到文件。这种处理方式称为缓冲。 {异步I/O什么原理?} 采用缓冲的目的:减小调用低级I/O函数的次数,由于系统调用是较费时间的操做。【存储在磁盘上的文件,当进程用read()读数据时,设备驱动程序必须将数据在文件中的地址转换为硬盘的物理磁道号,卷宗叫以及扇段号。以后设备必须移动磁头至相应的卷宗并等待磁盘的相应扇段旋转至磁头之下。一切准备好后才能从磁盘开始读写数据。】
(1)全缓冲
(2)行缓冲---->交互设备
(3)无缓冲 --->标准错误流
void setbuf();void setvbuf();必须在流已打开后且先于其余任何操做执行以前调用。【setbuf()其实是setvbuf()的特例,等价于setvbuf(stream, buf, buf?_IOFBF:_IONBF,BUFSIZ)】
刷新:将缓冲区的数据写出到文件中。默认如下状况自动刷新:1)流被关闭时;2)调用exit()终止程序时;3)流是行缓冲的,当写出一换行符时;4)当企图输出而缓冲区已满时;5)不管什么时候对流的输入操做致使它实际从文件读数据时。其它时刻刷新缓冲区内容:显式地调用fflush()
h.格式I/O {格式输入;格式输出}
i.临时文件
Q 通常暂存什么数据?有什么特色?应用场景?相关函数{tmpnam(), tempnam(), tmpfile()}?函数使用举例?
j.其它:
{ESPIP错误};
FILE结构体;
Q 文件位置起什么做用? 为何fgets()是危险的函数?读回退?
2.低级I/O 【针对描述字】
b1.read()和write()函数;b2.readv()和writev()函数
c.文件位置
d.文件复制 dup()和dup2()
e.fdopen()和fileno()
f.fcntl()
g.非阻塞I/O {想到了周五看UNP的I/O模型}
阻塞I/O :调用必须等到操做完成,即读写到数据,才能返回。
h.fsync()和fdatasync()函数
3.终端I/O
http://blog.csdn.net/wubin1124/article/details/5155864
Q1.为什么引入终端I/O
Q2.终端I/O概述,分为几种类型
?使用GTI提供的终端I/O控制函数改变终端的默认设置
4.高级I/O
参考:APUE; 《UNIX/Linux程序设计教程》;
/*wolflion(天行)整理,转载注明出处*/ 2013.3.17 version1.0