gpt4 book ai didi

go - 是否可以通过关闭 src 来中断 io.Copy?

转载 作者:行者123 更新时间:2023-12-01 20:18:42 27 4
gpt4 key购买 nike

代码示例:

package main

import (
"io"
"os"
"os/signal"
"sync"
"syscall"
)

func main() {
sigintCh := make(chan os.Signal, 1)
signal.Notify(sigintCh, syscall.SIGINT, syscall.SIGTERM)

var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
io.Copy(os.Stdout, os.Stdin)
}()

<-sigintCh

os.Stdin.Close()

wg.Wait()
}
如果运行此示例并尝试通过 ^C 中断它等待任何输入并仅在向 stdin 发送某些内容后停止(例如,只需按 Enter)。
我希望关闭 Stdin 就像发送 EOF 一样,但它不起作用。

最佳答案

闭幕 os.Stdin会引起io.Copy返回错误 file already closed下次读取时(在 CTRL-C 之后,尝试按 Enter )。
File.Close 中所述文档:

Close closes the File, rendering it unusable for I/O.


您不能强制从 os.Stdin 返回 EOF通过关闭它(或任何其他方式)。相反,您需要包装 os.Stdin并实现您自己的 Read有条件返回 EOF 的方法,或在循环中读取有限数量的字节。
您可以在此 golang-nuts 上看到更多讨论和可能的解决方法。线。

关于go - 是否可以通过关闭 src 来中断 io.Copy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63789503/

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