我的理解是,当使用open()打开一个新文件时,无法控制操作系统分配的文件描述符(整数)。那么,如何在bash shell中使用如下命令指定特定的文件描述符
exec 5>&1(我想我可以通过阅读bash源码找到答案…)
发布于 2011-12-12 13:13:49
我相信你是对的,有时文件描述符可能已经在使用了。这是我从http://tldp.org/LDP/abs/html/io-redirection.html#FTN.AEN17716那里得到的
“使用文件描述符5可能会导致问题。当Bash创建子进程时,就像使用exec一样,子进程继承fd 5(参见切特·拉米的存档电子邮件SUBJECT: RE: File descriptor 5 is held open)。最好不要使用这个特定的fd。”
此问题的解决方案在bash手册的第3.6节第2段中指定。
可以在文件描述符号之前的每个重定向可以改为由
{varname}__形式的单词来代替。在这种情况下,对于除>&-和<&-之外的每个重定向操作符,shell将分配一个大于10的文件描述符,并将其分配给{varname}。如果>&-或<&-前面是{ varname },则varname的值定义要关闭的文件描述符。
例如
#!/bin/bash
exec {NEW_STDOUT}>&1
echo "Hello" >&$NEW_STDOUT
exec {NEW_STDOUT}>&-发布于 2010-08-06 23:05:29
请参阅dup2 Unix系统调用。
发布于 2010-08-06 23:27:50
此外,文件描述符是按顺序分配的,所以如果您知道0、1、2、...、n已经打开,但没有一个被关闭,那么下一个将是n+1。
https://stackoverflow.com/questions/3425021
复制相似问题