如何保證程式對檔案的寫入是順序的?

時間 2021-06-02 04:35:52

1樓:Zign

這種事吧不該你管你就不要管。

要相信檔案系統和os還有底層硬體會幫你管好這件事的。何況你根本就不知道這些玩意到底寫哪去了,你的硬碟如果是raid還大概能猜出來怎麼個寫法,要是iscsi或者光纖啥的就沒處猜去了。咱們還沒說雲環境呢是不?

啥?你就一塊硬碟?那擔心這個不如換塊ssd實惠,ssd尋道時間可以小到幾乎忽略不計。

2樓:那把殺豬刀

瀉藥如果你使用的是OS提供的api寫的磁碟,這個是沒辦法保障的,OS寫磁碟的時候是呼叫的檔案系統來處理的,檔案系統一般來說有自己的寫入策略,一般是找乙個連續的空閒的block寫,寫完乙個寫下乙個,直到下乙個block被占用,那麼會重新找一片連續block,接著寫,多片連續block通過inode(linux下的node節點)的next指標保持上下連線順序

如果你想保證寫入是順序的,那麼你需要直接操作磁碟,而不是檔案系統,同時你需要維護當前從盤的資料,寫的時候不會覆蓋原有的資料

總的來說,為了這個的效能提公升去開發這麼乙個系統是不太划算的,當然Google這麼做了,不代表這麼做是最合適的;直接換ssd帶來的效能提公升是這種方式的提公升的數百倍

3樓:

順序寫入這件事情是檔案系統和裝置驅動保證的。

應用程式要保證的是盡可能的利用快取,以提高檔案讀寫的效率。不能乙個位元組乙個位元組的立刻寫到硬碟裡面去,而是要一塊資料一起交給檔案系統去寫。

write呼叫沒有快取,fputs這樣的c庫有。

4樓:jiangtao9999

自己開發檔案系統解決問題。

如果不是你自己開發的檔案系統,那就是看這個分割槽的情況了。因為應用不能接管檔案分割槽的詳細使用方法。

應用層面來說,只能是盡可能一次申請足夠大的空間,這樣系統層會優先分配連續空間。

NTFS 好像有個疏散檔案?還是什麼名字的檔案空間申請方法,這個方法,檔案申請的空間會按照總容量去考慮分配,但是檔案本身不需要這麼大。如果不用這個功能,就是先要弄個大檔案佔好坑,之後再往裡面寫資料。

5樓:qst hz

問為什麼之前先問是不是。

檔案系統和磁碟驅動共同保證寫入的結果正確

,但不保證一定是順序寫入。

具體怎麼寫入,是否會先寫快取再真正寫入,這個就不是你程式能控制的了,也不是你應該關心的事情。畢竟還有用iscsi虛擬出乙個本地磁碟的呢,那就更不存在順序寫入一說了,資料都是走socket來的。

開發新專案PLC程式順序是怎麼樣的?如何讓程式既簡潔明瞭,又優美?有什麼經驗?

hycabcd123456 說明你不會寫專案程式,真正做工程的,不管是啥裝置,直接用做好的框架程式,只需要改自動程式就可以,如果遇到乙個新裝置,程式就重新寫,做非標的人那不得累死,這個是需要學習的,自己摸搜至少也要好幾年,不懂可以私聊我 虛擬人生 儘管國內的PLC應用已經普及,但乙個有經驗大型PLC...

滾筒洗衣機是一次加液,不同的程式是如何保證洗淨衣服的?

葬心 滾筒洗衣機洗滌劑是放置在洗滌盒中,而滾筒洗滌盒一般是有三個隔室,如圖 左側為預洗室,如果您選擇的洗滌程式帶有預洗的話,請在此處加入少量洗滌劑 中間為主洗室,每次洗衣的洗滌劑都是放個隔間裡 藍色柵欄向下閉合,可以倒洗衣液,藍色柵欄向上開啟,可以放洗衣粉 右側為柔順劑室,柔順劑倒入此處待用。乙個全...

順序計算的程式 單核 如何做到對大量並行事件的模擬

駿馬金龍 計算機裡的方案是 用乙個具有超級特權的具有排程功能的排程器來負責CPU資源使用權的分配。假如有10000個任務,排程器會讓它們排隊,並按一定規則,將CPU分配給第乙個任務一小段時間 很短的乙個時間片段 然後排程器讓第乙個任務休息再次接著排隊,並將CPU又分配給第二個任務一小段時間。依次類推...