第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何打印目錄中文件的內(nèi)容但忽略以寫入模式打開的文件?

如何打印目錄中文件的內(nèi)容但忽略以寫入模式打開的文件?

Go
素胚勾勒不出你 2023-05-15 15:10:27
我有一個 goroutine,它定期檢查目錄中的新文件,然后打印文件的內(nèi)容。然而,還有另一個 goroutine 創(chuàng)建一個文件,將內(nèi)容寫入其中,然后保存文件。如何忽略目錄中以 WRITE 模式打開的文件?示例代碼:for { fileList, err := ioutil.ReadDir("/uploadFiles")  if err != nil {     log.Fatal(err)     continue  } for _, f := range fileList {      log.Println("File : ", f.Name())      go printContents(f.Name()) } time.Sleep(time.Second * 5)}在 printContents goroutine 中,我想忽略以 WRITE 模式打開的文件。
查看完整描述

1 回答

?
紅糖糍粑

TA貢獻1815條經(jīng)驗 獲得超6個贊

事情不是這樣的。

在我的腦海中,我可以想到這些選項:

  • 如果兩個 goroutine 都在同一個程序中工作,那么問題不大:讓“生產(chǎn)者”goroutine 將其已完成修改的文件的名稱注冊到某個注冊表中,并讓“消費者”goroutine 從該注冊表中讀?。ê蛣h除) .

    在最簡單的情況下,它可能是一個緩沖通道。

    如果生產(chǎn)者的工作速度比消費者快得多,并且您不想出于某種原因阻止前者,那么由互斥鎖保護的切片將符合要求。

  • 如果 goroutines 在同一臺機器上的不同進程中工作,但您控制兩個程序,則讓生產(chǎn)者進程通過任何合適的 IPC 將相同的數(shù)據(jù)傳遞給消費者進程。

    執(zhí)行 IPC 的哪種方法更好取決于進程如何啟動、交互等。

    有多種選擇。

  • 如果您控制兩個進程但不想弄亂它們之間的 IPC(也有原因),那么讓生產(chǎn)者遵循關(guān)于如何編寫文件的最佳實踐(稍后會詳細介紹),并讓消費者使用任何文件系統(tǒng)監(jiān)控工具,用于報告生產(chǎn)者生成(“出現(xiàn)”)哪些文件。你可以從github.com/fsnotify/fsnotify.

    為了正確地寫入文件,生產(chǎn)者必須將其數(shù)據(jù)寫入臨時文件——即位于同一目錄中但具有易于理解的文件名以指示該文件尚未完成的文件——例如, “.foobar.data.part”或“foobar.data.276gd14054.tmp”可以寫入“foobar.data”。(存在其他方法,但這個方法足以作為開始。)

    一旦文件準備就緒,制作者必須將文件從其臨時名稱重命名為其“正確的”最終名稱。此操作在所有合理的操作系統(tǒng)/文件系統(tǒng)上都是原子的,并使文件從消費者的 PoV 原子地“跳入存在狀態(tài)”。例如,inotify在 Linux 上為這樣的出現(xiàn)生成一個類型為“moved to”的事件。

    如果您不想自己做正確的事情,github.com/dchest/safefile這是一個很好的跨平臺開始。

    正如您所看到的,通過這種方法,您知道文件已經(jīng)完成,僅從它被報告到已經(jīng)出現(xiàn)的事實。

  • 如果您不控制生產(chǎn)者,您可能需要求助于猜測。

    最簡單的是再次監(jiān)視文件系統(tǒng)的事件——但這次是“文件更新”事件,而不是“文件創(chuàng)建”事件。對于報告為已更新的每個文件,您必須記住該事件的時間戳,并且當經(jīng)過一定時間后,您可以聲明該文件是由制作者完成的。

    IMO 這種方法是最糟糕的,但如果你沒有更好的選擇,它至少是一種選擇。


查看完整回答
反對 回復 2023-05-15
  • 1 回答
  • 0 關(guān)注
  • 141 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號