“软件工程(C编码实践篇)”实验报告(六)
2016-03-04 00:00
211 查看
摘要: 实验六:将menu设计为可重用的子系统
将menu.c里的main函数改成ExcuteMenu()函数,讲重写InitMenuData(),用MenuConfig()函数实现原来InitMenuData()的功能。参考老师的代码实现。
mygetopt函数
实验代码
实验过程
(注释:mkfile 和mkdir 命令可以带-hXXX/-lXXX 例如 mkfile -hppp 意思就是调用mkfile函数 执行-h命令参数值为ppp )1 为menu子系统设计接口。
menu.hint MenuConfig(char *cmd, char *desc, int (*handler)());int ExcuteMenu();
将menu.c里的main函数改成ExcuteMenu()函数,讲重写InitMenuData(),用MenuConfig()函数实现原来InitMenuData()的功能。参考老师的代码实现。
2 完成Makefile
CC_PTHREAD_FLAGS = -lpthread CC_FLAGS = -cCC_OUTPUT_FLAGS = -o CC = gcc RM = rm RM_FLAGS = -f TARGET = m OBJS = link_table.o link_list.o business_logic_layer.o menu.o all: $(OBJS) $(CC) $(CC_OUTPUT_FLAGS) $(TARGET) $(OBJS) .c.o: $(CC) $(CC_FLAGS) $< clean: $(RM) $(RM_FLAGS) $(OBJS) $(TARGET) *.bak
3 使menu子系统支持带参数的命令,使用getopt函数
int executeMenu() { printf("Ctrl c to exit\n"); while(1) { int argc=0; char *argv[CMD_MAX_ARGV_NUM]; char cmd[CMD_LEN]; char *pcmd=NULL; printf("please input cmd >"); pcmd=fgets(cmd,CMD_LEN,stdin); if(pcmd==NULL) { continue; } pcmd=strtok(pcmd," "); while(pcmd!=NULL&&argc<CMD_MAX_ARGV_NUM) { argv[argc]=pcmd; argc++; pcmd=strtok(NULL," "); } if(argc==1) { int len=strlen(argv[0]); *(argv[0]+len-1)='\0'; } int i=business_find_cmd(argc,argv); if(i==FAIL) { continue; } } }
mygetopt函数
int myGetopt(int argc,char* argv[]) { int ch; while((ch=getopt(argc,argv,"h:l:"))!=-1) { switch(ch) { case 'h': printf("option h,name:%s",optarg); strcpy(argv[1],optarg); break; case 'l': printf("option l,name:%s",optarg); strcpy(argv[1],optarg); break; } return SUCCESS; } printf("wrong cmd\n"); executeMenu(); }
实验代码
相关文章推荐
- 什么是面向对象编程
- 微信公众号定位和盈利模式
- 用什么软件可以快速制作微信视频
- UI-Navigation 和 UITabBar Controller 标题问题
- Linux 下 命令行 mail 发邮件方法
- 使用AFNetworking框架遇到的一个经典bug的解决方案
- CentOS 6 安装 gearman 和它的 php 扩展
- 技术团队负责人应该具备怎样的能力
- Git 使用指南
- 百度地图给多个marker添加右键菜单(删除、更新)
- 百度地图给map添加右键菜单(判断是否为marker)
- Html.DropDownListFor() 二级联动 ($.getJSON)
- win7 64位mysql安装及navicat 解压版
- NuGet套件还原步骤(以vs2012为例)
- vs2010,vs2012注释快捷键
- 360网盘书籍分享
- oracle11g 创建id自增长监听器的步骤与问题
- mvc 分部视图(Partial)显示登陆前后变化以及Shared文件夹在解决方案资源管理器中没有显示的问题
- ModelState验证部分属性
- Gradle Dsl method not found:'android()'