c语言编写shell程序myshell
时间: 2023-07-26 13:39:13 浏览: 23
好的,我可以为您提供一些基本的思路和参考代码。
首先,您需要了解一些基本的 shell 命令和操作符,如 cd、ls、echo、管道符、重定向等。
然后,您可以按照以下步骤编写您的 myshell:
1. 读取用户输入的命令。可以使用 fgets 函数来读取用户输入的命令。
2. 解析用户输入的命令。将用户输入的命令按照空格分割成若干个参数,并判断是否存在管道符或重定向符号等特殊操作符。
3. 根据用户输入的命令,执行相应的操作。可以使用 exec 系列函数来执行命令,使用 fork 函数来创建子进程进行执行。
4. 等待子进程执行完毕,并输出执行结果。
下面是一个简单的 myshell 程序的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/wait.h>
#define MAX_CMD_LEN 1024
int main()
{
char cmd[MAX_CMD_LEN];
while (1) {
printf("myshell> ");
fgets(cmd, MAX_CMD_LEN, stdin);
cmd[strlen(cmd) - 1] = '\0'; // 去掉换行符
if (strcmp(cmd, "exit") == 0) {
break;
}
int pid = fork();
if (pid == -1) {
perror("fork");
exit(1);
} else if (pid == 0) {
char *argv[MAX_CMD_LEN], *token;
int argc = 0;
token = strtok(cmd, " ");
while (token != NULL) {
argv[argc++] = token;
token = strtok(NULL, " ");
}
argv[argc] = NULL;
execvp(argv[0], argv);
perror("execvp");
exit(1);
} else {
int status;
waitpid(pid, &status, 0);
}
}
return 0;
}
```
当用户输入 exit 命令时,程序会退出。如果用户输入其他命令,则会创建子进程执行该命令,并等待子进程结束。在子进程中,首先将用户输入的命令解析成若干个参数,然后调用 execvp 函数执行该命令。如果 execvp 函数返回,则说明执行失败,程序会输出错误信息并退出。
希望这个示例代码能够帮到您!
相关推荐















