//=============================================================
// 文件名称:usrlist.c
// 功能描述:通用链表修改成的myUsrList链表, **注释**部分为要注意修改的地方
//
//
//
//包含文件:usrlist.h lnklst.h
// 维护记录:2009-05-08 V1.1 by lijian
//=============================================================
#include
#include
#include
#include
#include
#include
#include “lnklst.h”
#include “usrlist.h”
//===============================================================================
static PUSERINFO myUsrList = NULL;//链表头在这里定义
static unsigned int count;
//========================================================================================
//函数名称:delUsrEx(PUSERINFO usr)
//功能描述:释放节点所占用的堆内存空间
//函数参数:usr要释放的节点指针
//返 回 值:
//===========================================================================================
static void delUsrEx(PUSERINFO usr)
{
if(usr->usrname)
free(usr->usrname);
if(usr->hostname)
free(usr->hostname);
if(usr->ipaddr)
free(usr->ipaddr);
free(usr);
}
//==========================================================================================
//函数名称:destroyUsrList(void)
//功能描述:链表初始化,所有内存空间清0
//函数参数:void
//返回值:
//=============================================================================================
static void destroyUsrList(void)
{
PUSERINFO tmpNod = myUsrList; //*****************这里要修改*********************
while(tmpNod)
{
PUSERINFO tmp = tmpNod->next;
delUsrEx(tmpNod); //清空节点所占的内存
tmpNod = tmp;
}
}
/***********************************以下为用户使用接口****************************************/
//=============================================================================================
//函数名称:initUsrList(void)
//功能描述:调用destroyUsrList来清空链表,完成初始化
//函数参数:
//返 回 值:
//============================================================================================
void initUsrList(void)
{
if(myUsrList) //*************这里要修改**********
{
destroyUsrList();
}
myUsrList = NULL;
}
//=============================================================================================
//函数名称:addUsr(char *name, char *host,char *ip)
//功能描述:在链表中插入一个节点
//函数参数:name、host、ip节点信息指针
//返回值:
//============================================================================================
int addUsr(char *name, char *host,char *ip) //使用通用链表时此函数必须修改
{
PUSERINFO newusr = (PUSERINFO)malloc(sizeof(USERINFO));
if(newusr == NULL)
return -ENOMEM;
newusr->usrname = (char *)malloc(strlen(name) + 1);
if(newusr->usrname == NULL)
{
free(newusr);
return -ENOMEM;
}
newusr->hostname = (char *)malloc(strlen(host) + 1);
if(newusr->hostname == NULL)
{
free(newusr->usrname);
free(newusr);
return -ENOMEM;
}
newusr->ipaddr = (char *)malloc(strlen(ip) + 1);
if(newusr->ipaddr == NULL)
{
free(newusr->ipaddr);
free(newusr);
return -ENOMEM;
}
newusr->num=count;
strcpy(newusr->usrname, name);
strcpy(newusr->hostname, host);
strcpy(newusr->ipaddr, ip);
count++;
//pthread_mutext_lock();
add_node((void**)&myUsrList, newusr); //*****************这里要修改*****************
//pthread_mutext_unlock();
return 0;
}
//=============================================================================================
//函数名称:delUsr(PUSERINFO usr)
//功能描述:调用函数del_node从链表中删除一个节点
//函数参数:usr要从链表中删除节点
//返回值: 成功返回0,失败返回-1
//==============================================================================================
int delUsr(PUSERINFO usr)
{
if(usr==NULL)
{
printf(“node is not found!\n”);
return -1;
}
del_node((void**)&myUsrList, usr); //这里要注意修改
delUsrEx(usr);
count–;
return 0;
}
//===============================================================================================
//函数名称:findUsrByName(char *name)
//功能描述:通过name查找节点
//函数参数:name要查找的节点关键字
//返 回 值:找到的节点的结构体指针,没找到为null
//===============================================================================================
PUSERINFO findUsrByName(char *name)
{
PUSERINFO ret = NULL;
PUSERINFO tmpNod = myUsrList;
while(tmpNod)
{
if(strcmp(tmpNod->usrname, name) == 0)
{
ret = tmpNod;
break;
}
tmpNod = tmpNod->next;
}
return ret;
}
//=================================================================================================
//函数名称:
//功能描述:通过num查找节点
//函数参数:
//返回值:
//=================================================================================================
PUSERINFO findUsrByNum(unsigned int number)
{
//printf(“find ok\n”);
PUSERINFO ret = NULL;
PUSERINFO tmpNod = myUsrList;
while(tmpNod)
{
if(tmpNod->num == number)
{
ret = tmpNod;
break;
}
tmpNod = tmpNod->next;
}
return ret;
}
//=================================================================================================
//函数名称:
//功能描述:打印输出链表
//函数参数:FIlE *file输出终端,显示器为,stdout
//返 回 值:输出链表个数
//=================================================================================================
int listUsr(FILE *file)
{
int count = 1;
char temp[10];
PUSERINFO usr = myUsrList;
if(usr == NULL)
fprintf(file, “User List is empty!\n”);
else
{
fprintf(file, “%6s %20s %20s %20s\n”, “num”, “Name”, “hostname”,”ipaddr”);
while(usr)
{
fprintf(file,”%6d %20s %20s %20s\n”, usr->num, usr->usrname, usr->hostname,usr->ipaddr);
usr = usr->next;
}
//fprintf(file, “%d users found!\n”, count);
}
return count;
}
/*
int main()
{
addUsr(“usrname1”, “host1″,”192.168.220.1”);
listUsr(stdout);
addUsr(“usrname2”, “host2″,”192.168.220.2”);
addUsr(“usrname3”, “host3″,”192.168.220.3”);
addUsr(“usrname4”, “host4″,”192.168.220.4”);
addUsr(“usrname5”, “host5″,”192.168.220.5”);
listUsr(stdout);
//delUsr(findUsrByName(“usrname3”));
delUsr(findUsrByNum(3));
//delUsr(“usrname8”);
listUsr(stdout);
printf(“init list…\n”);
initUsrList();
listUsr(stdout);
return 0;
}
*/
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/37397.html