我正在開發一個與名爲Dazzle的USPS運輸包接口的系統。該系統的一部分包括一個監控守護進程,其目的是採用製表符分隔的值文件,將它們轉換爲Dazzle可識別的XML,並將它們傳遞給Dazzle以生成標籤。這部分工作得很好。然而,我也想要解析Dazzle生成的輸出文件並將其導入到數據庫中。我的Linux守護進程如何知道Windows程序何時停止寫入通過SAMBA訪問的文件?
請注意,Dazzle在Windows上運行。我的監控守護進程是用Perl編寫的,可以在Linux上運行。我的Linux系統通過Samba安裝了Dazzle的輸入和輸出目錄。
有時間的Dazzle開始寫輸出文件,它的完成時間之間的可測量的延遲。我想知道的是我如何等待Dazzle完成輸出文件的寫入?我試過打開這個文件,並在其上做了flock($fh, LOCK_SH)
,但這似乎沒有任何好處。
編輯:我有一個基於下面的「mobrule」的評論的想法。 Dazzle使用XML編寫輸出文件。貨件中的每個包裝都包含在標籤中,整個文件都包含在標籤中。因此,如果我在文件完成之前開始閱讀文件,則可以在採取措施之前等待適當的結束標記。
另外,我應該提到我目前正在做的事情。當我檢測到輸出XML文件已被創建時,我試圖解析它。如果解析失敗,我會睡覺並重試。如果失敗了,我會睡兩次,然後再試一次,等等。這在64秒超時測試中工作得很好。
這隻有在Dazzle也使用相同的鎖定機制鎖定文件時才成立。如果Dazzle不是Perl腳本,這種情況不太可能,尤其不太可能。 – mob 2010-02-25 16:05:57
這是一個很好的觀點 - Dazzle是一個Windows應用程序,不是用Perl編寫的。因此,由於Perl中的文件鎖定只是「建議性的」,所以不起作用。可惜,'否則這是我聽到的最好的解決方案。 – 2010-02-27 13:51:05