ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Linux编写简易shell

2026/8/14 5:06:47 拓冰建站 浏览量
Linux编写简易shell

思路:​


所以要写一个shell,需要循环以下过程:​

  1. 获取命令行
  2. 解析命令行
  3. 建立一个子进程(fork)
  4. 替换子进程(execvp)
  5. 父进程等待子进程退出(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;}

        以上就是本文的全部内容,如果对你有帮助,欢迎点赞收藏转发评论!