⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 global.h

📁 大学操作系统课程实验:Linux下实现的一个shell解释器。能够比较完整完好地执行Linux下的普通命令、重定向命令、管道命令等多种命令。
💻 H
字号:
/******************************************************************************/

/*全局常量声明*/
#define PIPENUM 10
#define HISNUM 10
#define PARANUM 11
#define BUFSIZE 100
#define NO_PIPE -1

#define NO_IO -1
#define FD_READ 0
#define FD_WRITE 1

#define SIMPLE_CMD -1
#define REDIRECT_CMD 0
#define PIPE_CMD 1

/******************************************************************************/

/*全局结构声明*/

/**命令构造结构**/
typedef struct CmdStr
{
	char *cmd;
	char *filename;
	char *para[PARANUM];
	int io_flag;
}CmdStr;

/**历史记录存储结构**/
typedef struct HistoryRecord
{
	int start;
	int end;
	int p_len[HISNUM];
	CmdStr cList[HISNUM];
	CmdStr pList[HISNUM][PIPENUM];
}HistoryRecord;

/**jobs命令结点**/
typedef struct JobsNode
{
	pid_t pid;
	CmdStr cStr;
	char state[8];
	struct JobsNode *link;
}JobsNode;

/******************************************************************************/

/*全局变量声明*/
CmdStr cmdStr;
CmdStr pipeStr[PIPENUM];
HistoryRecord hRec;
JobsNode *head,*end;
char *envpath[10],buf[BUFSIZE],*input=NULL;
pid_t pid1=0;
int sig_flag=0,sig_z=0;
int cmd_flag=SIMPLE_CMD;					//普通命令为-1,重定向为0,管道为1
int io_flag=NO_IO;							//无重定向为-1,重写向读入为0,重定向写出为1
int is_back=0;								//是否为后台命令,是则为1,非则为0
int pipe_len=0;								//管道命令中含有的命令条数

/******************************************************************************/

/*声明程序中用到的函数*/

/**词法分析和语法**/
void lex();									//词法分析器
void yacc();								//语法分析器

/**工具函数**/
void init();								//初始化环境变量
void getEnvironment(int,char *);			//初始化查找路径
int getLine(int,char *);					//读取一行

void printCmd(CmdStr);						//根据命令结构打印一条命令
void mallocSpace(CmdStr *);					//为命令结构体中相应字段分配空间
void freeSpace(CmdStr *);					//释放命令结构体占用的空间

int isFounded(char *);						//查找命令
void setFlag();								//将标志位置1
void addHistory(CmdStr);					//记录history命令
void addNode(CmdStr,int);					//向jobs命令的链表中增加节点
void delNode(int,siginfo_t *);				//从jobs命令的链表中删除节点

/**命令解析**/
void redirect();							//重定向命令的处理
int pipel();								//管道命令的处理
void history_cmd();							//显示history命令
void cd_cmd(char *);						//处理cd命令
void jobs_cmd();							//处理jobs命令
void bg_cmd(int);							//处理bg命令
void fg_cmd(int);							//处理fg命令
void ctrl_z_cmd();							//处理用户按下ctrl+z命令

/******************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -