gpt4 book ai didi

c - 在不使用 shell 的情况下在 C 中运行程序

转载 作者:太空宇宙 更新时间:2023-11-04 07:28:53 24 4
gpt4 key购买 nike

我正在尝试用 C 语言运行应用程序,但我发现唯一一种相当容易使用的方法是这样工作的:

system("command here");

它当然有效,但它真的很慢(尤其是当重复很多次时)。我只是想知道是否有一种方法可以 运行程序而不必与 shell 交互,比如 python's subprocess module .

我听说过execl ,我会使用它(当然,先 fork ing 它),但我想知道是否有更简单的方法不需要先 fork 。

编辑:我也想知道程序的返回码

最佳答案

我相信您已经知道,system 已经采用了 fork/exec 策略。我知道您想绕过 shell 并正在寻找一种简单的方法,我只是说您可以像在 中那样轻松地编写一个函数来包装 fork/exec 模式系统。事实上,这样做可能是最直接的。 Gabe 在评论中提到的替代方案是 posix_spawn

更快(但显然不鼓励)的替代方法是 vfork()/exec,但通常不鼓励这样做,并且在最新的 POSIX 标准中已过时。

4.3BSD; POSIX.1-2001 (but marked OBSOLETE). POSIX.1-2008 removes the specification of vfork().

它意味着立即后跟exec_exit。否则会出现各种奇怪的错误,因为虚拟内存页面和页表没有重复(子使用相同的数据/堆/堆栈段)。父进程/调用进程阻塞,直到子进程 exec_exit 为止。常规 fork 的现代实现具有写时复制语义,接近 vfork 的速度,没有 vfork 的潜在错误内存共享语义。

如果您想要进一步控制内存共享语义和进程继承,以及随之而来的潜在加速(并且在 Linux 上),请查看 clone() (系统调用 sys_clone() 的包装器)这是一些创建进程的系统调用将其工作委托(delegate)给的对象。请务必仔细梳理所有各种标志。

您可以使用 waitpid获取进程的退出状态。

关于c - 在不使用 shell 的情况下在 C 中运行程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15714690/

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