首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关闭指定的文件描述符

关闭指定的文件描述符
EN

Stack Overflow用户
提问于 2016-05-31 18:24:55
回答 1查看 1.1K关注 0票数 2

我创建了这样一个命名的文件描述符

代码语言:javascript
复制
exec {gui_outfd}<>$gui_outpipe

现在我要关闭它:

代码语言:javascript
复制
exec {gui_outfd}>&-

这会产生

代码语言:javascript
复制
./game.sh: line 338: read: 14: invalid file descriptor: Bad file descriptor

我做错了什么?

在我的脚本中编辑第330-357行:

代码语言:javascript
复制
run_gui & gui_pid=$!
run_ai1 & ai1_pid=$!
exec {gui_outfd}>&-
while true; do
    echo "Started the loop"
    while true; do
        eval $(isalive2 $gui_pid $ai1_pid)
        read -u $ai1_outfd line || echo "Nothing read"
        if [[ $line ]]; then # line 338
            echo "Piping to GUI $line"
            echo "$line" >&$gui_infd
            if [[ "$line" == "END_TURN" ]]; then
                break
            fi
        fi
    done
    echo TURNCHANGED
    while true; do
        read -u $gui_outfd line || echo "nothing read"
        if [[ $line ]]; then
            echo "Piping to AI $line"
            echo "$line" >&$ai1_infd
            if [[ "$line" == "END_TURN" ]]; then
                break
            fi
        fi
    done
done

和所谓的职能:

代码语言:javascript
复制
run_gui()
{
    exec "$GAME_BIN" $args <&$gui_infd >&$gui_outfd
}

run_ai1()
{
    exec "$ai1" <&$ai1_infd >&$ai1_outfd
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-31 21:58:57

结合..。

主管{gui_outfd}>&-

..。在没有进一步的重定向或修改$gui_outfd的情况下

阅读-u $gui_outfd行\回显“无读取”

..。就像你说的那样注定要失败。

一旦一个进程关闭了一个文件描述符,该进程就不能使用该FD,除非将它与一个新的打开的文件描述相关联。这与任何可能打开相同文件的其他进程无关,也与这些进程与关闭其FD的进程之间的关系无关。

不要关闭FD,直到你完成它。

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

https://stackoverflow.com/questions/37553041

复制
相关文章

相似问题

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