随笔分类 -  Linux C

LINUX netlink机制
摘要:Netlink 是一种特殊的 socket,它是 Linux 所特有的,类似于 BSD 中的AF_ROUTE 但又远比它的功能强大,目前在最新的 Linux 内核(2.6.14)中使用netlink 进行应用与内核通信的应用很多,包括:路由 daemon(NETLINK_ROUTE),1-wire 子系统(NETLINK_W1),用户态 socket 协议(NETLINK_USERSOCK),防火墙(NETLINK_FIREWALL),socket 监视(NETLINK_INET_DIAG),netfilter 日志(NETLINK_NFLOG),ipsec 安全策略(NETLINK_XFRM 阅读全文
posted @ 2012-06-06 16:16 一个人的天空@ 阅读(638) 评论(0) 推荐(0)
Netfilter分析
摘要:一、概述1. Netfilter/IPTables框架简介 Netfilter/IPTables是继2.0.x的IPfwadm、2.2.x的IPchains之后,新一代的Linux防火墙机制。Netfilter采用模块化设计,具有良好的可扩充性。其重要工具模块IPTables连接到Netfilter的架构中,并允许使用者对数据报进行过滤、地址转换、处理等操作。 Netfilter提供了一个框架,将对网络代码的直接干涉降到最低,并允许用规定的接口将其他包处理代码以模块的形式添加到内核中,具有极强的灵活性。2.主要源代码文件Linux内核版本:2.4.21Netfilter主文件:net/c... 阅读全文
posted @ 2012-06-06 16:15 一个人的天空@ 阅读(1917) 评论(0) 推荐(0)
sk_buff结构分析
摘要:前言:以下是根据《深入理解Linux网络技术内幕》对sk_buff的相关总结,由于是刚刚看这本书(太厚了),不免在前期出现错误,随着对此书的深入我会在修改前面的错误,也希望各位牛人给予指点。帮助我成长。sk_buff分析:sk_buff是Linux网络代码中最重要的结构体之一。它是Linux在其协议栈里传送的结构体,也就是所谓的“包”,在他里面包含了各层协议的头部,比如ethernet, ip ,tcp ,udp等等。也有相关的操作等。熟悉他是进一步了解Linux网络协议栈的基础。此结构定义在<include/linux/skbuff.h>头文件中,结构体布局大致可分为以下四部分: 阅读全文
posted @ 2012-06-06 16:13 一个人的天空@ 阅读(14730) 评论(0) 推荐(2)
ip_vs实现分析(1)
摘要:本文档的Copyleft归yfydz所有,使用GPL发布,可以自由拷贝,转载,转载时请保持文档的完整性,严禁用于任何商业用途。msn:yfydz_no1@hotmail.com来源:http://yfydz.cublog.cn1. 前言ipvs是章文嵩先生主持的一个开源项目,早在2.2内核时就已经以内核补丁形式出现,RedHat6.1和6.0的一个重要区别就是增加了IPVS。从2.4.24后IPVS已经成为Linux官方标准内核的一部分,2.2时IPVS是完全独立的部分,2.4以后借用了netfilter的一些处理机制,但主体还是比较独立,但功能和netfilter有重复的地方。IPVS官方网 阅读全文
posted @ 2012-06-06 14:51 一个人的天空@ 阅读(1852) 评论(0) 推荐(0)
变长参数列表函数
摘要:可变参数列表头文件<stdarg.h>提供了遍历未知数目和类型的函数参数表的功能。该头文件的实现因不同的机器而不同,但提供的接口是一致的。假定函数 f 带有可变数目的实际参数,lastarg 是它的最后一个命名的形式参数(参数列表必须至少包括一个命名参数)。那么,在函数 f 内声明一个类型为 va_list 的变量 ap (argument pointer),它将依次指向每个实际参数。va_list ap;在访问任何未命名的参数前,必须用 va_start 宏初始化 ap 一次。(va_start 将最后一个命名参数作为起点,将 ap 初始化为指向第一个未命名参数的指针)va_st 阅读全文
posted @ 2012-06-05 12:00 一个人的天空@ 阅读(899) 评论(0) 推荐(0)
libpopt的使用(译)
摘要:更新日志:2012.02.27 更新(校正并基本完成选项表部分内容的翻译)2012.02.28 更新(完成popt基本使用的第1部分以及第2部分的内容翻译)2012.03.01 更新(完成popt基本使用的全部翻译——剩下的3、4、5部分,增加示例部分)软件安装:ubuntu (deb)$apt-cache searchpopt|headlibpopt-dev - libforparsing cmdline parameters - development fileslibpopt0 - libforparsing cmdline parameters...$sudoapt-get insta 阅读全文
posted @ 2012-06-05 11:57 一个人的天空@ 阅读(10502) 评论(0) 推荐(0)
Linux获取毫秒级时间
摘要:在软件设计中经常会用到关于时间的处理,用来计算语句、函数的执行时间,这时就需要精确到毫秒甚至是微妙的时间。int gettimeofday(struct timeval *tv, struct timezone *tz);int settimeofday(const struct timeval *tv, const struct timezone *tz);struct timeval { time_t tv_sec; /* seconds */ suseconds_t tv_usec; /* microseconds */};struct timezone { int tz_minutes 阅读全文
posted @ 2012-05-22 15:16 一个人的天空@ 阅读(25961) 评论(0) 推荐(0)
Configure,Makefile.am, Makefile.in, Makefile文件之间关系(转)
摘要:1.autoscan (autoconf): 扫描源代码以搜寻普通的可移植性问题,比如检查编译器,库,头文件等,生成文件configure.scan,它是configure.ac的一个雏形。 your source files --> [autoscan*] --> [configure.scan] --> configure.ac2.aclocal (automake):根据已经安装的宏,用户定义宏和acinclude.m4文件中的宏将configure.ac文件所需要的宏集中定义到文件 aclocal.m4中。aclocal是一个perl 脚本程序,它的定义是:“aclo 阅读全文
posted @ 2012-05-11 16:44 一个人的天空@ 阅读(4072) 评论(0) 推荐(0)
libxml2 指南(中文)转
摘要:版式本历史Revision 1 June 4, 2002初始草案Revision 2 June 12, 2002增加查找属性值Revision 3 Aug. 31, 2002修正释放内存Revision 4 Nov. 10, 2002增加编码内容讨论Revision 5 Dec. 15, 2002更多释放内存内容变更Revision 6 Jan. 26. 2003添加索引Revision 7 April 25, 2003添加编译附录Revision 8 July 24, 2003添加Xpath例子Revision 9 Feb. 14, 2004修正Xpath例子中的BUG目录绪论....... 阅读全文
posted @ 2012-05-11 16:40 一个人的天空@ 阅读(7995) 评论(0) 推荐(0)
ulimit -c unlimited
摘要:ulimint -a 用来显示当前的各种用户进程限制Linux对于每个用户,系统限制其最大进程数,为提高性能,可以根据设备资源情况,设置个Linux用户的最大进程数,一些需要设置为无限制:数据段长度:ulimit -d unlimited最大内存大小:ulimit -m unlimited堆栈大小:ulimit -s unlimited我们在用这个命令的时候主要是为了产生core文件,就是程序运行发行段错误时的文件:ulimit -c unlimited生成core文件,#######################################################以下来自;ht 阅读全文
posted @ 2012-05-08 17:34 一个人的天空@ 阅读(140544) 评论(1) 推荐(1)
linux c语言字符串函数replace,indexOf,substring等的实现(转)
摘要:c语言没有像java那么丰富的字符串操作函数,很多有用的函数得自己写,搞了一天,写了几个常用函数,留着以后有用。[cpp]view plaincopy#include<string.h>#include<stdio.h>/*将str1字符串中第一次出现的str2字符串替换成str3*/voidreplaceFirst(char*str1,char*str2,char*str3){charstr4[strlen(str1)+1];char*p;strcpy(str4,str1);if((p=strstr(str1,str2))!=NULL)/*p指向str2在str1中第 阅读全文
posted @ 2012-05-04 17:31 一个人的天空@ 阅读(18778) 评论(0) 推荐(1)
【转】Linux C函数库参考
摘要:asctime(将时间和日期以字符串格式表示)clock(取得进程占用CPU的大约时间)ctime(将时间和日期以字符串格式表示)difftime(计算时间差距)ftime(取得目前的时间和日期)gettimeofday(取得目前的时间)gmtime(取得目前的时间和日期)localtime(取得当地目前的时间和日期)mktime(将时间结构数据转换成经过的秒数)settimeofday(设置目前的时间)strftime(格式化日期和时间)time(取得目前的时间)tzset(设置时区以供时间转换)abs(计算整型数的绝对值)acos(取反余弦函数值)asin(取反正弦函数值)atan(取反正 阅读全文
posted @ 2012-04-25 11:35 一个人的天空@ 阅读(3874) 评论(0) 推荐(0)
POSIX 线程 – pthread_sigmask
摘要:概念按照 POSIX, 异步 (外部) 信号发送到整个进程.所有线程共享同一个设置, 即通过 sigaction 设置的线程处置方法.每个线程有自己的信号掩码, 线程库根据该掩码决定将信号发送到哪个线程.由于 Linux 线程实现上的独特性, 外部信号始终发送到特定的线程. pthread_sigmaskpthread_sigmask 用来定义线程的信号掩码其接口与 sigprocmask 一样=============================================================================== #include <pthre... 阅读全文
posted @ 2012-04-05 12:52 一个人的天空@ 阅读(10092) 评论(0) 推荐(1)
TCP_NODELAY和TCP_CORK
摘要:先上代码: int flag = 1; int result = setsockopt(sock, /* socket affected */ IPPROTO_TCP, /* set option at TCP level */ TCP_NODELAY, /* name of option */ (char *) &flag,/* the cast is historical cruft */ sizeof(int)); /* length of option v... 阅读全文
posted @ 2012-04-01 15:16 一个人的天空@ 阅读(2048) 评论(0) 推荐(0)
[精华] 讨论 Setsockopt选项
摘要:有时候我们要控制套接字的行为(如修改缓冲区的大小),这个时候我们就要控制套接字的选项了.以下资料均从网上收集得到getsockopt 和 setsockopt获得套接口选项: int getsockopt ( int sockfd, int level, int optname, void * optval, socklen_t *opteln ) 设置套接口选项: int setsockopt ( int sockfd, int level, int optname, const void * optval, socklen_t *opteln ) sockfd(套接字): 指向一个打开的套 阅读全文
posted @ 2012-04-01 15:15 一个人的天空@ 阅读(681) 评论(0) 推荐(0)
Linux下多路复用IO接口 epoll select poll 的区别
摘要:我们先来介绍下nginxnginx :支持高并发连接.官方测试的是5w并发连接但在实际生产中可制成2-4w并发连接数,得益于nginx使用最新的epoll(linux 2.6内核)和kqueue(freebsd)网络I/O模型.而apache使用的则是传统的select模型,其比较稳定的prefork模式为多进程模式,需要经常派生子进程,所消耗的CPU等服务器资源要比nginx高的多.select 和epoll效率差的原因: select是轮询、epoll是触发式的,所以效率高。单单这样讲,那能懂了才见鬼了.好...我们暂且客观的记住这句话.先说Select:1.Socket数量限制:该模式可 阅读全文
posted @ 2012-03-30 18:06 一个人的天空@ 阅读(2015) 评论(0) 推荐(1)
select,poll和epoll的区别
摘要:select()系统调用提供一个机制来实现同步多元I/O: #include <sys/time.h> #include <sys/types.h> #include <unistd.h> int select (int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); FD_CLR(int fd, fd_set *set); FD_ISSET(int fd, fd_set *set); FD_SET(int fd, fd_set *set); 阅读全文
posted @ 2012-03-30 16:44 一个人的天空@ 阅读(1725) 评论(0) 推荐(0)
(转)I/0模型
摘要:在高性能服务器中,一般采用非阻塞网络IO,单进程事件驱动的架构。这种架构的核心是事件驱动机制。目前Linux常用select,poll和epoll系统调用来完成事件驱动。select和poll是传统的unix事件驱动机制,但它们有很大的缺点:在大量的并发连接中,如果冷连接较多,select和poll的性能会因为并发数的线性上升而成平方速度的下降,这是因为调用者在每次select和poll返回时都要检测每个连接是否有事件发生,当连接数很大时,系统开销会非常大。另外select和poll每次返回时都要从内核向用户空间复制大量的数据,这样的开销也很大。所以,select和poll并不是处理网络IO的 阅读全文
posted @ 2012-03-30 16:02 一个人的天空@ 阅读(688) 评论(0) 推荐(0)
(转)linux select poll
摘要:以前写服务器程序直接就都写成多线程的了,没考虑过其他方式,也没考虑到底哪种方式好;前些日子看些人说windows下面用完成端口、Linux下面用epoll,这些效率高。其它环境一说就是select;似乎很多人不愿意提多线程方式,也许被传说中的线程同步吓得吧;我个人还是偏向多线程方式,这样不但可以监视多端口,还可以分离业务逻辑,便于调试维护。----------------------------------------------------------------------------------------------------看明白这几个东西,需要一个环境,描述问题;就是我的程序需要 阅读全文
posted @ 2012-03-30 16:01 一个人的天空@ 阅读(2588) 评论(0) 推荐(0)
poll函数
摘要:poll函数 poll函数起源于SVR3,最初局限于流设备。SVR4取消了这种限制,允许poll工作在任何描述字上。poll提供的功能与select类似,不过在处理流设备时,它能够提供额外的信息。 1.#include <poll.h> 2. 3.int poll(struct pollfd *fdarray, unsigned long nfds, int timeout); 4. 返回:就绪描述字的个数,0-超时,-1-出错 第一个参数是指向一个结构数组第一个元素的指针。每个数组元素都是一个pollfd结构,用于指定测试某个给定描述字fd的条件。 struct pollfd{. 阅读全文
posted @ 2012-03-30 16:00 一个人的天空@ 阅读(4888) 评论(0) 推荐(0)