在C语言中编写自己的shell - 在“睡眠”期间卡在用户输入上

时间:2015-11-23 00:57:04

标签: c shell sleep

我只是在C中编写一个shell而且我遇到了一个问题,这不会导致shell停止运行,但它确实让我感到烦恼。

使用fork()和exec()编写shell,一切都很完美。但是,当用户发送“sleep 5”命令时,我遇到了问题。

例如:

    $ smallsh
     : sleep 5



      (user presses enter 4 times during sleep)
     :::: (sleep is now done)

如果用户在sleep命令期间按Enter键,则提示符(:)将在同一行上打印。我不知道如何处理这个,所以任何想法都会很棒。

这是(精简)主要:

    #define MAX_LENGTH 2048
    int main()
    {
        char input[MAX_LENGTH];
        char **commands;
        do {   
          printf(": ");
          fgets(input, MAX_LENGTH, stdin);
          commands = parseCommand(input); //parser not included here
          if (strcmp(input, "\n") == 0) {
              ; //do nothing 
          } else {
              executeCommand(commands); 
          }
        } while (1);
        return 0;
     }

     //condensed executeCommand
     int executeCommand(char **args)
     {
         pid_t pid;
         int status;

         pid = fork();
         if (pid < 0) {
            perror("fork");
         } else if (pid == 0) {
            execvp(args[0], args);
            perror("execvp");
            exit(1);
         } else {
            waitpid(pid, &status, 0);
         }
        return 1;
     } 

睡眠将正确通过execvp并在功能上正常工作 - 它只是排队:并将它们全部打印在同一行。如果我在提示符(printf(“\ n:”))之前添加\ n,它会使输出看起来非常愚蠢。有没有一种优雅的方法来解决这个问题?谢谢。提前时间。

0 个答案:

没有答案