спать во время вызова execlp, чтобы избежать вывода 'лаг'? Является ли это возможным? - PullRequest
0 голосов
/ 29 июня 2018

В настоящее время я использую оболочку, которую я разрабатываю для Linux на C, и кто-то недавно указал мне на execlp для выполнения отдельных программ из моей оболочки. Пример, который я реализовал в оболочке, в настоящее время очень прост: запустите оболочку, запустите команду date и execlp запустит date, которая достаточно просто выводит дату на терминал. проблема в этом случае заключается в том, что хотя программа даты успешно выполняется и печатает на терминал, она печатает сразу после приглашения оболочки. Я предполагаю, что execlp возвращает дату слишком поздно, вызывая ее появление после быстрой печати. Есть ли способ избежать «отставания»? Кажется, что спящая функция подходит здесь, но я бы не знал, как ее реализовать вокруг execlp. Любые идеи здесь ??

Спасибо!

1 Ответ

0 голосов
/ 29 июня 2018

Вы wait() для вашего дочернего процесса, чтобы вернуться до выдачи приглашения. Приведенный ниже код упрощает то, что необходимо сделать, но дает вам общее представление:

   switch (pid = fork()) {
   case 0:   execlp("date", "date", (char *)NULL);
             exit(EXIT_FAILURE);
   case -1:  perror("fork");
             break;
   default:  while ((r = waitpid(pid, &status, 0)) == (pid_t)-1) {
                if (errno != EINTR) {
                    perror("wait");
                    break;
                }
             }
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...