完成一个minishell,其中可以实现简单的命令解释,以及重定向符号功能。
首先实现命令解释的思路:
- 获取用户输入内容
- 解析获取到的内容,得到命令及其参数
- 创建子进程
- 程序替换
shell中处理外部命令是通过创建子进程后程序替换完成功能,还有一部分命令是内建命令,也就是shell自身实现的功能,比如cd。
重定向实现思路:
- 解析字符串,重定向符号前是命令及参数,后面是文件名称
- 在子进程程序替换之前,按照解析出的重定向方式打开文件
- 使用dup2(int oldfd,int newfd);将oldfd描述符对应的描述信息向newfd中拷贝一份
后面就进行程序替换即可。
具体代码如下:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <string.h>
#include <fcntl.h>
#include <ctype.h>
int main()
{
while(1)
{
printf("[wg@minihost ~]$");
fflush(stdout);
char tmp[1024] = {0};
scanf("%[^\n]%*c",tmp);
printf("[%s]\n",tmp);
//需要将整体字符串解析成 命令名称+参数 的形式
char* ptr=