回覆列表
-
1 # 運維小鄒
-
2 # linux基礎學習
這個問題需要考慮兩個問題,一個是cp程序寫檔案的時候有沒有獲取讀鎖,另一個是讀程序是以阻塞方式還是非阻塞方式開啟檔案。
如果cp程序獲取了讀鎖,而讀程序是以非阻塞方式開啟檔案,那麼是不可能讀取成功的;
如果讀程序以阻塞方式開啟檔案,那麼會一直等待直到cp程序釋放讀鎖,最終會讀取成功;
如果cp程序沒有獲取讀鎖,讀程序以非阻塞方式開啟,如果讀程序比寫程序快,那就會讀取失敗,如果讀程序比寫程序慢,那還是有機會讀取成功的。
如果讀程序以阻塞方式開啟檔案,只要沒遇到檔案結束符EOF,那麼讀程序會邊讀邊等待,直到cp程序完成寫入,讀程序也就完成讀取。
綜上所述,如果你的讀程序是以阻塞方式讀取檔案,那麼最終是一定會讀取成功的,如果是以非阻塞方式讀取檔案,那麼可能會面臨讀取失敗的風險。
你可以做一個簡單的實驗驗證一下,用ctrl-z先將cp寫程序放入bash後臺暫停,然後看看讀程序的反應,然後再將寫程序繼續執行,再看看讀程序反應
個人感覺是可以的,一個檔案一邊在寫,另一個程式在讀,完全不影響。最典型的用tail檢視日誌檔案不就是一個程式寫一個程式讀。