【问题标题】:close() after system() weird behavior在系统()奇怪的行为之后关闭()
【发布时间】:2013-05-13 20:36:43
【问题描述】:

我正在调用system("bash ../tools/bashScript \"This is an argument!\" &"),然后我在system 返回后直接调用close(socketFD),当然我读过system 的参数附加了&fork command,所以system 立即返回,我已经检查过了!

现在的问题是我不希望套接字在执行command 时保持连接,但最奇怪的是程序的工作流程仍在继续,close 有点被看到和忽视了一旦command 完成,close 就会生效!

我尝试在彼此之后调用close 两次,以确保删除socketFD 的每个副本(如果创建),仍然是同样的问题,老实说,我不知道为什么会调用close 但没有在command(bash 脚本)完成之前不会生效!

请指教!

【问题讨论】:

    标签: c sockets system


    【解决方案1】:

    我对你在做什么有点困惑,但system 实际上是fork 的薄包装。这意味着两个进程都有套接字描述符的副本*,并且只有一个“副本”被关闭。另一个持续到执行system 命令的分叉进程也终止。

    为什么不在调用system 之前关闭套接字?

    您也可以尝试在 dup'd 描述符上使用 shutdown,例如:

    shutdown(s,SHUT_RDWR);
    

    *通过fork 调用处理文件和套接字描述符的规则比“复制”要微妙一些,但这足以解释为什么它不适合你。

    【讨论】:

    • 我不能导致我必须在之后发送消息,system 在返回的不同函数中被调用,然后在 write 向套接字发送消息后调用 close,我也试过打电话给close 两次,还是同样的问题。
    • 不是这样的。您是否试图让客户端挂起套接字?
    • 是的,我想关闭连接,我正在尝试你现在所说的。
    • 好的,我刚刚用一些可以在父进程中工作的代码更新了我的答案(即,在调用system 之后)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    • 2021-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多