Answers:
的全部四个/dev/fd/0
,/dev/stdin
,/proc/self/fd/0
和/dev/pts/2
是文件名,因为是/////dev/../dev/fd//0
,/bin/sh
,/etc/fstab
,/fioejfoeijf
,等所有但最后一个例子可能是您的机器上的现有文件的名称。文件名是可以在文件系统上指定文件的字符串。在Linux下,任何不包含空字节且最长为4096字节的字符串都是有效的文件名。其中许多名称是等效的,例如/bin/sh
,等效于///bin/sh
,/bin/../bin/sh
(假定/bin
是现有目录),等等。到目前为止,我提供的所有示例都是绝对文件名;还有一些相对的文件名,它们不以a开头,/
其含义取决于当前目录。
围绕文件名的术语不是通用的。有时,“文件名”是指文件的完整路径,有时是指目录条目的名称。POSIX术语是目录条目的名称为“ filename ”或“ pathname component ”,而完整路径为“ pathname ”。
文件描述符指定特定进程中的打开文件。内核为每个进程维护一个文件描述符表。文件描述符表中的每个条目都指示如果进程请求对文件描述符进行读取,写入和其他操作,该怎么办。
文件描述符可以对应于文件并具有关联的名称,但并非所有文件描述符都可以。对于这些文件,文件可以是常规文件,目录,设备文件或命名管道(也称为FIFO)(由创建的种类mkfifo
);一些系统还有其他可能性,例如Unix插座和门。没有关联的命名文件的文件描述符的例子包括管道(由管道创建的管道pipe
)和网络套接字。
/dev/fd/0
,/dev/stdin
并/proc/self/fd/0
在文件名(全部当量)用特殊的意思:他们哪个文件通过文件描述符0。当一个进程打开这些当前访问的所有候,内核副本索引为0的条目的文件描述符描述符表到一个新的描述符。打开这些文件中的任何一个都等同于调用dup(0)
。命名文件是一种间接使进程使用其已打开文件之一而不是打开新文件的方法。它们对于在程序的命令行中传递有用,该程序期望文件名在此打开。
Filename只是文件系统上文件的名称,仅此而已-它只是一个字符串。
文件描述符是某种对象,可以从中读取和/或写入。即已打开并准备好文件。不仅有文件描述符-stdin,stdout和stderr也是描述符,您可以使用与文件绝对相同的功能来读写文件(除了例如不能搜索)。不是文件的描述符的其他示例包括:命名管道和网络套接字。
在代码中,文件描述符是一个变量,它指向内核中某个表示文件对象的指针。
例如,/ dev / fd / 0,/ dev / stdin,/ proc / self / fd / 0都是到/ dev / pts / 2的链接。这是四个文件描述符还是文件名?
这些都是伪文件,对于某些脚本或程序可能有用。您可以打开它们,open()将返回一个文件描述符。