bala@hp:~$ echo "Hello World" > stdout
bala@hp:~$ cat stdout
Hello World
bala@hp:~$ echo "Hello World" > /dev/stdout
Hello World
请澄清stdout
和/dev/stdout
注意:
bala@hp:~$ file stdout
stdout: ASCII text
bala@hp:~$ file /dev/stdout
/dev/stdout: symbolic link to `/proc/self/fd/1'
请帮助了解其中的差异。
答案 0 :(得分:8)
在你的情况下
stdout
是一个普通文件,在您运行命令的同一目录中创建。
因此,当您将echo
的输出重定向到stdout
时,会将其写入文件。您需要执行cat
(例如,在此处),以便在此处查看屏幕上的内容。
/dev/stdout
是一个device file,它是/proc/self/fd/1
的链接,这意味着它指的是当前进程持有的文件描述符1。
因此,当您将echo
的输出重定向到/dev/stdout
时,它会直接发送到标准输出(屏幕)。
答案 1 :(得分:6)
map[string] string
本身只是当前目录中的一个文件,与type Body struct {
Name string
Email string
}
body := Body{}
err := json.NewDecoder( c.Request.Body ).Decode( &body )
if err != nil {
c.String( http.StatusServiceUnavailable, err.Error() )
return
}
没有区别。除了将标准输出重定向到它之外,它与过程的标准输出无关。
另一方面,{
"param1": "1",
"param2": "1",
"param3": "1",
"param4": "1"
}
是指向stdout
文件系统上的特殊文件的链接,该文件表示使用它 1 的进程的文件描述符1。 / p>
因此它与过程标准输出有非常真实的联系。
1 finances.txt
文件系统包含有关系统及其所有进程的各种奇妙信息(假设进程有权访问它们,它应该具有/dev/stdout
1}})。
答案 2 :(得分:3)
一个是普通文件,与任何其他普通文件没有区别,例如~/foobar.txt
。
另一个是符号链接(就像你可以用ln -s
创建的那个)到一个特殊的虚拟文件,代表当前进程中的文件描述符1.