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 1024
 char 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;
 }

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

相关推荐

  1. linux之自主shell编写

    2024-01-20 08:22:06       13 阅读
  2. Linux Shell Script 编写入门

    2024-01-20 08:22:06       12 阅读

最近更新

  1. WebKit源代码探秘:深入理解其组织结构与组件

    2024-01-20 08:22:06       0 阅读
  2. 【回溯+双指针算法题记录】回文字符串汇总

    2024-01-20 08:22:06       0 阅读
  3. 2288. 价格减免

    2024-01-20 08:22:06       1 阅读
  4. Quartz 介绍

    2024-01-20 08:22:06       1 阅读
  5. Taro自定义实现本地路径转换为文件

    2024-01-20 08:22:06       1 阅读
  6. Python 类与对象:深入理解与应用

    2024-01-20 08:22:06       0 阅读

热门阅读

  1. Flink的两阶段提交是什么

    2024-01-20 08:22:06       32 阅读
  2. 自己配置vue项目

    2024-01-20 08:22:06       33 阅读
  3. Spring AOP学习

    2024-01-20 08:22:06       26 阅读
  4. springboot如何创建全局线程池

    2024-01-20 08:22:06       34 阅读
  5. python入门,文件的编码,读取,写入,追加

    2024-01-20 08:22:06       40 阅读
  6. django 中group by 以及sum count

    2024-01-20 08:22:06       39 阅读
  7. Webpack5入门到原理13:开发服务器&自动化

    2024-01-20 08:22:06       38 阅读
  8. Linux 常用命令分享与示例

    2024-01-20 08:22:06       19 阅读
  9. 解决更新Xcode 15.2后,下载 iOS_17 Simulator失败

    2024-01-20 08:22:06       29 阅读
  10. Apache Flink 1.15正式发布

    2024-01-20 08:22:06       34 阅读