#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main () {
while (1) {
printf("[admin@localhost]$ ");
fflush(stdout);
char buf[1024] = {0};
if (scanf("%[^\n]%*c", buf) != 1) {
getchar();
}
//解析流程: 取出空白字符, 获取程序名称和参数
char *argv[32];
int argc = 0;
char *ptr = buf;
while (*ptr != '\0') {
//当前位置非空白字符
if (!isspace(*ptr)) {
argv[argc++] = ptr;
while (!isspace(*ptr) && *ptr != '\0') {
ptr++;
}
} else {
*ptr = '\0';
ptr++;
}
}
argv[argc] = NULL;
int pid = fork();
if (pid < 0) {
exit(-1);
} else if (pid == 0) {
execvp(argv[0], argv);
//防止子进程替换失败
exit(0);
}
wait(NULL);
}
return 0;
}
minishell的重定向实现(程序替换)
最新推荐文章于 2019-06-09 00:45:59 发布