gpt4 book ai didi

c - Linux c 中的 execl 函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:08:14 25 4
gpt4 key购买 nike

我开始了 Linux 内部概念。在下面的程序中,为什么第二个 printf 没有被执行?

#include <unistd.h>
#include <stdio.h>

int main(void) {
printf("Before execl");
execl("/bin/ls", "ls", "-l", NULL);
printf("After execl");
return 0;
}

最佳答案

第二个printf未执行,因为 execl接管您的应用程序的进程并将其替换为新的指定进程。根据手册页:

The exec() family of functions replaces the current process image with a new process image. The functions described in this manual page are front-ends for execve(2). (See the manual page for execve(2) for further details about the replacement of the current process image.)

并且来自 execve(2)手册页:

execve() does not return on success, and the text, data, bss, and stack of the calling process are overwritten by that of the program loaded. If the current program is being ptraced, a SIGTRAP is sent to it after a successful execve().

如果你想让你的程序继续执行并显示第二个printf ,您必须调用 execl (或 exec 系列中的任何函数)在 fork 中 child 。 C标准库函数system()就是这样做的,你可以查看源代码here .

关于c - Linux c 中的 execl 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42264244/

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