重定向对文件描述符或文件句柄进行操作吗?

重定向对文件描述符或文件句柄进行操作吗?

https://www.gnu.org/s/bash/manual/html_node/Redirections.html

在执行命令之前,可以使用 shell 解释的特殊符号来重定向其输入和输出。重定向允许命令'文件句柄可以复制、打开、关闭、引用不同的文件,并且可以更改命令读取和写入的文件。也可以使用重定向来修改文件句柄在当前的 shell 执行环境中。

然而,链接中的以下文本显示重定向对文件描述符(整数)进行操作。

文件句柄和文件描述符是不同的。从https://en.wikipedia.org/wiki/File_descriptor#OverviewFILE,文件句柄是C标准库中的数据结构。文件描述符是 Unix 和类 Unix 操作系统中的对象。

bash手册中引用中的“文件句柄”是什么意思?

答案1

Bash 文档使用术语“文件句柄”作为“文件描述符”的同义词。

程序不需要使用 C 标准库进行 I/O。显然,如果他们这样做,他们可以使用从文件描述符之一fdopen()获取(指向)结构。FILE

答案2

(在Linux系统中)如果你写:

ls -l /proc/$$/fd

它将写入打开的 fd(文件描述符)列表:

lrwx------ 1 user user 64 dic  8 00:06 0 -> /dev/pts/12
lrwx------ 1 user user 64 dic  8 00:06 1 -> /dev/pts/12
lrwx------ 1 user user 64 dic  8 00:06 2 -> /dev/pts/12
lrwx------ 1 user user 64 dic  8 00:06 255 -> /dev/pts/12

那些是也称为“文件句柄”

如您所见,数字是 0,1,2。它们与 stdin(0)、stdout(1)、stderr(2) 相同。

因此,重定向适用于这些号码(如 >&2),并且可以创建一些新号码(如 >&18)。

这些文件描述符也可以通过其他一些旧名称访问,例如:/dev/stdout、/dev/fd1 或其他一些名称。

维基百科有一个合理的良好描述

相关内容