2010-01-25 76 views
0

我有一種情況,我需要從目錄中獲取文件並儘快處理它們。將文件送入這個目錄的過程是以相當快的速度寫入文件(在高峯時刻一分鐘可以達到一千分鍾),我需要將文件提取出來並在它們到達時處理它們。我如何知道我是唯一一個打開文件句柄的人?

一個問題我已經是知道我的C++代碼已經打開發送服務器已與完成一個文件 - 即,本地FTP服務器是不是還寫。

在Solaris下,我怎麼能打開一個文件,並用100%的把握認爲沒有其他人把它打開了知道嗎?

我應該注意,一旦該文件已被寫入,並關閉了它的其他服務器不會再次打開它,所以如果我能打開它,知道我有獨佔訪問我並不需要擔心關於檢查我仍然是唯一的文件。

+0

添加了另一個選項 – stacker 2010-01-25 21:30:01

+0

或問上serverfault.com這個問題,管理員可以有更好的想法 – stacker 2010-01-25 21:45:14

回答

0

將文件送入目錄的過程是由您擁有的嗎?如果是這種情況,請將該文件的擴展名重命名爲.working,以便您不會選取正在使用的文件。

編輯:既然你說這是solaris的,寫一個shell腳本和使用PFILES命令檢查的過程中仍然使用您想要使用的文件。如果沒有開始處理文件。

+0

不,這不是由我們所擁有。這是FTPs向我們提供文件的第三方硬件。 – Andrew 2010-01-25 08:52:46

1

您可以通過操作LOCK_EX使用flock()來確保獨佔訪問。的fcntl()是另一種可能的方式

#include <sys/file.h> 

int flock(int fd, int operation); 

編輯:兩種方法可以做到這一點,發現其接收過程中鎖定該文件的FTP服務器。 如果您使用pfiles或lsof(可在此處獲得http://www.sunfreeware.com/)來監視ftp服務器進程,以確保沒有其他人正在訪問這些文件,恐怕您將無法100%安全。

也許你可以檢查進來的文件的時間戳,如果他們沒有帶改變了幾分鐘,這將是安全的獲取,處理或做一些他們。

+0

依賴於ftp服務器 - 即,ftp服務器是否會鎖定文件?或者這將工作對打開但活動的文件句柄? – 2010-01-25 10:10:37

+0

在這種情況下,可以使用協議,並且在傳送文件之後,可以發送另一個名爲'tx_finished'的文件來指示傳輸的結束。 – stacker 2010-01-25 10:33:59

+0

我們無法控制發送文件的設備...... – Andrew 2010-01-25 20:49:27

相關問題