Golang 如何实现 stdin/stdout/stderr
How Golang implement stdin/stdout/stderr
我做了一个能够解析命令行输入的小程序。它通过 std.in
运行良好。然而,当我查阅官方文档进一步学习时,我发现对我来说太多了。
var (
Stdin = NewFile(uintptr(syscall.Stdin), "/dev/stdin")
)
我分别看了func NewFile
、type uintpty
、Package syscall
的文档,没看懂全文。另外,我也不知道/dev/stdin
是什么意思。
除了go
,我从未学过另一种静态编程语言。 stdin
的神奇之处,我要如何领悟?
来自 syscall
包,标准输入只是数字 0:
var (
Stdin = 0
Stdout = 1
Stderr = 2
)
这仅仅是因为 posix 标准是 stdin 附加到第一个文件描述符 0。
由于 stdin 始终存在并默认打开,os.NewFile
可以将此文件描述符转换为 os.File
,并使用标准 Linux 文件路径“/dev/stdin " 作为一个易于识别的文件名。
我做了一个能够解析命令行输入的小程序。它通过 std.in
运行良好。然而,当我查阅官方文档进一步学习时,我发现对我来说太多了。
var (
Stdin = NewFile(uintptr(syscall.Stdin), "/dev/stdin")
)
我分别看了func NewFile
、type uintpty
、Package syscall
的文档,没看懂全文。另外,我也不知道/dev/stdin
是什么意思。
除了go
,我从未学过另一种静态编程语言。 stdin
的神奇之处,我要如何领悟?
来自 syscall
包,标准输入只是数字 0:
var (
Stdin = 0
Stdout = 1
Stderr = 2
)
这仅仅是因为 posix 标准是 stdin 附加到第一个文件描述符 0。
由于 stdin 始终存在并默认打开,os.NewFile
可以将此文件描述符转换为 os.File
,并使用标准 Linux 文件路径“/dev/stdin " 作为一个易于识别的文件名。