golang 接管系统的标准输出
https://pubs.opengroup.org/onlinepubs/009695399/functions/dup.html
nfd, err := syscall.Dup(syscall.Stdout)
if err != nil {
panic(err)
}
f, err := os.OpenFile("test.log", os.O_WRONLY|os.O_CREATE, 0755)
if err != nil {
panic(err)
}
if err := syscall.Dup2(int(f.Fd()), syscall.Stdout); err != nil {
panic(err)
}
fmt.Println("test1", nfd, f.Fd())
//if err := syscall.Dup2(nfd, syscall.Stdout); err != nil {
// panic(err)
//}
fmt.Println("test2", nfd, f.Fd())
ttyfd, err := os.OpenFile("/dev/tty", os.O_WRONLY|os.O_CREATE, 0755)
if err != nil {
panic(err)
}
if err := syscall.Dup2(int(ttyfd.Fd()), syscall.Stdout); err != nil {
panic(err)
}
fmt.Println("test3", nfd, f.Fd(), ttyfd.Fd())