首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否指定文件描述符编号?

是否指定文件描述符编号?
EN

Stack Overflow用户
提问于 2010-08-06 23:02:07
回答 3查看 3.5K关注 0票数 7

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

代码语言:javascript
复制
exec 5>&1

(我想我可以通过阅读bash源码找到答案…)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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的值定义要关闭的文件描述符。

例如

代码语言:javascript
复制
#!/bin/bash

exec {NEW_STDOUT}>&1
echo "Hello" >&$NEW_STDOUT
exec {NEW_STDOUT}>&-
票数 4
EN

Stack Overflow用户

发布于 2010-08-06 23:05:29

请参阅dup2 Unix系统调用。

票数 3
EN

Stack Overflow用户

发布于 2010-08-06 23:27:50

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3425021

复制
相关文章

相似问题

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