首先贴上本文的实验代码地址:https://github.com/Ulov888/lab7
实验要求
为menu子系统设计接口,并写用户范例代码来实现原来的功能;
使用make和make clean来编译程序和清理自动生成的文件;
使menu子系统支持带参数的复杂命令,并在用户范例代码中自定义一个带参数的复杂令;
可以使用fgets函数获取命令行参数。
其实本次实验代码并没有什么大的改动,只是多了一个处理命令行参数的函数,和将编译命令统一写入makeFile
具体代码如下,在menu.c文件中添加了一个参数函数,一个命令行参数
int ExecuteMenu()
{
while(1)
{
int argc = 0;
char *argv[CMD_MAX_ARGV_LEN];
char cmd[CMD_MAX_LEN];
char *pcmd = NULL;
printf("Input a cmd number > ");
pcmd = fgets(cmd, CMD_MAX_LEN, stdin);
if (pcmd == NULL)
{
continue;
}
pcmd = strtok(pcmd, " ");
while (pcmd != NULL && argc < CMD_MAX_ARGV_LEN)
{
argv[argc] = pcmd;
argc++;
pcmd = strtok(NULL, " ");
}
if (argc == 1)
{
int len = strlen(argv[0]);
*(argv[0] + len - 1) = '\0';
}
tDataNode *p = FindCmd(head, argv[0]);
if( p == NULL)
{
printf("This is a wrong cmd!\n ");
continue;
}
printf("%s - %s\n", p->cmd, p->desc);
if(p->handler != NULL)
{
p->handler(argc, argv);
}
}
}
还有比较有意思的是makeFile的编写,将gcc命令和参数以及clean都保存下来,使用系统make指令对代码编译
最后贴上运行图: