Linux下飞鸽传书项目设计书,linux下基于ipmsg协议的飞鸽传书(一)

这个博客介绍了如何使用链表实现用户管理功能,包括添加、删除和查找用户。源代码展示了`usrlist.c`文件,包含了链表的初始化、添加用户、删除用户和按用户名查找用户的函数。代码中强调了需要注意修改的部分,以便正确操作内存和链表节点。
摘要由CSDN通过智能技术生成

//=============================================================

// 文件名称: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;

}

*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值