【发布时间】:2021-04-28 17:47:50
【问题描述】:
脚本
此 bash 脚本创建、写入和读取命名管道。但是,管道被阻塞了,所以cat 不会执行。
mkfifo pipe
echo Hello! > pipe // blocking
cat pipe // deadlocked; unreachable
提案
将缓冲区附加到管道/fifo 文件,允许存储Hello!,直到它被cat 读取。这可以通过系统调用、stdbuf 等来实现。
类比
Go 编程语言具有通道,一种命名管道。然而,这些可以被缓冲,这样它们就可以非阻塞地存储消息(当然,直到缓冲区已满)。示例
...
func main() {
channel := make(chan *byte, 1) // make a channel, with a buffer of 1
write("Hello!", channel) // write "Hello!" to the channel
read(channel, fmt.Println) // read from the channel, and print the result
}
【问题讨论】:
-
Go 与 Unix 管道有什么关系?那是完全不同的事情。
-
@MarcoBonelli go 编程语言允许你创建 channels,它们基本上是你的 go 程序中函数的管道。在这里,我将 go 的通道缓冲功能与 Unix fifo 文件进行比较。
-
嗯,也许您可以在“提案”部分添加一个实际问题。就目前而言,似乎没有提出任何实际问题,而且似乎需要进一步澄清,这就是为什么有人可能会否决它。
-
没有“建议”部分。 Stack Overflow 是一个问答网站。我已编辑您的帖子以使其更清晰。
-
也许我不清楚:我没有告诉您将帖子移动到任何地方。我告诉你在你的帖子中编辑
## Proposal之后的文本。我已经为你做到了。无需采取进一步行动。
标签: linux bash go system-calls