os.Stdout 和 syscall.Stdout 有什么区别?

What is the difference between os.Stdout and 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 是整数常量。它是标准输出的文件描述符编号,这对低级系统调用很有用。

syscall.ForkExec 确实需要文件描述符编号...但不清楚您为什么使用它而不是 os/exec.Cmd,后者更直接。