默认情况下,将打开标准文件描述符<= 2。程序可以在2之后写入或读取文件描述符,而无需使用open系统调用来获得这样的描述符。然后,该程序可以在它的手册中做广告,它正在使用哪些文件描述符,以及如何使用。为了利用这一点,POSIX可以打开一个文件,并将该文件分配给带有exec内置的描述符。之后,shell将启动使用该描述符和文件的程序。
这样做的一个原因是,如果程序希望有多个输出或输入文件,并且不希望将它们指定为命令行参数。如果只有一个文件,您可以重定向一个标准的文件描述符。
我从来没有见过一个通用的程序,会在它的手册上刊登这样的广告。这是在实践中发生的吗?有人听说过这样的事吗?
是的,我确实想呆在POSIX世界里--所以不要仅仅是内置的。我只想知道是否有这样的程序,而不是一个内置的外壳。
发布于 2016-08-10 19:14:08
当您在<(...)或>(...)中使用进程替换时,bash将在任意的高文件描述符上向其他程序打开管道(我认为它以前从10开始计数,现在从63开始计数),并在第一个程序的命令行中传递名称为/dev/fd/N。这不是POSIX,但其他shell也支持它(这是一个ksh88特性)。
不过,这并不完全是您正在运行的程序的一个特性,它只会看到/dev/fd/N并尝试像普通文件一样打开它。
/dev/tty。文件描述符4在星型/Kubota(大约1990年)上有一个特殊用途,尽管我们现在已经不记得它是什么了。这两个系统都过时了,所以现在可以像对待任何其他文件描述符一样安全地对待文件描述符3和4。runit的程序,它将文件描述符4和5用于与日志旋转有关的某些目的。svlogd手册页中的话:如果告诉svlogd处理最近的日志文件,(.)。svlogd还保存处理器写入文件描述符5的任何输出,并在下一次日志文件旋转中运行处理器时,使该输出在文件描述符4上可用。https://unix.stackexchange.com/questions/302516
复制相似问题