第九章学习笔记
I/O库函数是一系列文件操作函数,既方便用户使用,又提高了整体效率
I/O库函数与系统调用
系统调用函数:open()、read()、write()、lseek()、close()
I/O库函数:fopen()、fread()、ferite()、fseek()、fclose()
每个I/O库函数的根都在对应的系统调用函数中。
I/O库函数算法
fread()算法:
fread()使用之前得到的fd使用read()发出系统调用,填充file结构体中的fbuff[];
初始化fbuff[]指针、计数器和状态变量;
将数据复制到程序缓冲区;
若内部缓冲没有足够的数据,则使用read()继续填充内部缓冲区,并将数据从内部缓冲区复制到程序缓冲区;
复制完之后,更新内部缓冲区的指针、计数器,为下次read()做准备;
(2)fwrite算法
与fread算法相似,数据传输方向不一样。
(3)fclose算法
若文件以写的方式被打开,fclose()会先关闭文件流的局部缓冲区。然后,它会发出一个close(fd)系统调用来关闭FILE结构体中的文件描述符。最后,它会释放FILE结构体并将FILE指针重置为NULL
使用I/O库函数或系统调用
fread()依赖read()将数据从内核赋值到内部缓冲区,然后从内部缓冲区将数据复制到程序缓冲区,他传输了两次数据相反,read()将数据从内核直接复制到程序的缓冲区,只复制一次。若不以BLKSIZE为单位进行R/W,则fread()和fwrite()更高效。
I/O库模式
"r+":表示读/写,不会截断文件。
"w+":表示读/写,但是会先截断文件;如果文件不存在,会创建文件。
"a+":表示通过追加进行读/写;如果文件不存在,会创建文件。
编程实践与截图
读取文件