-1

我有一个 C 程序。我注意到你不能在里面放 2 个 execl。

编码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>

int main()

{
      pid_t fork(void);

      int system(const char *command);

      execl("/bin/sh", "sh", "-c", "kdialog --warningcontinuecancel 
      \"Make sure to include: \n \n 1. py_lcd folder \n 2. 4x20 
      Raspberry Pi LCD Display \n 3. Python 2.7.12 to be installed \n 
      \n If you are missing something, kill the program process and 
      get them.\"", (char *) 0);

      sleep(1);

      execl("/bin/sh", "sh", "-c", "kdialog --msgbox \"Setting up files...\" --title \"Installing...\"", (char *) 0);
      return(0);
}

如果有办法绕过这个或者我犯了错误,有人可以帮助我吗???

4

3 回答 3

4

函数族exec成功后不会返回。他们用正在编辑的进程替换正在运行的进程exec。如果你想在子进程中运行程序(完全控制,不像system),你需要使用fork++ (或者也许exec)。waitposix_spawn

于 2018-11-09T05:04:05.657 回答
1

在 execl 之后写的任何东西都是死代码。execl 的主要目的是将当前进程信息重新用于新进程以提高性能。您将使用与执行 execl 的当前进程共享相同的进程信息结构(pid、堆栈、堆等)。

于 2018-11-09T05:25:19.177 回答
0

我自己找到了答案。有一个 system() 命令的工作原理完全相同,但您可以将其插入代码中的任何位置而不会出现问题

于 2020-06-25T22:26:50.317 回答