sync是C語(yǔ)言的一個(gè)庫(kù)函數(shù)时迫。調(diào)用sync可以將系統(tǒng)緩沖區(qū)(內(nèi)存中)的數(shù)據(jù)寫(xiě)入到文件系統(tǒng)(磁盤(pán))中他宛。
sync的聲明為:
int sync(void);
位于頭文件unistd.h烟很。
當(dāng)同步成功返回0卿吐,否則返回-1富弦。
功能為將系統(tǒng)緩沖區(qū)的內(nèi)容寫(xiě)回磁盤(pán)灵嫌,以確保數(shù)據(jù)同步壹罚。
在操作系統(tǒng)中,除非設(shè)置了自動(dòng)同步寿羞,否則為了減少磁盤(pán)的寫(xiě)入量猖凛,延長(zhǎng)磁盤(pán)壽命,寫(xiě)入文件時(shí)并不是即時(shí)寫(xiě)入到磁盤(pán)中绪穆,而是先寫(xiě)入內(nèi)存辨泳,這段內(nèi)存區(qū)域被稱(chēng)為系統(tǒng)緩沖區(qū)。在系統(tǒng)緩沖區(qū)數(shù)據(jù)累計(jì)到一定數(shù)量后(具體數(shù)量因系統(tǒng)實(shí)際設(shè)置而定)玖院,會(huì)有系統(tǒng)進(jìn)程一次性寫(xiě)入所有緩沖數(shù)據(jù)菠红。這樣,如果意外斷電难菌,那么系統(tǒng)緩沖區(qū)內(nèi)數(shù)據(jù)就會(huì)因此丟失试溯。于是在寫(xiě)入一些重要數(shù)據(jù)時(shí),都會(huì)在寫(xiě)入結(jié)束后進(jìn)行一次sync()的調(diào)用郊酒,保證數(shù)據(jù)已經(jīng)被寫(xiě)入磁盤(pán)遇绞,降低數(shù)據(jù)丟失或損壞的可能性。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
部分代碼:
int ret = 0;
char caBuf[32] = "HelloWorld";
//write數(shù)據(jù)時(shí),首先會(huì)將數(shù)據(jù)寫(xiě)到磁盤(pán)緩沖區(qū)
//并不會(huì)立刻寫(xiě)到磁盤(pán)上
ret = write(fd, caBuf, strlen(caBuf));
if (ret >= 0)
{
printf("write ok\n");
}
//若想要緩沖區(qū)的數(shù)據(jù)寫(xiě)到磁盤(pán)上
//可以通過(guò)調(diào)用函數(shù)sync()或者syncfs()來(lái)實(shí)現(xiàn)
//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);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////