⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 linktab.c

📁 linux平台下的网络通讯程序
💻 C
字号:
#include <unistd.h>#include <fcntl.h>#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <errno.h>#include <string.h>#include <netinet/in.h>#include <sys/socket.h>#define MAX_BUF_SIZE 1024#define MIN_BUF_SIZE 256void exit();void *malloc(unsigned size);void free(void *ptr);typedef struct{	struct sockaddr_in addr;	socklen_t addrlen;}IPINFO;typedef struct{	char uid[MIN_BUF_SIZE];	IPINFO from;}UINFO;//结点typedef struct node{	UINFO info;	struct node *next;	struct node *pre;}NODE;//头结点typedef struct{	UINFO top;	NODE *head;	NODE *tail;	int len;}HEADNODE;//创建头结点void showUid(HEADNODE *head){	NODE *p;	p=head->head;	int i=0;	while(p!=NULL)	{		printf("[%d]uid = %s ",i++,p->info.uid);		p=p->next;	}}HEADNODE *createHead(){	HEADNODE *p;	if((p=(HEADNODE *)malloc(sizeof(HEADNODE)))==NULL)	{		fprintf(stderr,"Out of memony!%s\n",strerror(errno));		exit(1);	}	p->len=0;	//空表头指针和尾指针都为空	p->head=NULL;	p->tail=NULL;	return p;}//添加结点NODE *addNode(HEADNODE *head,UINFO *sp){		NODE *newNode=NULL;	if((newNode=(NODE *)malloc(sizeof(NODE)))==NULL)	{		fprintf(stderr,"Out of memony!%s\n",strerror(errno));		return NULL;	}	strcpy(newNode->info.uid,sp->uid);	newNode->info.from = sp->from;	printf("newNode uid = %s \n",newNode->info.uid);	if(NULL==head->head)	{		//表为空表的情况		newNode->pre=NULL;		newNode->next=NULL;		head->head=newNode;		head->tail=newNode;	}	else	{		//表不为空		head->tail->next=newNode;		newNode->pre=head->tail;		newNode->next=NULL;		head->tail=newNode;	}	(head->len)++;	//showUid(head);	return newNode;	}int delNode(HEADNODE *head,UINFO *sp){	int n;	if(head->head==NULL)	{		return 0;	}	NODE *curNode=head->head;	while(curNode!=NULL)	{		//printf("tab uid = %s temp uid = %s ",curNode->info.uid,sp->uid);		if((n=strcmp(curNode->info.uid,sp->uid))==0)		{			if(curNode->pre==NULL)			{				head->head=NULL;				head->tail=NULL;			}			else if(curNode->next==head->tail)			{				head->tail=curNode->pre;				curNode->pre->next=NULL;			}			else			{				curNode->pre->next=curNode->next;				curNode->next->pre=curNode->pre;			}			(head->len)--;			//printf("del node %s",curNode->info.uid);			free(curNode);			return 1;		}		curNode=curNode->next;	}	return 0;}void dropTab(HEADNODE *head){	NODE *p1,*p2;	p1=head->head;	int i=0;	while(p1!=NULL)	{		p2=p1->next;		free(p1);		p1=p2;		printf("[%d]deleted\n ",++i);	}}NODE *searchNode(const HEADNODE *head,UINFO *sp){	if(head->head==NULL)	{		return NULL;	}	NODE *curNode=head->head;	while(curNode!=NULL)	{		if(strcmp(curNode->info.uid,sp->uid)==0)		{			return curNode;		}		curNode=curNode->next;	}	return NULL;}void listUid(HEADNODE *head,char *s){	NODE *p=head->head;	int i=0;	s[0]=0;	while(p!=NULL)	{		printf("u%i = %s\n",i,p->info.uid);		strcat(s,p->info.uid);		strcat(s,"\n");		p=p->next;		i++;	}	//printf("[uidlist][%d] = %s end\n",i,s);}/*int main(void){	HEADNODE *head = createHead();	NODE *p;	UINFO temp1;	char tempstr[256];	int i;	for(i=0;i<3;i++)	{		printf("get uid :");		fgets(temp1.uid,256,stdin);		addNode(head,&temp1);		bzero(&temp1,sizeof(UINFO));	}	p=head->head;	i=0;	while(p!=NULL)	{		printf("[%d]uid = %s ",i++,p->info.uid);		p=p->next;	}	printf("search uid:");	fgets(temp1.uid,256,stdin);	p=searchNode(head,&temp1);	printf("p uid = %s",p->info.uid);	dropTab(head);	return 0;}*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -