dup2/dup
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())
作者:百里求一
出处:http://www.cnblogs.com/bergus/
我的语雀: https://www.yuque.com/barry.bai
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。