EOF後讀我寫這將打開一個命名管道進行讀取,然後處理任何行寫入該管的程序:如何恢復在命名管道
err = syscall.Mkfifo("/tmp/myfifo", 0666)
if err != nil {
panic(err)
}
pipe, err := os.OpenFile("/tmp/myfifo", os.O_RDONLY, os.ModeNamedPipe)
if err != nil {
panic(err)
}
reader := bufio.NewReader(pipe)
scanner := bufio.NewScanner(reader)
for scanner.Scan() {
line := scanner.Text()
process(line)
}
這隻要正常工作的寫入過程不會重新啓動或由於其他原因發送EOF。發生這種情況時,循環終止(如從Scanner
的規範中預期的那樣)。
但是,我想保持打開管道以接受進一步的寫入。我當時可能只是重新初始化掃描儀,但我相信這會創建一個競爭條件,即當新進程開始寫入管道時,掃描儀可能沒有準備好。
還有其他的選擇嗎?我是否需要直接使用File
類型?
您需要一臺新的掃描儀,哪裏會有比賽? – JimB
@JimB我擔心的情況是編寫器斷開連接,我得到一個EOF並從循環中重新創建掃描器。在完成之前,作者已重新啓動並重新開始寫入管道。可能這隻會導致寫入被緩衝了嗎?我想這取決於是否需要關閉文件句柄。 – carlpett