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

标签 c unix

我读过系统函数在内部使用 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/

相关文章:

c++ - 一个 "attach"代码如何用于嵌入式技术?(例如,将计算器程序附加到计算器。)

打印当前目录中文件名的 C 实用程序 (Unix)

linux - 将 ksh 脚本从 unix 迁移到 linux

c - 如何将结构中的空指针分配给另一个结构?

c - 如何使用函数显示数组中的索引

c - 解释一下这种在数组中获取输入的方法

UNIX 僵尸和守护进程

c - printf 格式字符串最大宽度值(填充)%(??)d%n

为多个作者在管道中交错的 block ?

Unix: (pwd now: ~) 来自 cd 命令?