7

我的理解是,在使用 open() 打开新文件时,无法控制操作系统分配的文件描述符(整数)。那么如何在 bash shell 中使用类似的命令分配特定的文件描述符

exec 5>&1

(我想我可以通过阅读 bash 资源来找出答案......)

4

3 回答 3

4

我相信您是对的,有时文件描述符可能已经在使用中。我从http://tldp.org/LDP/abs/html/io-redirection.html#FTN.AEN17716得到这个

“使用文件描述符 5 可能会导致问题。当 Bash 创建子进程时,与 exec 一样,子进程继承 fd 5(请参阅 Chet Ramey 的存档电子邮件,主题:RE:文件描述符 5 保持打开状态)。最好留下这个特定的fd 一个人。”

对此的解决方案在 bash 手册的第 3.6 节第 2 段中指定。

每个可能以文件描述符编号开头的重定向都可能以 形式的单词开头{varname}。在这种情况下,对于除 >&- 和 <&- 之外的每个重定向运算符,shell 将分配一个大于 10 的文件描述符并将其分配给 {varname}。如果 >&- 或 <&- 前面有 {varname},则 varname 的值定义要关闭的文件描述符。

例如

#!/bin/bash

exec {NEW_STDOUT}>&1
echo "Hello" >&$NEW_STDOUT
exec {NEW_STDOUT}>&-
于 2011-12-12T05:13:48.787 回答
3

请参阅dup2 Unix 系统调用。

于 2010-08-06T15:05:29.367 回答
1

此外,文件描述符是按顺序分配的,因此如果您知道 0、1、2、...、n 已经打开并且它们都没有关闭,那么下一个将是 n+1。

于 2010-08-06T15:27:50.453 回答