execl в C программировании - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть программа на Си. Я заметил, что вы не можете поместить в него 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);
}

Может ли кто-нибудь помочь мне, если есть способ обойти это или я делаю ошибку ???

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Все, что написано после execl, является мертвым кодом. Основная цель execl - повторно использовать текущую информацию о процессе для нового процесса для повышения производительности. Вы будете использовать общий доступ к той же структуре информации о процессе (pid, stack, heap и т. Д.) Текущего процесса, в котором выполняется execl.

0 голосов
/ 09 ноября 2018

Семейство функций exec не возвращается при успешном выполнении. Они заменяют запущенный процесс на тот, который exec изд. Если вы хотите запустить программу в дочернем процессе (с полным контролем, в отличие от system), вам нужно использовать fork + exec + wait (или, возможно, posix_spawn).

...