shell命令解释器资料

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)

相关文档
最新文档