stdout和/ dev / stdout之间的区别

时间:2015-06-11 12:28:13

标签: c linux bash shell filesystems

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'

请帮助了解其中的差异。

3 个答案:

答案 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.