一、實驗目的
給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;
};
4、實驗的運行結果及分析
運行結果截圖
5.實驗總結
此次實驗由於家裏出了點事是在荊州老家完成的,沒法當面找同學幫忙,只能線上詢問同學蒐集資料,收穫也是不錯的。。。。。