sync是C语言的一个库函数。调用sync可以将系统缓冲区(内存中)的数据写入到文件系统(磁盘)中。
sync的声明为:
int sync(void);
位于头文件unistd.h。
当同步成功返回0,否则返回-1。
功能为将系统缓冲区的内容写回磁盘,以确保数据同步。
在操作系统中,除非设置了自动同步,否则为了减少磁盘的写入量,延长磁盘寿命,写入文件时并不是即时写入到磁盘中,而是先写入内存,这段内存区域被称为系统缓冲区。在系统缓冲区数据累计到一定数量后(具体数量因系统实际设置而定),会有系统进程一次性写入所有缓冲数据。这样,如果意外断电,那么系统缓冲区内数据就会因此丢失。于是在写入一些重要数据时,都会在写入结束后进行一次sync()的调用,保证数据已经被写入磁盘,降低数据丢失或损坏的可能性。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
部分代码:
int ret = 0;
char caBuf[32] = "HelloWorld";
//write数据时,首先会将数据写到磁盘缓冲区
//并不会立刻写到磁盘上
ret = write(fd, caBuf, strlen(caBuf));
if (ret >= 0)
{
printf("write ok\n");
}
//若想要缓冲区的数据写到磁盘上
//可以通过调用函数sync()或者syncfs()来实现
//sync();
ret = syncfs(fd);
if (0 == ret)
{
//commit buffer cache to disk ok
}
else if (-1 == ret)
{
printf("errno:%d, err:%s\n", errno
, strerror(errno));
}
close(fd);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////