说实话自从大学毕业后已经很久没有用c语言写过程序了,一般都是使用c++,c++的stl和boost等,这些代码库大大简化了我们的编程复杂度。由于最近某种原因在次开始用c写程序。我是个比较懒的人,比较喜欢使用别人的第三方库,好不容易找到一个叫sglib的开源库,当然要使用一下啦。不多说。

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include "sglib.h"

typedef struct _ip_mask_map
{
 int first;
 int second;
 struct _ip_mask_map* next;
}ip_mask_map,*pip_mask_map;

int ipcomp(ip_mask_map* elem1,ip_mask_map* elem2)
{
 if ((elem1->first == elem2->first) &&
  (elem1->second == elem2->second))
 {
  return 0;
 }
 else
 {
  return 1;
 }
}

int main(int argc, char* argv[])
{
 ip_mask_map *elem,*head=NULL,*_member;

elem = (pip_mask_map)malloc(sizeof(ip_mask_map));
 elem->first = 1;
 elem->second = 100;
 elem->next = NULL;

//添加elem到链表,如果指向链表的指针head为空时,将新元素elem赋值给head
 SGLIB_LIST_CONCAT(ip_mask_map,head,elem,next);

elem = (pip_mask_map)malloc(sizeof(ip_mask_map));
 elem->first = 2;
 elem->second = 200;
 elem->next = NULL;

SGLIB_LIST_CONCAT(ip_mask_map,head,elem,next);

elem = (pip_mask_map)malloc(sizeof(ip_mask_map));
 elem->first = 2;
 elem->second = 200;
 elem->next = NULL;

//如果成员已经在链表存在的话,_member返回指向那个成员的指针,否者返回NULL
 SGLIB_LIST_ADD_IF_NOT_MEMBER(ip_mask_map,head,elem,ipcomp,next,_member);
 
 if (_member != NULL)
  free(elem);

//遍历并删除动态分配的内存
 for (elem = head; elem != NULL;)
 {
  pip_mask_map tmp = elem;
  printf("%d,%d\n",elem->first,elem->second);
  elem = elem->next;
  free(tmp);
 }

return 0;
}

c语言编程之sglib库的简单使用的更多相关文章

  1. linux下c图形化编程之gtk+2.0简单学习

    在linux下想做一个图形化的界面,然后自己选择使用gtk+2.0来进行编辑,我的电脑已经安装过gtk+2.0了,所以就在网上找了一个安装方法,结果未测试,大家有安装问题可以说下,一起探讨下. 1.安 ...

  2. java 网络编程之TCP通信和简单的文件上传功能

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  3. 网络编程4 网络编程之FTP上传简单示例&socketserver介绍&验证合法性连接

    今日大纲: 1.FTP上传简单示例(详细代码) 2.socketserver简单示例&源码介绍 3.验证合法性连接//[秘钥加密(urandom,sendall)(注意:中文的!不能用)] 内 ...

  4. Netty网络编程之NIO概览与简单应用

    >>关于NIO Java NIO即Java Non-blocking IO(Java非阻塞I/O),是Jdk1.4之后增加的一套操作I/O工具包,又被叫做Java New IO. (1)R ...

  5. java 网络编程之UDP通信和简单的群聊程序

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  6. linux网络编程之用socket实现简单客户端和服务端的通信(基于UDP)

    单客户端和服务端的通信(基于UDP)   代码 服务端代码socket3.c #include<sys/types.h> #include<sys/socket.h> #inc ...

  7. C#可扩展编程之MEF学习笔记(一):MEF简介及简单的Demo

    在文章开始之前,首先简单介绍一下什么是MEF,MEF,全称Managed Extensibility Framework(托管可扩展框架).单从名字我们不难发现:MEF是专门致力于解决扩展性问题的框架 ...

  8. GO语言的进阶之路-网络编程之socket

    GO语言的进阶之路-网络编程之socket 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是socket; 在说socket之前,我们要对两个概念要有所了解,就是IP和端口 ...

  9. Python网络编程之TCP套接字简单用法示例

    Python网络编程之TCP套接字简单用法示例 本文实例讲述了Python网络编程之TCP套接字简单用法.分享给大家供大家参考,具体如下: 上学期学的计算机网络,因为之前还未学习python,而jav ...

随机推荐

  1. Java基础知识强化55:经典排序之归并排序(MergeSort)

    1. 归并排序的原理: 原理,把原始数组分成若干子数组,对每一个子数组进行排序, 继续把子数组与子数组合并,合并后仍然有序,直到全部合并完,形成有序的数组 举例: 无序数组[6 2 4 1 5 9] ...

  2. Linux修改SSH连接数 重启SSH服务

    系统 linux,增加SSH终端连接数最大为1000个 解决方案: vi /etc/ssh/sshd_config 输入/MaxStartups 定位到如下并修改 1)        #MaxStar ...

  3. C库专题(Day1)

    <assert.h> C库宏-assert()   定义:#define assert(ignore) ((void)0) void assert(int experession); ex ...

  4. Android(性能)

    ■ 数据传输 对象和字节流之间的转换 为什么要转? 持久化(装逼说法,JVM非运行的场合),他进程(装逼说法,其他机器JVM,不同的JVM) Parcelable和Serializable 初衷: P ...

  5. java下udp的DatagramSocket 发送与接收

    发送 package cn.stat.p4.ipdemo; import java.io.BufferedReader; import java.io.IOException; import java ...

  6. ArrayList 练习

    ArrayList list = new ArrayList(); Random rd = new Random(); ; i <; i++) { , ); //是否包含当前数字 if (!li ...

  7. C/C++中逗号表达式的用法

    代码: #include <cstdio> #include <iostream> using namespace std; int main(){ int t1,t2; t1 ...

  8. px em rem

    px 在Web页面初期制作中,我们都是使用“px”来设置我们的文本,因为他比较稳定和精确.但是这种方法存在一个问题,当用户在浏览器中浏览我们制作的Web页面时,他改变了浏览器的字体大小,这时会使用我们 ...

  9. n阶行列式计算----c语言实现(完结)

    花了半天时间,写了这个n阶行列式计算的程序,应该算是比较优美吧,有很多地方多次做了优化,程序占用内存不是很大,要是说小吧,也不合适,因为里边有一个递归,而且递归的深度还比较深.时间复杂度具体没有细看, ...

  10. VC中如何获取当前时间(精度达到毫秒级)

    标 题: VC中如何获取当前时间(精度达到毫秒级)作 者: 0xFFFFCCCC时 间: 2013-06-24链 接: http://www.cnblogs.com/Y4ng/p/Millisecon ...