2009-07-16 70 views
1

我有一個Linux(Fedora的)程序檢測到USB記憶棒插入,並通過電話做一個自動備份到系統調用返回前的rsync完成

系統(「rsync的...

一旦系統調用返回,我會提示用戶移除U盤,問題是系統調用在rsync完成將所有文件複製到U盤之前會返回,一旦文件足夠大,用戶可以輕鬆地拉動在文件全部被複制之前出文件

編寫我自己的cpdir命令的缺點是否有人知道是否有解決方法?我沒有看到system()調用或rsync(或cp)的強制「等到複製完成」狀態的任何選項。

在此先感謝。

Dave

回答

0

如何確定呼叫返回的時間早於預期?通常情況下,它不應該除非你明確地將它發送到背景,命令後面帶有尾隨&字符。

我認爲,rsync完成,但數據並沒有真正寫入到USB棒。必須正確卸載驅動器,並等待umount命令完成。

+0

嘗試cp bigfile/media/floppy/bigfile。 cp命令在複製完成之前返回。 我有系統設置爲自動掛載和卸載驅動器,但我會嘗試卸載驅動器,看看會發生什麼。 謝謝 – 2009-07-16 17:38:32

0

使用2個線程,你會同步...做一個刪除棒等待一個rsync的?

1

您需要調用的rsync之後調用同步()。在所有待處理數據寫入磁盤之前,同步將不會返回。

從手冊頁:

同步()函數強制髒的寫(修改)在該塊 緩存到磁盤緩衝器。內核將此信息保存在覈心中,以減少系統所需的磁盤I/O傳輸次數。由於信息- 在系統崩潰後,高速緩存中的數據會丟失,並且用戶進程更新(8)(大約每30秒)會發出一個同步()調用,以便自動發出 -。