2010-05-25 25 views
1

我有一個Clipper系統將csv文件寫入Windows目錄。我有一個在Linux服務器上運行的Perl腳本,該服務器正在讀取該Windows目錄的一個掛載並將這些文件導入數據庫。如何測試csv文件當前是否打開並正在使用Perl寫入文件而不是文件句柄?

現在我們使用標誌文件來指示csv何時不再被寫入;標誌文件在csv完成後寫入。我真的寧願從csv本身獲得我需要的東西,但我似乎無法找到一種方法來告知文件何時打開並正在寫入。

lsof似乎不能回答我的需要。我試過使用flock並用排它鎖打開文件,認爲它可能會在文件被修改時拋出錯誤,但它不會。

有什麼想法?

+2

你會發現所有的解決方案都是特定於操作系統的。使用單獨的文件存在就像您將找到的解決方案一樣清晰。 – jmucchiello 2010-05-25 15:46:25

+0

這幾乎是我所決定的。 – Henry 2010-05-26 16:54:26

回答

0

根據linux的手冊頁羊羣

羊羣()在NFS不鎖文件。 使用fcntl(2)代替:通過NFS工作 ,給定最近的 版本的Linux和支持鎖定的服務器 。

你試過使用fcntl()嗎?使用谷歌搜索,我發現一些使用fcntl和CIFS的人有一些examples

0

它可能無法正常工作,因爲您正在安裝到Windows,但也許inotify會幫助。

0

如果inotify不起作用,請使用Poor Man's Polling:如果修改時間早於兩秒,則文件完成寫入。

+0

需要太多時間。我們可能在一天內通過一萬多個文件。每2秒爲處理添加大量時間。我測試了690個文件,大約需要25分鐘才能導入它們。使用標誌文件只需要大約50秒。 – Henry 2010-05-26 16:55:59

相關問題