首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哪些程序使用高于2的文件描述符?

哪些程序使用高于2的文件描述符?
EN

Unix & Linux用户
提问于 2016-08-10 09:57:45
回答 1查看 1.7K关注 0票数 4

默认情况下,将打开标准文件描述符<= 2。程序可以在2之后写入或读取文件描述符,而无需使用open系统调用来获得这样的描述符。然后,该程序可以在它的手册中做广告,它正在使用哪些文件描述符,以及如何使用。为了利用这一点,POSIX可以打开一个文件,并将该文件分配给带有exec内置的描述符。之后,shell将启动使用该描述符和文件的程序。

这样做的一个原因是,如果程序希望有多个输出或输入文件,并且不希望将它们指定为命令行参数。如果只有一个文件,您可以重定向一个标准的文件描述符。

我从来没有见过一个通用的程序,会在它的手册上刊登这样的广告。这是在实践中发生的吗?有人听说过这样的事吗?

是的,我确实想呆在POSIX世界里--所以不要仅仅是内置的。我只想知道是否有这样的程序,而不是一个内置的外壳。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2016-08-10 19:14:08

当您在<(...)>(...)中使用进程替换时,bash将在任意的高文件描述符上向其他程序打开管道(我认为它以前从10开始计数,现在从63开始计数),并在第一个程序的命令行中传递名称为/dev/fd/N。这不是POSIX,但其他shell也支持它(这是一个ksh88特性)。

不过,这并不完全是您正在运行的程序的一个特性,它只会看到/dev/fd/N并尝试像普通文件一样打开它。

  • Autoconf手册提到了一些历史记录:一些古老的系统保留了一些文件描述符。按照惯例,当您登录到第八版(1985年)到第十版Unix (1989年)时,文件描述符3被打开给/dev/tty。文件描述符4在星型/Kubota(大约1990年)上有一个特殊用途,尽管我们现在已经不记得它是什么了。这两个系统都过时了,所以现在可以像对待任何其他文件描述符一样安全地对待文件描述符3和4。
  • 另外,当我在谷歌上搜索时,我发现了一个名为runit的程序,它将文件描述符4和5用于与日志旋转有关的某些目的。
  • 并引用svlogd手册页中的话:如果告诉svlogd处理最近的日志文件,(.)。svlogd还保存处理器写入文件描述符5的任何输出,并在下一次日志文件旋转中运行处理器时,使该输出在文件描述符4上可用。
票数 6
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/302516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档