目前我正在使用一个在C中为Linux开发的shell,最近有人把我引向execlp,让我从shell中执行不同的程序。我目前在shell中实现的示例非常简单,执行shell,运行'date'命令,execlp启动'date',这就足够简单了,将日期打印到终端。本例中的问题是,尽管日期程序成功执行并打印到终端,但它会在shell提示后立即打印。我猜execlp返回日期太晚了,导致它在提示打印后出现。有没有办法避免“滞后”?sleep函数似乎适合这里,但我不知道如何在execlp中实现它。。有什么想法吗??
谢谢!

最佳答案

在发出提示之前,您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;
                }
             }
   }

关于c - 在execlp调用期间休眠以避免输出“滞后”?可能吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51106801/

10-11 19:14