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

📄 queue.c

📁 一个C编写网络广播的程序
💻 C
字号:
/* queue.c -- generic list handling routines *   * This file is part of 'netcast' program, released under BSD License.  * (c) 2001-2002 Stanis砤w Pa秌o <staszek@nutki.com>. All rights reserved.    */#include <stdlib.h>#include <string.h>#include "queue.h"/* Append message at queue end */void qappend (struct mmsgq *q,void *msg,long size) {  if (!q) return;  if (!q->head) {    q->head=q->tail=(struct mmsg *) malloc(sizeof(struct mmsg));   } else {    q->tail->next=(struct mmsg *) malloc(sizeof(struct mmsg));     q->tail=q->tail->next;  }  q->tail->next=0;  q->tail->data=msg;  q->tail->size=size;  q->size+=size;  q->count++;}/* Insert message at queue start */ void qinsert (struct mmsgq *q,void *msg,long size) {  if (!q) return;  if (!q->head) {    q->head=q->tail=(struct mmsg *) malloc(sizeof(struct mmsg));   } else {    q->tail->next=(struct mmsg *) malloc(sizeof(struct mmsg));     q->tail->next->next=q->head;    q->head=q->tail->next;  }  q->tail->next=0;  q->head->data=msg;  q->head->size=size;  q->size+=size;  q->count++;}/* Fetch first message */void* qfetch (struct mmsgq *q, long *size) {  void *res=0;  struct mmsg *tmp;  if (q && q->head) {    res=q->head->data;    *size=q->head->size;    tmp=q->head;    q->head=q->head->next;    free(tmp);       q->count--;    q->size-=*size;  }  return res;}/* Just return first elements data */void *qfirst (struct mmsgq *q,long *size) {  if (q && q->head) return q->head->data;  return 0;}/* Clear structures, _including_ data pointers */void qempty (struct mmsgq *q) {  if (!q) return;  while (q->head) {    q->tail=q->head->next;    free(q->head->data);    free(q->head);    q->head=q->tail;  }  qblank(q);} /* Initialize queue struct, this plainly assigns NULL pointers */struct mmsgq *qinit () {  struct mmsgq *q = malloc (sizeof(struct mmsgq));   qblank(q);  return q;}/* Empty queue struct, this plainly assigns NULL pointers */void qblank (struct mmsgq *q) {  q->count=q->size=0;  q->head=q->tail=0;}void* qflat (struct mmsgq *q) {  void *tmp;  long offs=0;  if (!q || q->count==0) return 0;  tmp = malloc (q->size);  while (q->head) {    memcpy(tmp+offs,q->head->data,q->head->size);    offs+=q->head->size;    q->tail=q->head->next;    free(q->head->data);    free(q->head);    q->head=q->tail;  }  qempty(q);  return tmp; }

⌨️ 快捷键说明

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