Linux系統下I O同步的問題

2021-07-04 08:52:38 字數 778 閱讀 6266

傳統的unix家族的作業系統在核心裡面都有乙個快取區快取記憶體或者頁面快取記憶體,大多數的磁碟i/o都是通過緩衝進行訪問的。資料寫入檔案的時候,其實並沒有真正地寫入,核心先將資料拷貝到其中的乙個快取區,如果快取區未寫滿,則不將資料排到輸出佇列,而是等待快取區寫滿或者當核心需要重新使用這個快取區的時候,才將該快取區排到輸出佇列,此時還沒有到磁碟,只有當資料到達佇列的隊首的時候,才進行實際的i/o操作。這種方式稱為延遲寫,這種方式的好處是降低了磁碟io讀寫的次數,一定程度上提高了系統的效能,但是有好處也有壞處,這種方式降低了檔案內容的更新速度,使得待寫到檔案的資料需要經過一段時間後才能到達磁碟,如果系統突然掛掉了!這種方式會導致資料的丟失!!!所以這種情況下不得不進行資料的同步。

有三個函式可以實現同步,分別是sync,fsync,fdatasync。在作業系統中的原型如下:

#includevoid sync(sync);

int fsync(int fd);

int fdatasync(int fd);

下面就對這三個函式分別進行說明:

sync函式只是將所有修改過的塊快取區排到輸出佇列,就返回,這個函式其實並沒有實際寫入資料到磁碟中。通常所說的update系統守護程序會周期性地呼叫sync函式,sync命令也呼叫的是sync函式。

fsync函式只僅僅對檔案描述符fd指定的單一檔案起作用,並且等待寫磁碟操作結束後返回。

fdatasync函式的作用和fsync函式的作用類似,只是此函式只是將資料寫入檔案,像檔案屬性之類的並不關心,而fsync函式則會將檔案屬性等全部寫入檔案。

Linux下時間同步問題

同步時間1 rm rf etc localtime 移除本地時間 ln s usr share zoneinfo asia shanghai etc localtime 啟用上海時間 usr sbin ntpdate time.nist.gov 同步時間 方法2 linux自動同步時間 vi etc...

Linux下的ntp時鐘同步問題

前段時間,專案中有個需求,需要將linux和windows的時間進行同步,網上也有很多類似時鐘同步的帖子,大致類似 不過本次的linux的機器有點特殊,沒有service命令,而且要求在另一台suse的linux機器上通過指令碼連線到目的linux機器進行時鐘同步。起先我也被困擾的很久,不過辦法都是...

Linux下 C語言檔案IO操作(系統IO)

函式 int open const char int flags 開啟乙個已經存在的檔案 int open const char int flags,mode t mode 開啟乙個不存在的檔案 標頭檔案 include 引數1 待讀取的檔案的檔案描述符 引數2 讀取資料儲存的buf 引數3 讀取的...