linux 标准输出和/dev/标准输出之间的差异

k4ymrczo  于 2023-02-03  发布在  Linux
关注(0)|答案(3)|浏览(139)
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'

请帮助了解其中的区别。

rkkpypqq

rkkpypqq1#

就你而言

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

因此,当您将echo的输出重定向到stdout时,它将写入 file。您需要执行cat(例如,您在这里执行了此操作)才能在此处 * 在屏幕上 * 看到内容。

  • /dev/stdout是一个device file,它是到/proc/self/fd/1的链接,这意味着它引用的是当前进程持有的文件描述符1。

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

camsedfj

camsedfj2#

stdout本身只是当前目录中的一个文件,与finances.txt没有什么不同,它与进程的标准输出无关,只是将标准输出重定向到它。
另一方面,/dev/stdout是指向procfs文件系统上的特殊文件的链接,它表示使用it1的进程的文件描述符1。
因此,它与过程标准输出有着非常真实的联系。
1 procfs文件系统保存了关于系统及其所有进程的各种奇妙信息(假设一个进程有权访问这些信息,对于/proc/self,它应该有权访问这些信息)。

s3fp2yjn

s3fp2yjn3#

一个是普通文件,与其他普通文件没有区别,例如~/foobar.txt
另一个是指向特殊虚拟文件的符号链接(类似于可以使用ln -s创建的链接),该虚拟文件表示当前进程中的文件描述符1。

相关问题