os.Stdout和syscall.Stdout有什么区别?
我一直在尝试使用 ForkExec() 但我无法完成这项工作,syscall.Stdout 和 os.Stdout 之间有区别吗?
这是我尝试运行的代码的一个小例子。
command := "/usr/bin/echo"
args := []string{"Hello there."}
attr := new(syscall.ProcAttr)
attr.Env = os.Environ()
attr.Files = []uintptr{uintptr(syscall.Stdin), uintptr(syscall.Stdout), uintptr(syscall.Stderr)}
pid , err := syscall.ForkExec(command, args, attr)
if err != nil {
log.Fatal(err)
}
fmt.Println(pid)
输出未显示在屏幕上。
非常感谢您的帮助。
回答
os.Stdout是一个*os.File。它适用于需要一个io.Writer或类似接口的go 函数。syscall.Stdout是一个整数常数。它是 stdout 的文件描述符编号,对于低级系统调用很有用。
syscall.ForkExec确实需要文件描述符编号......但目前还不清楚为什么要使用它而不是os/exec.Cmd哪个更直接。