我知道大多数设备都显示在/dev
目录中,但直到现在我才真正注意到其中有两个非常奇怪但又熟悉的名字......
我正在谈论的stdin@
是stdout@
那里:
这些是做什么用的?它们是 C 语言函数使用的吗?
答案1
这些文件实际上被称为stdin
和。添加的字符是 ,stdout
以告诉您它们是stderr
@
ls
符号链接.ls -l
将会揭示这些符号链接的目标是/proc/self/fd/0
、/proc/self/fd/1
和/proc/self/fd/2
。
/proc
是内核提供的虚拟文件系统,用于显示操作系统的信息。除其他信息外,还有类似/proc/1234
这样的目录,其中包含有关 ID 为 1234 的进程的信息。/proc/self
是指向该目录的符号链接,供任何访问该目录的进程使用(内核会向不同的进程返回不同的目标)。
/proc/self/fd
(也符号链接到/dev/fd
)包含进程打开的每个文件的一个条目。每个条目对应于一个文件描述符,并且是指向该文件的符号链接(如果可能的话 — 对于管道、套接字和已删除的文件,符号链接提供的信息对调试有用,但不指向可以通过名称重新打开的文件)。这些文件描述符与您使用 C 函数(例如open
、close
、dup
、read
、write
等)操作的文件描述符相同。它们不是由使用C 函数,它们是与相同对象交互的其他方式。
原因/dev/stdin
和朋友存在是,有时程序需要文件名,但您想告诉它使用已打开的文件(例如管道)。因此,您可以传递/dev/stdin
来告诉程序读取其标准输入。
进一步阅读: