缓存IO:
IO数据 --->页缓存(内核) ---> 应用程序的地址空间
优点:1)缓存IO使用了操作系统内核缓冲区,在一定程度上分离了应用程序空间和实际的物理设备
2)缓存IO可以减少读盘的次数,从而提高性能
应用程序的写操作机制: 同步写机制、延迟写机制
如果用户采用的是同步写机制( synchronous writes ), 那么数据会立即被写回到磁盘上,应用程序会一直等到数据被写完为止。
如果用户采用的是延迟写机制( deferred writes ),那么应用程序就完全不需要等到数据全部被写回到磁盘,数据只要被写到页缓存中去就可以了。在延迟写机制的情况下,操作系统会定期地将放在页缓存中的数据刷到磁盘上。
与异步写机制( asynchronous writes )不同的是,延迟写机制在数据完全写到磁盘上的时候不会通知应用程序,而异步写机制在数据完全写到磁盘上的时候是会返回给应用程序的。所以延迟写机制本身是存在数据丢失的风险的,而异步写机制则不会有这方面的担心。
函数头文件简介:
在所有的linux 系统中,如果需要对文件的进行操作,只要包含如下4 个头文件即可。
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
上面四个头文件中包含了打开,关闭,创建,读文件,写文件的函数,还有标志位,以及在不同32 位以及64 位系统下数据长度的宏变量定义。
open函数例程
int open(const char *path, int oflags,mode_t mode);
第一个参数path 表示:路径名或者文件名。路径名为绝对路径名,例如开发板中的led驱动的设备几点/dev/leds。
第二个参数oflags 表示:打开文件所采取的动作。
第三个参数mode 表示:设置创建文件的权限。 文件所属用户,文件所属组,其他用户
open函数代码:
编译完以后 , 在开发版中的运行情况
实验创建函数creat 和 open
int creat(const char * pathname, mode_t mode);
creat 函数只有两个参数,参数的含义和open 类似。
实验-关闭函数close:
close函数介绍
程序
实验-写函数write
实验-文件的读read函数
read 函数在头文件“#include <unistd.h>”中。
函数原型为ssize_t read(int fd,void *buf,size_t len)
参数fd,使用open 函数打开文件之后返回的句柄。
参数*buf,读出的数据保存的位置。
参数len,每次最多读len 个字节。
返回值为ssize 类型,出错会返回-1,其它数值表示实际写入的字节数,返回值大于0 小于len 的数值都是正常的。
输出结果