课程来源: 【网易云课堂昵称:风清扬pty + 《软件工程(C编码实践篇)》MOOC课程作业http://mooc.study.163.com/course/USTC-1000002006 】
一、实验目的
- 给Linktable增加Callback方式的接口;
- 进一步改进Linktable的Callback方式的接口;
- 用callback函数实现的多态浅析。
- 信息隐藏
二、实验要求和内容
- 给lab5-1.tar.gz(在实验楼Linux虚拟机环境下~/se_files/目录下)找bug,quit命令无法运行的bug;
- 将lab5-1.tar.gz中的代码(即解压后lab5.1/目录下的源文件)直接放到Code/shiyanlou_cs122/lab5/目录下继续完成后面的实验内容;
- 利用callback函数参数使Linktable的查询接口更加通用;
- 注意接口的信息隐藏。
三、主要的程序代码段
1.quit命令的Bug解决
SearchLinkTableNode()函数
tLinkTableNode * SearchLinkTableNode(tLinkTable *pLinkTable, int Conditon(tLinkTableNode * pNode))
{
if(pLinkTable == NULL || Conditon == NULL)
{
return NULL;
}
tLinkTableNode * pNode = pLinkTable->pHead;
while(pNode != pLinkTable->pTail)
{
if(Conditon(pNode) == SUCCESS)
{
return pNode;
}
pNode = pNode->pNext;
}
return NULL;
}
发现遍历链表的循环语句while()条件结束的标志为找到表结尾,这就导致了程序在遍历到表结尾最后一个命令quit的时候,直接结束了,因此需要修改while语句结束的条件为pNode != NULL,即可。
2.利用callback函数参数使Linktable的查询接口更加通用
先将cmd字符串取消定义为全局变量,然后修改callback函数。
tLinkTableNode * SearchLinkTableNode(tLinkTable *pLinkTable, int Conditon(tLinkTableNode * pNode, void* args), void* args);
3.信息的隐藏
在linktable.c中定义Linktable结构体,而在linktable.h中只留下LinkTable结构的声明。
typedef struct LinkTable tLinkTable;
struct LinkTable
{
tLinkTableNode *pHead;
tLinkTableNode *pTail;
int SumOfNode;
pthread_mutex_t mutex;
};
四、实验的运行结果及分析
运行结果截图
五、实验的不足与总结
本次实验主要学会了如何callback函数的处理方式,以及如何做好信息隐藏,如何保证程序安全,收货的非常多。