gpt4 book ai didi

c - C 中的系统函数如何工作

转载 作者:太空狗 更新时间:2023-10-29 15:48:59 24 4
gpt4 key购买 nike

我读过系统函数在内部使用 execl、fork 和 wait 函数。因此,我尝试在不使用它的情况下模拟系统的工作。但我无法实现相同的工作。

当我们使用系统函数调用程序时,下面的代码(在)系统()函数调用之后也会执行。所以为了模拟系统功能,我在下面写了这段代码:

int main()
{
printf("In controller Start: %d\n\n",getpid());
system("./prog1");
printf("Forking New Process %d\n\n",fork());
printf("Process Id: %d\n\n",getpid());
execl("./infinite",0);
printf("In controller End\n\n");
return 0;
}

在上面的代码中,运行“infinite”程序后,最后一行没有被打印出来。即 printf("In controller End\n\n");

在不使用系统函数的情况下,如何打印最后一行并执行“无限”程序。

如果有人能解释一下系统函数的逐步工作,比如系统首先调用哪个函数等等,那就太好了。

如果我们进行了一个简单的函数调用而不是 execl,为什么执行没有像它必须做的那样继续执行到最后一行。

脚注:-infinite:是使用 C 代码创建的二进制文件。

最佳答案

最后一行没有被打印出来,因为它从未被执行过。如果一切正常,execl 函数永远不会返回,而是用调用中的程序替换您的程序。

我强烈建议您阅读 fork 的手册页和 execl .


简而言之,fork将当前进程一分为二,根据是返回父进程还是子进程,返回不同。然后在子进程中执行 exec 调用,而父进程继续执行它想要的操作。然而, parent 必须 wait在子进程上完成,否则子进程将成为所谓的 "zombie" process .

在您的代码中,父进程子进程调用exec

关于c - C 中的系统函数如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16398688/

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