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