语言中sync()

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);

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

你可能感兴趣的:(语言中sync())