自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 资源 (2)
  • 收藏
  • 关注

转载 简单的理解KMP算法

部分匹配表毫无疑问,KMP算法的精髓是部分匹配表。我理解KMP算法时,最大的障碍就在于是否充分明白部分匹配表里的值所代表的意义。下面我会尽可能简单地来解释这些。下面这个是“abababca”这个模板的部分匹配表:char:   | a | b | a | b | a | b | c | a |index: | 0 | 1 | 2 | 3 | 4 | 5 | 6

2015-09-30 16:20:17 331

原创 c/c++赋值“=”返回值问题

以前一直以为赋值语句返回的是一个bool,好吧我错了,直到看到这道迅雷的笔试题for(inti=10,j=1;i=j=0;i++,j--)()A 0B 1C 无限D 以上都不对在vs下做了下实验,过程及结果如图:赋值“=”原来返回的是赋的值。。网上

2015-09-30 15:28:12 1206

转载 libevent编程疑难解答

转载请注明出处:http://blog.csdn.net/luotuo44/article/details/39547391        前段时间阅读了libevent的源码。读毕,之前使用libevent时的一些疑问都已经豁然开朗了。对于libevent源码的分析,可以移步http://blog.csdn.net/luotuo44/article/c

2015-09-30 11:24:45 530

原创 libevent客户端以及服务器

服务器端:#include#include#include#include#include#include#include#includevoid socket_read_cb(bufferevent* bev,void* arg){ char msg[4096]; int len=bufferevent_read(bev,msg,sizeof(msg)-1); m

2015-09-29 17:49:29 581

原创 libevent学习笔记二:使用evdns_getaddrinfo()的例子

#include#include#include#include#include#include#include#includeint n_pending_requests=0;struct event_base* base=NULL;struct user_data{ char* name; int idx;};void callback(int errcode,s

2015-09-28 16:50:33 2522

原创 另一个用libevent实现的echo服务器

#include#include#include#include#include#include#include#includestatic voidecho_read_cb(struct bufferevent *bev,void *ctx){ struct evbuffer* input=bufferevent_get_input(bev); struct evbuff

2015-09-28 14:19:53 660

原创 简单的传统的阻塞的httpclient

本例来子libevent官网,由一点小小的改动#include#include#include#include#include#include#includeint main(int argc,char* argv[]){ const char query[]= "GET / HTTP/1.0\r\n" "Host:www.baidu.com\r\n" "\

2015-09-25 10:10:46 1120

原创 libevent学习笔记1:一个用libevent实现的回显服务器

#include#include#include#include#include#include#include#include#include#include#include#include#define MAX_LINE 16384char rot13_char(char c){if((c>='a'&&c='A'&&c='n'&&c='N'&&c<='Z'))return c-13;elser

2015-09-23 15:58:09 618

转载 安装libevent ubuntu下

1.是否安装安装了的话应该是这样的:如果不是,那就装一下。chen@chen-book1:~/libevent20$ ls -al /usr/lib |grep libeventlrwxrwxrwx   1 root root           21 2013-06-07 10:43 libevent-2.0.so.5 -> libevent-2.0.so.5.1.4

2015-09-21 10:58:33 763

转载 libevent使用教程

下面假定已经学习过基本的socket编程(socket,bind,listen,accept,connect,recv,send,close),并且对异步/callback有基本认识。基本的socket编程是阻塞/同步的,每个操作除非已经完成或者出错才会返回,这样对于每一个请求,要使用一个线程或者单独的进程去处理,系统资源没法支撑大量的请求(所谓c10k problem?),例如内存:默认

2015-09-21 10:31:41 2082

转载 多进程和多线程的优缺点

在Linux下编程多用多进程编程少用多线程编程。         IBM有个家伙做了个测试,发现切换线程context的时候,windows比linux快一倍多。进出最快的锁(windows2k的 critical section和linux的pthread_mutex),windows比linux的要快五倍左右。当然这并不是说linux不好,而且在经过实际编程之后,综合来看我觉得linu

2015-09-18 17:03:08 357

原创 进程间通信:管道,信号量,共享内存,消息队列

1.管道:Int fd[2];int pipe(fd);创建了一个管道,不过是单向的。fd[0]为读端,fd[1]为写端int socketpair(int domain, int type, int protocol, int fd[2]);双向管道2.信号量:#includeint  semget(key_t key,int num_sems,int sem_fla

2015-09-18 10:46:20 435

转载 操作系统的内存分页管理、虚拟内存介绍

今天这篇关于操作系统的方面的技术文章,我们继续为各位朋友们讲解关于操作系统的内存方面的内容。今天 我们主要为各位朋友们讲解内存分页管理、虚拟内存介绍。传统存储管理方式的特征上一节所讨论的各种内存管理策略都是为了同时将多个进程保存在内存中以便允许多道程序设计。它们都具有以下两个共同的特征: 1) 一次性作业必须一次性全部装入内存后,方能开始运行。这会导致两种情况发生: • 当作业很大,不

2015-09-18 10:11:35 2104

原创 可重入函数

可重入函数当捕捉到信号时,不论进程的主控制流程当前执行到哪儿,都会先跳到信号处理函数中执行,从信号处理函数返回后再继续执行主控制流程。信号处理函数是一个单独的控制流程,因为它和主控制流程是异步的,二者不存在调用和被调用的关系,并且使用不同的堆栈空间。引入了信号处理函数使得一个进程具有多个控制流程,如果这些控制流程访问相同的全局资源(全局变量、硬件资源等),就有可能出现冲突,如下面的例子所示

2015-09-16 14:50:57 431

转载 linux信号掩码

1. linux内部用一个128个字节(多个unsigned long)的结构(sigset_t)表示信号的掩码,在i386平台上就是128/4=32个long,每位对应一个信号的掩码,最大支持128*8 = 1024个信号。现在只有64个信号,所以只要考虑最前面的两个long就可以了。sigset_t mask;unsigned long *pl = (unsigned long*)&m

2015-09-16 14:22:44 728

原创 epoll系列系统调用

需要包含的头文件#include1. int epoll_create(int size):在内核新建一个事件表(这是与select和poll不同的地方),返回这个事件表的文件描述符,这个文件描述符将会作为epoll系统调用的第一个参数。另外size参数并不起作用,只是给内核一个提示,它的事件表需要多大。2.int epoll_ctl(int epfd,int op,int fd,

2015-09-15 13:59:11 542

转载 typedef和define的详细区别

typedef是一种在计算机编程语言中用来声明自定义数据类型,配合各种原有数据类型来达到简化编程的目的的类型定义关键字。 #define是预处理指令。下面让我们一起来看。typedef是C语言语句,其功能是用户为已有数据类型取“别名”。 例如: typedef int INTEGER;  这以后就可用INTEGER来代替int作整型变量的类型说明了,如:  

2015-09-14 11:00:12 570 2

转载 IO:同步、异步、阻塞、非阻塞的区别

同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non-blocking IO是一个东西。这其实是因为不同的人的知识背景不同,并且在讨论这个问题的时候上下文(context)也不

2015-09-11 17:48:52 362

原创 http解析中的一些东西,strpbrk,strcasecmp,strncasecmp,strspn,strcspn

http解析中的一些东西:1:/t:空格/r:回车/r/n:一行结束的标志2:strpbrk():函数原型:extern char *strpbrk(char *str1, char *str2)参数说明:str1待比较的字符串,str2为指定被搜索的字符串。        所在库名:#include   函数功能:比较字符串str1和str2中是否

2015-09-11 09:40:59 541

原创 HTTP请求详解

一个HTTP请求报文由四个部分组成:请求行、请求头部、空行、请求数据1.请求行  请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。比如 GET /data/info.html HTTP/1.1方法字段就是HTTP使用的请求方法,比如常见的GET/POST其中HTTP协议版本有两种:HTTP1.0/HTTP1.1 可以这样区别:

2015-09-10 17:07:19 2426

转载 进程pid,ppid;进程uid,euid;用户uid,guid

1、当我们创建用户时,由我们为新建用户命名和设置密码,同时系统会为我们所创建的用户名关联一个号,就是所谓的用户uid。同时我们还可以把这个用户放到某个用户群里,类似的,用户群也可以我们手工建立。如果建立用户时,不指明所建的用户属于哪个用户群,则系统会自动建立一个跟用户名同名的用户群。不管手工建立还是自动建立,系统都会为用户群关联一个号,这个号称之为gid。用户uid所属的群的gid就是用户的gid

2015-09-09 15:55:33 1474

原创 将文件描述符设置为非阻塞

int setnonblocking(int fd){ int old_option=fcntl(fd,F_GETFL); int new_option=old_option|O_NONBLOCK; fcntl(fd,F_SETFL,new_option); return old_option;}以后肯定会经常用到,所以先记下来!

2015-09-09 14:53:59 1385

原创 适合新手的网络编程,用socket传文件(本例传的是jpg图片) 用到sendfile函数

服务器端代码:用来接受客户端发来的文件#include#include#include#include#include#include#include#includeint main(int argc,char* argv[]){assert(argc>2);FILE *filefd=fopen("a.jpg","ab");struct sock

2015-09-09 09:34:46 1096 2

原创 socket关闭操作close和shutdown

close():只是将socket的fd引用减1,如在fork后的子进程中调用close并不会马上关闭socket;shutdown(int socket,int howto):howto:SHUT_RD关闭读,并且socket缓冲区的数据都被丢弃    SHUT_WR关闭写,关闭写之前将缓冲区中的数据全部发送,此时的socket处于半关闭状态    SHUT_RDWR同时关闭读和

2015-09-08 11:19:34 1008

转载 struct字节对齐的问题,找工作笔试面试很喜欢考!!!!!

什么是字节对齐,为什么要对齐?TragicJun 发表于 2006-9-18 9:41:00 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。    对齐的作用

2015-09-07 14:55:18 406

转载 用指针修改const变量问题

const的变量在特定情况下可以通过指针修改,但是在另一些情况下是不能通过指针修改。以下是VC6下才测试。1 不能修改的情况#include int const a = 10;void main(void){ int *p = (int*)&a; *p = 20; printf("%d\n", *p);}程序编译通过,但运行时错误:

2015-09-07 11:06:53 597

redis开发与运维

redis开发与运维 redis开发与运维 redis开发与运维 redis开发与运维

2018-04-28

深入理解elasticsearch

深入理解elasticsearch, 清晰版 lucene elasticsearch

2018-04-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除