Linux编程实现一个简单的编程实现一个简单的Shell
在linux中实现一个简单的命令解释程序,功能要求:
1)同时支持内部命令和外部命令,内部命令支持两个(cd、exit)
2)支持后台命令
首先解释一下上面的两个要求,实际上是三种情况:
1.如果是内部命令cd和exit,那么在父进程里直接分析执行
2.如果是外部命令,则创建一个子进程,再由子进程从path环境变量中查找相应的文件执行,此时shell会阻塞,等待子进
程结束。
3.如果是后台命令,输入以&结束,它跟外部命令的大区别是,后台命令创建了子进程后不需要调用wait(*status),也是不
用等待子进程结束,这样变成了后台进程。
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <string.h>
#include <errno.h>
#define MAXLEN 80
char cwd[MAXLEN];//当前工作目录
char *prompt;
char* parseCmd(char* cmd, char** argarr, int* argc)
{
enum states {S_START, S_INTOKEN, S_INQUOTES};
int numArgs = 0;//参数数目
int loop = 1;//循环标志
enum states state = S_START;//当前状态
int lastch;
while(loop)
{
switch(state)
{
case S_START:
if(*cmd == '"')
{
*argarr++ = cmd + 1;
numArgs++;
state = S_INQUOTES;
}
else if(*cmd == 0 || *cmd == ';')
loop = 0;
else if(*cmd <= ' ')//忽略ascii码表中的空格符及空格符前面的字符
*cmd = 0;
else
{
*argarr++ = cmd;
numArgs++;
state = S_INTOKEN;
}
break;
case S_INTOKEN:
if(*cmd == 0 || *cmd == ';')
loop = 0;
评论0