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

Linux下飞鸽传书项目设计书,linux下基于ipmsg协议的飞鸽传书(一)//=============================================================//文件名称:usrlist.c//功能描述:通用链表修改成的myUsrList链表,**注释**部分为要注意修改的地方////////包含文件:usrlist.hlnklst.h//维护记录:2009-05-08V1.1bylijian//========…

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

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

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注