文件同步
-
大多数磁盘I/O都有缓冲区机制,写入文件其实先写入缓冲区,直到缓冲区满才将其排入写队列。降低写操作的次数,提高写操作效率,但是可能会导致磁盘文件与缓冲区数据不同步,可以借助系统调用来强制让磁盘与缓冲区的内容同步:
void sync(void); 功能:将所有被修改过的缓冲区中的数据排入写队列,立即返回,不等待写入磁盘的完成 int fsync(int fd); 功能:只针对文件fd,并且会等待写入完成才返回 int fdatasync(int fd); 功能:只同步文件fd的数据,不同步文件属性,等待写入完成才返回
文件描述符的状态标志
#include <unistd.h> #include <fcntl.h> int fcntl(int fd, int cmd, ... /* arg */ ); 功能:设置或获取文件描述符的状态标志 cmd: F_GETFD 获取文件描述符状态标志 F_SETFD 设置文件描述符状态标志 F_GETFL 获取文件状态标志 其中 O_CREAT\O_EXCL\O_TRUNC 获取不了 F_SETFL 追加文件状态标志