C&C++
文章平均质量分 78
lotus302
这个作者很懒,什么都没留下…
展开
-
Posix mq和SystemV mq区别
1、 Posix mq内核参数影响fs.mqueue.msg_max 消息队列中消息个数最大限制fs.mqueue.msgsize_max 消息队列中每个消息长度最大限制fs.mqueue.queues_max 消息队列个数最大限制建议值fs.mqueue.msgsize_max = 8192fs.mqueue.msg_max = 10000fs.m原创 2015-10-16 17:08:53 · 2713 阅读 · 0 评论 -
创建线程时参数传递技巧-用指针传值
//1. thtread mainvoid *listen_thread(void *data){ int socket = (int)data; size_t len; char byte; len = 1; (void) recv(socket,&byte,&len,-1);exit(1);}//2.pthread callpthread_原创 2012-12-27 13:31:47 · 714 阅读 · 0 评论 -
多进程框架
int main_run(){ int stat; int i; pid_t pid; int fd[2]; char c; if(setjmp(exit_jb)) goto shutdown; //i原创 2013-06-08 14:05:42 · 589 阅读 · 0 评论 -
链路层原始套接字编程-服务端
#include #include #include #include #include #include #include #include #include #define LEN 60void print_str16(unsigned char buf[], size_t len){ int i;原创 2014-09-10 11:17:56 · 1024 阅读 · 0 评论 -
链路层原始套接字编程-客户端
#include #include #include #include #include #include #include #include #include #define LEN 60void print_str16(unsigned char buf[], size_t len){ int i;原创 2014-09-10 11:18:33 · 1023 阅读 · 0 评论 -
nginx-并发模型
nginx采用多进程模型处理并发请求,每个worker采用try_lock竞争accept_mutex,避免惊群现象。优点:编程简单,单进程处理请求。缺点:对连接数固定或较少的大数据量连接来说,性能略显不足。原创 2015-02-09 16:03:12 · 670 阅读 · 0 评论 -
队列管理
typedef struct list_head list_head;struct list_head{ struct list_head *next, *prev;}; #define LIST_INIT(p) (p)->next=(p),(p)->prev=(p);#define LIST_ADD_HEAD(h, p)原创 2011-09-07 17:12:10 · 310 阅读 · 0 评论 -
手机号码查找算法(基数树)
#define DIGITTREE_NODE_COUNT 111111typedef struct digittree_node digittree_node;typedef struct digittree_tree digittree_tree;struct digittree_node{ digittree_node *parent; digittree_nod原创 2012-02-08 12:54:48 · 2318 阅读 · 0 评论 -
nginx-简介
nginx(发音"engine x")是俄罗斯软件工程师Igor Sysoev开发的免费开源web服务器软件。nginx于2004年发布,聚焦于高性能,高并发和低内存消耗问题。并且具有多种web服务器功能特性:负载均衡,缓存,访问控制,带宽控制,以及高效整合各种应用的能力,这些特性使nginx很适合于现代网站架构。目前,nginx已经是互联网上第二流行的开源web服务器软件。1 为什么原创 2015-02-10 09:43:58 · 829 阅读 · 0 评论 -
底层网络编程代码总结
/* * Author: GaoYang, * Since: 2014-7-24 ~ 2015-7-24 */#ifndef COMMON_UTIL_H#define COMMON_UTIL_H#include #include #include #include #include #include #include #include #include #incl原创 2015-02-09 16:20:31 · 815 阅读 · 0 评论 -
BB树
平衡二叉树或者是一颗空树,或者是具有下列性质的二叉树:它的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差的绝对值不超过1。平衡因子定义为结点的左子树的深度减去它的右子树的深度。由于平衡二叉树上任何结点的左右子树的深度之差都不超过1,可以证明它的深度和logN是同原创 2011-10-18 13:24:00 · 925 阅读 · 0 评论 -
高性能网络编程--陶辉
1 高性能网络编程1—accept建立连接编写服务器时,许多程序员习惯于使用高层次的组件、中间件(例如OO(面向对象)层层封装过的开源组件),相比于服务器的运行效率而言,他们更关注程序开发的效率,追求更快的完成项目功能点、希望应用代码完全不关心通讯细节。他们更喜欢在OO世界里,去实现某个接口、实现这个组件预定义的各种模式、设置组件参数来达到目的。学习复杂的通讯框架、底层细节,在习惯转载 2015-02-05 15:00:21 · 4134 阅读 · 0 评论 -
B+树
一个m阶的b+树应满足以下特性:1.树中的每个结点至多有m棵子树;2.若根结点不是叶子结点,则至少有两棵子树;3.除根结点之外的所有非终结点至少有[(m+1)/2]棵子树(3/2=1);4.所有非终结点中包含下列信息数据:(key[0],pointer[0];ke原创 2011-10-18 13:22:42 · 427 阅读 · 0 评论 -
单线程读fifo写文件
int log_fifo2file(char *fifoname, char *filename, size_t size, int expire, int *exitflag){ int fd1, fd2; size_t nread, nwrite, sum; char file[PATH_MAX], filene原创 2015-12-01 16:52:15 · 585 阅读 · 0 评论 -
多线程/多进程写FIFO为原子操作(一次写小于PIPE_BUF内容)
#include #include #include #include #include #include #include #include #define WRITENUM 4typedef struct writeattr writeattr;struct writeattr{ int id; int原创 2015-08-17 17:06:09 · 2377 阅读 · 0 评论 -
单线程socket性能测试
int main(){ int ret, fd, connfd; char ip[16]="10.10.126.183"; short port = 7208; int backlog = 10; char buf[87380]; ssi原创 2015-08-17 16:10:47 · 1178 阅读 · 0 评论 -
一张图记住常用 Linux 系统性能诊断工具
转载 2015-03-04 16:48:28 · 576 阅读 · 0 评论 -
libnids-TCP流重组
1. Voidprocess_tcp(u_char * data, int skblen) 2. { 3. 4. struct ip *this_iphdr = (struct ip *)data; 5. /*tcphdr 的头*/ 6. struct tcphdr *this_tcphdr = (struct tcphdr *)(data +转载 2015-01-07 16:07:55 · 4476 阅读 · 0 评论 -
C实现固定大小对象池
typedef struct common_obj_pool common_obj_pool;typedef struct common_obj_node common_obj_node;struct common_obj_pool { uint count; //total num uint size; //per size uint原创 2015-01-21 10:25:00 · 568 阅读 · 0 评论 -
手机尾号hash算法
经过各省实际统计情况来看,除了尾号为4的号码较少外,其他尾号相差不多,所以采用尾号后4位来进行hash//经典算法unsigned BKDRHash(char *str){ unsigned seed = 131; // 31 131 1313 13131 131313 etc.. unsigned hash = 0; while(*str)原创 2015-02-11 11:36:27 · 2563 阅读 · 0 评论 -
截断数据类型
#include #include struct test_t{int a;unsigned b:1;int c;};int main(){char a;int b=0x0102;int c=0x0201;a = b;printf("a=%x\n", a);struct test_t t;printf("t=%d\n", size原创 2012-12-27 13:34:28 · 540 阅读 · 0 评论 -
hadoop实现原理
与单机的文件系统不同,分布式文件系统不是将这些数据放在一块磁盘上,由上层操作系统来管理。而是存放在一个服务器集群上,由集群中的服务器,各尽其责,通力合作,提供整个文件系统的服务。其中重要的服务器包括:主控服务器(Master/NameNode),数据服务器(ChunkServer/DataNode),和客户服务器。HDFS和GFS都是按照这个架构模式搭建的。个人觉得,其中设计的最核心内容是:文件的原创 2012-02-08 16:35:27 · 2071 阅读 · 0 评论 -
64位bitmap操作
#include #define set_bit1(x,y) (x|=(0x01L<<y))#define set_bit0(x,y) (x&=(~(0x01L<<y)))#define get_bit(x,y) (x&(0x01L<<y))int main(){ int pos = 31; unsigned long bitmap = 0xffffff原创 2015-01-26 16:46:33 · 1686 阅读 · 0 评论 -
网关分布式架构设计
由hadoop原理实现网关核心架构,其中Master性能、稳定性、容灾为网关发展瓶颈原创 2012-02-08 17:02:05 · 2192 阅读 · 0 评论 -
memcached简介
memcached是高性能的分布式内存缓存服务器,一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态访问的速度、提高可扩展性。1. memcached的特点:(1) memcached中保存的数据都存储在memcached内置的内存存储空间中。(2) 由于数据仅存在于内存中,因此重启memcached、重启操作系统会导致全部数据消失。(3) 内容容量达到指定值之后,就基于LR原创 2012-02-08 17:09:06 · 355 阅读 · 0 评论 -
ftok函数创建key重复
系统在同一台机器同一个磁盘的不同账户中使用时,出现ftok创建key时重复的现象,而通过ls -i命令查看,i-node结点值明显不一致,为什么还会出现重复呢,经过测试发现几个问题:1、ftok产生key时,组合了3个变量:st_dev、st_ino、proj_id;在Solaris系统上,取proj_id%0xff,st_dev后3位,st_ino后3位组成。st_dev:1原创 2012-09-18 13:43:49 · 1626 阅读 · 0 评论 -
strcpy问题
The strcpy() function copies string s2 to s1, including the terminating null character, stopping after the null charac- ter has been copied. The strncpy() function copies exactly n原创 2012-09-11 10:15:07 · 524 阅读 · 0 评论 -
int与size_t类型比较问题
size_t类型一般定义为unsigned long,即无符号长整形,当用sizeof、strlen等对变量取值时,返回结果为size_t类型;而int类型有符号,当用这两种类型作比较时,很容易出错。举例:int i=-1;size_t j=1;printf("%d\n", i结果很出乎意料:0总结:不能对不能符号类型值进行比较。原创 2012-08-28 09:31:23 · 2261 阅读 · 0 评论 -
线程特有数据==线程内静态变量
函数应用背景:在单线程程序中,函数经常使用全局变量或静态变量,这是不会影响程序的正确性的,但如果线程调用的函数使用全局变量或静态变量,则很可能引起编程错误,因为这些函数使用的全局变量和静态变量无法为不同的线程保存各自的值,而当同一进程内的不同线程几乎同时调用这样的函数时就可能会有问题发生。而解决这一问题的一种方式就是使用线程特定数据的机制。#include #include #incl原创 2012-06-27 09:03:11 · 903 阅读 · 0 评论 -
静态变量
1. static 变量静态变量的类型说明符是static。 静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量。 例如外部变量虽属于静态存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。2. 静态局部变量静态局部变量属于静态存储方式,它具有以下特点:(1)静态局部变量在函数内定义 它的生存期为整个源原创 2012-06-15 11:35:43 · 373 阅读 · 0 评论 -
C语言编译全过程
C语言编译全过程 编译的概念:编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序。 编译的完整过程:C源程序-->预编译处原创 2011-09-07 15:08:34 · 401 阅读 · 0 评论 -
Linux系统应用经验总结
1. 日志类1.1. 正常消息流程跟踪MO消息匹配流程3种消息类型:MO、MOSR、MO状态报告2个匹配过程: 1)3与5,匹配点在网关,3发送的fwd包中Msg_id字段表示匹配ID,5接收的fwd包中msg_content字段中带有Msg_id字段,用于匹配,格式请参考点对点互通协议。 2)2与7,匹配点在SMSC,5流程中的MO原创 2014-01-23 15:02:14 · 5039 阅读 · 0 评论 -
C++比C的优势
对于应用系统来说,用C++比用C要好原创 2014-07-16 15:47:19 · 4265 阅读 · 0 评论 -
C++类
1、为需要动态分配内存的类声明一个拷贝构造函数和一个赋值操作符2、总是让base class拥有virtual destructor3、不要重新定义父类的非虚函数4、重载赋值操作符需要做自赋值判断5、建议不要将类的成员变量放在公共接口中所有成员函数的实现不要放在class声明中,即使函数体为空在类中,成员函数按照如下顺序声明:构造函数、析构函数、成员函数、操作符函数、其原创 2014-07-17 10:27:42 · 418 阅读 · 0 评论 -
链表查找算法-节约内存
#include #include #include #include #include #include #include #include #include #include #include #define KEYNUM 1000000#define KEYHASH 0xFFFFtypedef struct cr_rec_原创 2013-04-22 13:56:28 · 647 阅读 · 0 评论 -
Linux程序开发经验总结
1. 进程和线程1.1. 进程进程终止有8种方式使进程终止,其中5种为正常终止,3种异常终止方式:1) 从main返回2) 调用exit3) 调用_exit或_Exit4) 最后一个线程从其启动例程返回5) 最后一个线程调用pthread_exit6) 调用abort7) 接到一个信号并终止8) 最后一个线程对取消请求作出响应原创 2014-01-23 15:03:27 · 5475 阅读 · 0 评论 -
strncpy与snprintf
char buf[]="abcdefg";stcncpy(s, buf, 4); //abcdsnprintf(s, 4, "%4s", buf); //abc原创 2011-09-07 13:47:01 · 552 阅读 · 0 评论 -
防止poll监听被中断
{ int rv; time_t tin; time_t tout; if (timeout > 0) { timeout *= 1000; tin = time(NULL); }原创 2012-03-08 14:58:21 · 580 阅读 · 0 评论 -
libxml2使用
Libxml2使用指南一、Libxml2介绍:Libxml2 是一个xml的c语言版的解析器,本来是为Gnome项目开发的工具,是一个基于MIT License的免费开源软件。它除了支持c语言版以外,还支持c++、PHP、Pascal、Ruby、Tcl等语言的绑定,能在Windows、Linux、Solaris、MacOsX等平台上运行。功能还是相当强大的,相信满足一般用户需求没有任何问题原创 2015-01-28 16:17:26 · 1102 阅读 · 0 评论 -
epoll中文
NAME epoll - I/O 事件通知机制SYNOPSIS #include DESCRIPTION epoll是poll的变种,可以应用边缘触发(ET)或者级别触发(LT)两种模式,并且对于监测大量的fd来说具有很好的扩展性。控制epoll的接口有三个系统调用:epoll_create、epoll_ctl和epoll_wait。 通过调用epoll_create,原创 2011-12-07 09:21:28 · 555 阅读 · 0 评论