{eval=Array;=+count(Array);}

成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

問答專欄Q & A COLUMN

Linux文件讀寫問題?

wenziwenzi 回答0 收藏1
問題描述:如果服務(wù)器內(nèi)有一個大文件,有一個進(jìn)程正在執(zhí)行cp命令對該文件進(jìn)行覆蓋操作,同時另一個JAVA進(jìn)程正在準(zhǔn)備打開IO對這個文件進(jìn)行讀操作,那這個JAVA進(jìn)程可以讀取到這個文件嗎?
收藏問題

2條回答

SimpleTriangle

SimpleTriangle

回答于2022-06-28 11:49

這個問題需要考慮兩個問題,一個是cp進(jìn)程寫文件的時候有沒有獲取讀鎖,另一個是讀進(jìn)程是以阻塞方式還是非阻塞方式打開文件。

如果cp進(jìn)程獲取了讀鎖,而讀進(jìn)程是以非阻塞方式打開文件,那么是不可能讀取成功的;

如果讀進(jìn)程以阻塞方式打開文件,那么會一直等待直到cp進(jìn)程釋放讀鎖,最終會讀取成功;

如果cp進(jìn)程沒有獲取讀鎖,讀進(jìn)程以非阻塞方式打開,如果讀進(jìn)程比寫進(jìn)程快,那就會讀取失敗,如果讀進(jìn)程比寫進(jìn)程慢,那還是有機(jī)會讀取成功的。

如果讀進(jìn)程以阻塞方式打開文件,只要沒遇到文件結(jié)束符EOF,那么讀進(jìn)程會邊讀邊等待,直到cp進(jìn)程完成寫入,讀進(jìn)程也就完成讀取。

綜上所述,如果你的讀進(jìn)程是以阻塞方式讀取文件,那么最終是一定會讀取成功的,如果是以非阻塞方式讀取文件,那么可能會面臨讀取失敗的風(fēng)險。

你可以做一個簡單的實驗驗證一下,用ctrl-z先將cp寫進(jìn)程放入bash后臺暫停,然后看看讀進(jìn)程的反應(yīng),然后再將寫進(jìn)程繼續(xù)運行,再看看讀進(jìn)程反應(yīng)

評論0 贊同0
  •  加載中...
msup

msup

回答于2022-06-28 11:49

個人感覺是可以的,一個文件一邊在寫,另一個程序在讀,完全不影響。最典型的用tail查看日志文件不就是一個程序?qū)懸粋€程序讀。

評論0 贊同0
  •  加載中...

相關(guān)問題

您已邀請0人回答 查看邀請

我的邀請列表

  • 擅長該話題
  • 回答過該話題
  • 我關(guān)注的人
向幫助了您的網(wǎng)友說句感謝的話吧!
付費偷看金額在0.1-10元之間
<