我有一個Linux(Fedora的)程序檢測到USB記憶棒插入,並通過電話做一個自動備份到系統調用返回前的rsync完成
系統(「rsync的...
一旦系統調用返回,我會提示用戶移除U盤,問題是系統調用在rsync完成將所有文件複製到U盤之前會返回,一旦文件足夠大,用戶可以輕鬆地拉動在文件全部被複制之前出文件
編寫我自己的cpdir命令的缺點是否有人知道是否有解決方法?我沒有看到system()調用或rsync(或cp)的強制「等到複製完成」狀態的任何選項。
在此先感謝。
Dave
我有一個Linux(Fedora的)程序檢測到USB記憶棒插入,並通過電話做一個自動備份到系統調用返回前的rsync完成
系統(「rsync的...
一旦系統調用返回,我會提示用戶移除U盤,問題是系統調用在rsync完成將所有文件複製到U盤之前會返回,一旦文件足夠大,用戶可以輕鬆地拉動在文件全部被複制之前出文件
編寫我自己的cpdir命令的缺點是否有人知道是否有解決方法?我沒有看到system()調用或rsync(或cp)的強制「等到複製完成」狀態的任何選項。
在此先感謝。
Dave
如何確定呼叫返回的時間早於預期?通常情況下,它不應該除非你明確地將它發送到背景,命令後面帶有尾隨&
字符。
我認爲,rsync完成,但數據並沒有真正寫入到USB棒。必須正確卸載驅動器,並等待umount
命令完成。
使用2個線程,你會同步...做一個刪除棒等待一個rsync的?
的USB設備上運行卸除之前,請檢查是否任何進程(即rsync的)仍然使用它:
Linux: Which process is causing "device busy" when doing umount?
您需要調用的rsync之後調用同步()。在所有待處理數據寫入磁盤之前,同步將不會返回。
從手冊頁:
同步()函數強制髒的寫(修改)在該塊 緩存到磁盤緩衝器。內核將此信息保存在覈心中,以減少系統所需的磁盤I/O傳輸次數。由於信息- 在系統崩潰後,高速緩存中的數據會丟失,並且用戶進程更新(8)(大約每30秒)會發出一個同步()調用,以便自動發出 -。
嘗試cp bigfile/media/floppy/bigfile。 cp命令在複製完成之前返回。 我有系統設置爲自動掛載和卸載驅動器,但我會嘗試卸載驅動器,看看會發生什麼。 謝謝 – 2009-07-16 17:38:32