Golang如何实现stdin / stdout / stderr

时间:2016-08-04 16:54:32

标签: go stdin

我做了一个能够从命令行解析输入的程序。它通过std.in很好地运作。但是,当我查阅官方文件以便进一步学习时,我发现有太多东西给我。

var (
   Stdin = NewFile(uintptr(syscall.Stdin), "/dev/stdin")
)

我单独阅读func NewFiletype uintptyPackage syscall的文档,但无法弄清楚整体。另外,我也不知道/dev/stdin的含义。

除了go之外,我从未学过另一种静态编程语言。我怎么能意识到stdin的魔力?

1 个答案:

答案 0 :(得分:6)

syscall包中,Stdin只是数字0:

var (
        Stdin  = 0
        Stdout = 1
        Stderr = 2
)

这只是因为posix标准是stdin附加到第一个文件描述符,0

由于stdin始终存在且默认打开,os.NewFile只能将此文件描述符转换为os.File,并使用标准Linux文件路径“/ dev / stdin”作为易于识别的文件名。