shell命令解释器资料
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
#include
#include
#include
#include
#include
char *stack[1000]={"/"} ;
int num=1;
extern char **environ;
/*
内装式shell命令的函数声明:
*/
int lsh_cd(char **args);
int lsh_help(char **args);
int lsh_exit(char **args);
int lsh_pushd(char **args);
int lsh_popd(char **args);
int lsh_dirs(char **args);
int lsh_redirect1(char **args);
int lsh_redirect2(char **args);
int lsh_redirect3(char **args);
int lsh_redirect4(char **args);
int lsh_export(char **args);
int lsh_echo(char **args);
/*
装入的命令列表,紧随其后的是相应的功能。*/
char *builtin_str[] = {
"cd",
"help",
"exit",
"pushd",
"popd",
"dirs",
"export",
"echo"
};
int (*builtin_func[]) (char **) = {
&lsh_cd,
&lsh_help,
&lsh_exit,
&lsh_pushd,
&lsh_popd,
&lsh_dirs,
&lsh_export,
&lsh_echo
};
int lsh_num_builtins() {
return sizeof(builtin_str) / sizeof(char *);
}
/* 安装在内部的函数实现。. */
/**
@brief Bultin command: change directory.
@param args List of args. args[0] is "cd". args[1] is the directory.
@return Always returns 1, to continue executing.
@brief Bultin命令:改变目录。
@param args参数列表。args[0]是“cd”。args[1]是目录。
@return总是返回1,继续执行。
*/
int lsh_cd(char **args)
{
if (args[1] == NULL) {
fprintf(stderr, "lsh: expected argument to \"cd\"\n");
} else {
if (chdir(args[1]) != 0) {
perror("lsh");
}
}
return 1;
}
/**
@brief内置命令:打印的帮助。
@param args参数列表。不检查。
@return总是返回1,继续执行。
*/
int lsh_help(char **args)
{
int i;
printf("Type program names and arguments, and hit enter.\n"); printf("The following are built in:\n");
for (i = 0; i < lsh_num_builtins(); i++) {
printf(" %s\n", builtin_str[i]);
}
printf("Use the man command for information on other programs.\n"); return 1;
}
/**
@brief内置命令:退出。
@param args参数列表。不检查。
@return总是返回0,终止执行。
*/
int lsh_exit(char **args)
{
return 0;
}
//pushd函数:
int lsh_pushd(char **args)
{
if(chdir(args[1]) != 0)
{
perror("lsh");
}
else
{
stack[num++]=get_current_dir_name();
int i=num-1;
while(i>=0)
{
printf("%s ",stack[i]);
i--;
}
printf("\n");
}
return 1;
}
//popd函数:
int lsh_popd(char **args)