<分区>
我正在尝试模拟命令行 shell。用户输入他们想要输入的 shell 命令,例如/bin/pwd
代码用于执行它。
缓冲区设置为读取固定数量的字符(例如 20 个)。
在用户输入超过 20 个字符的情况下,需要在 shell 再次循环之前清除多余的字符。
我一直在尝试这样做:
int garbageCollector;
while ((garbageCollector = getchar()) != '\n' && garbageCollector != EOF);
但问题是 getChar()
要求您先输入一个字符。
有没有一种不需要用户输入任何东西来刷新标准输入的方法?
while (1) {
// Prompt user for input
ssize_t readIn = read(STDIN_FILENO, buffer, BUF_SIZE + 1);
if (readIn < 0) {
perror("read() failed");
return 2;
}
// Null-terminate and remove line return
buffer[readIn - 1] = '\0';
char program[strlen(buffer)];
strcpy(program, buffer);
printf("program is: %s\n", program);
// Flush stdin
int garbageCollector;
while ((garbageCollector = getchar()) != '\n' && garbageCollector != EOF);
// Create child process
child = fork();
if (child < 0) {
perror("fork() failed");
return 3;
}
// Start alarm that is triggered after timeout exceeded
// which then kills child process
signal(SIGALRM, killChild);
alarm(timeout);
if (child == 0) { // Child
char* av[] = { program, NULL };
execve(program, av, NULL);
} else { // Parent
wait(NULL);
alarm(0); // Reset alarm if program executed
}
memset(buffer, 0, BUF_SIZE); // Flush buffer
}