gpt4 book ai didi

go - 从命名管道读取不会提供任何输出,并且会无限期地阻塞代码

转载 作者:行者123 更新时间:2023-12-01 20:26:08 25 4
gpt4 key购买 nike

我写了一段具有IPC目的的代码。预期的行为是该代码从命名管道读取内容并打印字符串(使用Send("log", buff.String()))。首先,我在goroutine中打开命名管道“阅读器”,而打开阅读器时,我发出一个信号,指示可以将数据写入命名管道(使用Send("datarequest", ""))。这是代码:

var wg sync.WaitGroup
wg.Add(1)

go func() {
//reader part
file, err := os.OpenFile("tmp/"+os.Args[1], os.O_RDONLY, os.ModeNamedPipe)
if err != nil {
Send("error", err.Error())
}

var buff bytes.Buffer
_, err = io.Copy(&buff, file)

Send("log", buff.String())

if err != nil {
Send("error", err.Error())
}

wg.Done()
}()

Send("datarequest", "")
wg.Wait()

这是发送信号时执行的代码:
    //writer part
file, err := os.OpenFile("tmp/" + execID, os.O_WRONLY, 0777)

if err != nil {
c <- "[error] error opening file: " + err.Error()
}

bytedata, _ := json.Marshal(moduleParameters)
file.Write(bytedata)

因此,我得到的行为是,当我尝试复制代码时,代码会无限期地阻塞。我真的不知道为什么会这样。当我在终端中用cat测试它时,确实得到了预期的结果,所以我的问题是如何用代码获得相同的结果?

谢谢您的帮助!

里克

编辑:execID与os.Args [1]相同

最佳答案

使用file.Close()发送文件后,编写者应关闭文件。请注意,file.Close()可能返回错误。

关于go - 从命名管道读取不会提供任何输出,并且会无限期地阻塞代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62227069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com