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())
posted @ 2020-06-09 15:57  白云辉  阅读(266)  评论(0编辑  收藏  举报