我只是在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,它会使输出看起来非常愚蠢。有没有一种优雅的方法来解决这个问题?谢谢。提前时间。