gpt4 book ai didi

系统()奇怪行为后关闭()

转载 作者:太空宇宙 更新时间:2023-11-03 23:30:38 24 4
gpt4 key购买 nike

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

现在的问题是我不希望套接字在执行命令时保持连接状态,但最奇怪的是程序的工作流程继续进行并且关闭 在某种程度上被看到和忽略了,一旦 command 完成,close 就会生效!

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

请指教!

最佳答案

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

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

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

shutdown(s,SHUT_RDWR);

*关于通过 fork 调用发生在文件和套接字描述符上的事情的规则比“复制”更微妙一些,但这足以解释为什么它不适合你。

关于系统()奇怪行为后关闭(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16530671/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com