#define _GNU_SOURCE #include<stdio.h> #include<string.h> #include<unistd.h> #include<stdlib.h> #include<sys/wait.h> #include<sys/types.h> #define MAX_SIZE 1024 char* path[MAX_SIZE] = { NULL }; // 执行命令 void execute(char* argv[]) { // 退出shell,此处为并行,不能直接 exit if (strcmp(argv[0], "exit") == 0) { fprintf(stderr, "An error has occurred\n"); } else if (strcmp(argv[0], "cd") == 0) { // cd 命令,后面刚好有一个参数可跳转,否则为错误 if (argv[1] != NULL && argv[2] == NULL) { chdir(argv[1]); } else { fprintf(stderr, "An error has occurred\n"); } } else if (strcmp(argv[0], "path") == 0) { // path for (int i = 0; i < MAX_SIZE; i++) { path[i] = NULL; } int k = 1; while (argv[k] != NULL) { path[k - 1] = argv[k]; k++; } } else { int flag = 0, index = 0; char tp[MAX_SIZE];
【无标题】操作系统
最新推荐文章于 2024-09-06 22:05:33 发布
这是一个用C语言实现的简易命令行解释器,能够处理包括`exit`、`cd`和`path`在内的命令,同时支持命令重定向。程序通过读取用户输入或批处理文件中的命令,并进行解析和执行,遇到`&`符号时会并行执行多个命令。通过`access()`函数检查命令是否存在,使用`fork()`和`execvp()`来启动子进程执行命令。当遇到`>`或`>>`时,程序会进行重定向操作,根据标志决定是覆盖还是追加输出。
摘要由CSDN通过智能技术生成