1 回答
TA贡献1852条经验 获得超7个赞
我想我需要有一个协议,在该协议中我发送一个 \n 以使输入工作,同时在阅读时丢弃它
不,你没有。只有当它绑定到终端时,标准输入才会被行缓冲。您可以运行您的程序prog < /dev/zero或cat file | prog.
bufio.NewWriter(os.Stdin).Write(p)
您可能不想写入stdin. 有关详细信息,请参阅“写入标准输入和读取标准输出”。
好吧,我不太清楚你想要达到的目标。我假设您只想从stdin固定大小的块中读取数据。为此使用io.ReadFull。或者,如果您想使用缓冲区,您可以使用Reader.Peek或Scanner来确保特定数量的字节可用。我已经更改了您的程序以演示以下用法io.ReadFull:
package main
import (
"fmt"
"io"
"time"
)
func main() {
input, output := io.Pipe()
go func() {
defer output.Close()
for _, m := range []byte("123456") {
output.Write([]byte{m})
time.Sleep(time.Second)
}
}()
message := make([]byte, 3)
_, err := io.ReadFull(input, message)
for err == nil {
fmt.Println(string(message))
_, err = io.ReadFull(input, message)
}
if err != io.EOF {
panic(err)
}
}
您可以轻松地将其拆分为两个程序并以这种方式进行测试。只需更改input为os.Stdin.
- 1 回答
- 0 关注
- 540 浏览
添加回答
举报