用c语言模仿linux的shell写一个程序
时间: 2024-10-08 11:13:25 浏览: 44
在C语言中模仿Linux shell编写一个简单的命令解释器程序,通常需要实现基本的命令解析、参数处理以及一些常见的操作。这是一个简化的示例,展示了如何创建一个接收输入并执行内部简单命令的程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 模拟简单命令结构
typedef struct {
char *name;
void (*execute)(char **args);
} Command;
// 假设我们有三个简单的命令:echo、help 和 exit
Command commands[] = {
{"echo", (void (*)(char **))echo},
{"help", (void (*)(char **))help},
{"exit", (void (*)(char **))exit, // 注意,exit不是一个真正的命令,这里只是为了演示
NULL, // 参数计数
"终止程序"}
};
int parse_and_execute(char *input) {
char **cmd_args = strsplit(input, " ");
if (!cmd_args || !*cmd_args) return -1; // 输入无效
for (size_t i = 0; commands[i].name; ++i) {
if (!strcmp(cmd_args[0], commands[i].name)) {
commands[i].execute(cmd_args);
free(cmd_args); // 释放内存
return 0;
}
}
printf("未知命令 '%s'\n", cmd_args[0]);
free(cmd_args);
return -1;
}
void echo(char **args) {
printf("Command: %s\n", args[0]);
printf("Arguments: ", args[0]);
for (int i = 1; args[i]; ++i) {
printf("%s ", args[i]);
}
printf("\n");
}
void help() {
printf("可用命令:\n");
for (const Command *cmd = commands; cmd->name; ++cmd) {
printf("%s - %s\n", cmd->name, cmd->description);
}
}
char **strsplit(char *str, const char *delim) {
// 实现字符串分割的部分省略...
// 这部分将根据指定的分隔符返回一个动态分配的数组
}
int main() {
char input[100];
while (fgets(input, sizeof(input), stdin)) {
if (parse_and_execute(input)) break; // 如果解析失败则退出
}
return 0;
}
```
这个程序只是一个基础示例,实际的shell需要更复杂的输入处理、错误处理以及支持更多的系统调用。
阅读全文