stdout和/ dev/stdout之间的区别

Bal*_*esh 1 c linux filesystems bash shell

bala@hp:~$ echo "Hello World" > stdout
bala@hp:~$ cat stdout
Hello World

bala@hp:~$ echo "Hello World" > /dev/stdout
Hello World
Run Code Online (Sandbox Code Playgroud)

请澄清stdout和之间的区别/dev/stdout

注意 :

bala@hp:~$ file stdout
stdout: ASCII text

bala@hp:~$ file /dev/stdout
/dev/stdout: symbolic link to `/proc/self/fd/1'
Run Code Online (Sandbox Code Playgroud)

请帮助了解其中的差异.

Sou*_*osh 9

在你的情况下

  • stdout 是一个普通文件,在您运行命令的同一目录中创建.

    因此,当您将输出重定向echo到时stdout,会将其写入文件.您需要这样做cat(例如,在这里),以便此处查看屏幕上的内容.

  • /dev/stdout是一个设备文件,它是一个链接/proc/self/fd/1,这意味着它指的是当前进程持有的文件描述符1.

    因此,当您将输出重定向echo到时/dev/stdout,它会直接发送到标准输出(屏幕).


pax*_*blo 6

stdout它本身只是当前目录中的一个文件,没有什么不同finances.txt.除了将标准输出重定向到它之外,它与过程的标准输出无关.

另一方面,/dev/stdout是指向procfs文件系统上的特殊文件的链接,它表示使用它的进程的文件描述符1.

因此,它与过程标准输出有非常真实的联系.


1procfs文件系统拥有各种有关系统的所有进程奇妙的信息(假设一个进程的权限才能上,它应该有/proc/self).


Som*_*ude 5

一个是普通文件,与任何其他普通文件(例如~/foobar.txt.

另一个是ln -s到一个特殊虚拟文件的符号链接(就像你可以创建的那样),该文件代表当前进程中的文件描述符 1。