思路:
所以要写一个shell,需要循环以下过程:
- 获取命令行
- 解析命令行
- 建立一个子进程(fork)
- 替换子进程(execvp)
- 父进程等待子进程退出(wait)
实现代码:
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <fcntl.h>#define MAX_CMD 1024char command[MAX_CMD];int do_face(){memset(command, 0x00, MAX_CMD);printf("minishell$ ");fflush(stdout);if (scanf("%[^\n]%*c", command) == 0) {getchar();return -1; } return 0;}char **do_parse(char *buff){int argc = 0;static char *argv[32];char *ptr = buff;while(*ptr != '\0') {if (!isspace(*ptr)) {argv[argc++] = ptr;while((!isspace(*ptr)) && (*ptr) != '\0') {ptr++;}}else {while(isspace(*ptr)) {*ptr = '\0';ptr++;}}}argv[argc] = NULL;return argv;}int do_exec(char *buff){char **argv = {NULL};int pid = fork();if (pid == 0) {argv = do_parse(buff);if (argv[0] == NULL) {exit(-1);}execvp(argv[0], argv);}else {waitpid(pid, NULL, 0);}return 0;}int main(int argc, char *argv[]){while(1) {if (do_face() < 0)continue;do_exec(command);}return 0;}
以上就是本文的全部内容,如果对你有帮助,欢迎点赞收藏转发评论!