AIX(unix) 中 stdin、stdout、stderr 文件描述符的位置在哪里

AIX(unix) 中 stdin、stdout、stderr 文件描述符的位置在哪里

在我的 Linux 环境中,文件描述符位于 /dev/fd 上。

AIX(unix) 中 stdin、stdout、stderr 文件描述符的位置在哪里。

我找不到他们。

答案1

这个问题是基于对 proc 文件系统通用性的误解。实现此功能的系统(例如 Solaris 和 Linux)具有可用于编写脚本的特殊设备,包括/dev/fd后跟文件描述符(数字)。

对于 Solaris(以及某些 BSD,例如 MacOS、FreeBSD),/dev/fd是 下的虚拟文件夹/dev,而 Linux 使用符号链接进入与/proc您的进程 ID 匹配的(虚拟)文件夹。 proc 文件系统没有标准,详细信息将要不同。

BSD 不使用相同的方案:Solaris、MacOS 和 FreeBSD 使用stdinstdoutstderr到此/dev/fd文件夹的符号链接,而 NetBSD 和 OpenBSD 使用设备节点(具有相同的主/次编号)来执行此操作。但它们很相似。/dev/fd/proc(Solaris 支持,与 BSD 不同)是分开的。

检查 AIX 5.3 和 7.1 系统,它们确实实现了 proc 文件系统,但没有/dev/fd.然而,他们有一个虚拟文件系统/proc,在该文件系统下您可以找到当前的进程ID,并在是一个fd带有文件描述符的文件夹。

按照惯例,文件描述符被初始化为 0, 1, 2标准输入,标准输出,标准错误分别。

进一步阅读:

包含进程所有打开的文件描述符的文件。每个条目都是一个十进制数,对应于进程中打开的文件描述符。如果实体引用常规文件,则可以使用常规文件语义打开它。为了确保控制进程无法获得更大的访问权限,受控进程中除了自身的读/写打开模式之外,不存在任何文件访问模式。目录将显示为链接。尝试打开任何其他类型的条目都将失败(因此列出时将显示 0 权限)。

/dev/fd 功能由 Tom Duff 开发,出现在 Research Unix System 第 8 版中。 SVR4 和 4.3+BSD 支持。它不是 POSIX.1 的一部分。

答案2

这些是人工文件描述符,当然不需要进行处理,这解释了它们历史上不存在并且在某些系统上仍然不存在。

shell 根据您的 TTY 处理这些标准文件描述符。当 shell 启动时,它会调用isatty(),如果它是(TTY),它会自动打开其上的标准文件描述符。

相关内容