- 博客(147)
- 资源 (2)
- 收藏
- 关注
原创 nginx单独模块编译的makefile编写
nginx单独模块编译的makefile编写由于开发一个nginx模块时,需要编译本模块的代码,在未开发完,需要单独编译编写的代码,就弄个单独的makefile。代码makefile代码如下:CXX = gccCXXFLAGS +=-g -Wall -WextraNGX_ROOT =/usr/home/yupei1/study/my_test/nginx_0761TARGETS =ngx_http
2017-02-19 12:00:41
2116
原创 安装phpredis
第一步 安装phpredis 下载 git clone https://github.com/phpredis/phpredis.git 进入phpredis: cd phpredis 用phpize命令生成configure配置文件 phpize
2015-12-06 15:09:25
686
原创 同一进程的线程共享的资源和独有的资源
线程共享的环境包括:进程代码段、进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID。 进程拥有这许多共性的同时,还拥有自己的个性。有了这些个性,线程才能实现并发性。这些个性包括: 1.线程ID 每个线程都有自己的线程ID,这个ID在本进程中是唯一的。进程用此来
2015-03-28 16:50:51
1276
原创 windows TLS (线程本地存储)
windows TLS (线程本地存储)一、TLS简述和分类我们知道在一个进程中,所有线程是共享同一个地址空间的。所以,如果一个变量是全局的或者是静态的,那么所有线程访问的是同一份,如果某一个线程对其进行了修改,也就会影响到其他所有的线程。不过我们可能并不希望这样,所以更多的推荐用基于堆栈的自动变量或函数参数来访问数据,因为基于堆栈的变量总是和特定的线程相联系的。不
2015-01-26 20:28:11
6055
原创 boost::asio::io_service(之一)
boost::asio::io_service/// Provides core I/O functionality./** * The io_service class provides the core I/O functionality for users of the * asynchronous I/O objects, including: * io_service
2015-01-25 23:46:20
5054
原创 boost::deadline_timer
boost::deadline_timer定义typedef basic_deadline_timer deadline_timer;basic_deadline_timer是个模板类。构造函数deadline_timer有三个构造函数:1 explicit basic_deadline_timer(boost::asio::io_service& io_servi
2015-01-22 20:44:14
4858
原创 boost::checked_delete
先看一段能够正常执行的代码,但会造成内存泄漏:deleteObject.h 实现删除一个CObjectItem的派生类的指针所指的内存#pragma oncenamespace smtlCheck{ class CObjectItem; class CDeleteObject { public: CDeleteObject(void); ~CDeleteObje
2015-01-21 14:28:10
1883
1
原创 036二叉树的镜像(keep it up)
剑指offer中题目:http://ac.jobdu.com/problem.php?pid=1521题目描述:输入一个二叉树,输出其镜像。输入:输入可能包含多个测试样例,输入以EOF结束。对于每个测试案例,输入的第一行为一个整数n(0Ci=’d’表示第i个节点有两子孩子,紧接着是左孩子编号和右孩子编号。Ci=’l’表示第i个节点
2014-11-20 22:02:32
879
原创 035树的子结构(keep it up)
剑指offer中题目:http://ac.jobdu.com/problem.php?pid=1520题目描述:输入两颗二叉树A,B,判断B是不是A的子结构。输入:输入可能包含多个测试样例,输入以EOF结束。对于每个测试案例,输入的第一行一个整数n,m(1输出:对应每个测试案例,若B是A的子树输出”YES”(不包含
2014-11-14 20:39:41
934
原创 034链表中倒数第k个结点(keep it up)
剑指offer中题目:http://ac.jobdu.com/problem.php?pid=1517题目描述:输入一个链表,输出该链表中倒数第k个结点。(hint: 请务必使用链表。)输入:输入可能包含多个测试样例,输入以EOF结束。对于每个测试案例,输入的第一行为两个整数n和k(0输入的第二行包括n个数t(1输出:
2014-11-11 19:26:55
943
原创 033 调整数组顺序使奇数位于偶数前面(keep it up)
剑指offer中题目:http://ac.jobdu.com/problem.php?pid=1516题目描述:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。输入:每个输入文件包含一组测试案例。对于每个测试案例,第一行输入
2014-11-11 11:20:07
993
原创 032数值的整数次方(keep it up)
剑指offer中题目:http://ac.jobdu.com/problem.php?pid=1514题目描述:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。输入:输入可能包含多个测试样例。对于每个输入文件,第一行输入一个整数T,表示测试案例的数目,接下来的T行每行输入一个浮点数ba
2014-11-10 19:54:34
910
原创 031 二进制中1的个数(keep it up, 看到这个题刚开始有点蒙)
剑指offer中题目:http://ac.jobdu.com/problem.php?pid=1513题目描述:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。输入:输入可能包含多个测试样例。对于每个输入文件,第一行输入一个整数T,代表测试样例的数量。对于每个测试样例输入为一个整数。。n保证是int范围内的一个整数。
2014-11-10 19:51:43
1049
原创 boost::signals::signal的用法
吃力的讲完boost::signals的ppt,然后接着就是做练习题。通过讲ppt,发现有一句话说的真好:你自己知道是一回事,你能给别人讲明白又是另外一回事。真的有些东西你自己理解,但是用语言去很难表达,是不是用语言难以表达暴露出自己对所理解的东西不是真正的理解?。。。。orz,不过讲完ppt之后,真的对boost::singals的理解又加深一层。好了废话不多说了,现在来看两个习题(ppt的内容
2014-11-10 11:06:51
3485
原创 030变态跳台阶(keep it up)
剑指offer中题目:http://ac.jobdu.com/problem.php?pid=1389题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。输入:输入可能包含多个测试样例,对于每个测试案例,输入包括一个整数n(1输出:对应每个测试案例,输出该青蛙跳上一个n级的台阶总共有多少
2014-11-09 22:41:35
931
原创 029斐波那契数列的矩阵解法(keep it up)
剑指offer中题目:http://ac.jobdu.com/problem.php?pid=1387题目描述:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。斐波那契数列的定义如下:输入:输入可能包含多个测试样例,对于每个测试案例,输入包括一个整数n(1输出:对应每个测试案例,输出第n项斐波那契数列的值。样例输
2014-11-09 22:05:08
966
原创 028用两个栈实现队列(keep it up)
剑指offer中题目:http://ac.jobdu.com/problem.php?pid=15题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。队列中的元素为int类型。输入:每个输入文件包含一个测试样例。对于每个测试样例,第一行输入一个n(1接下来的n行,每行输入一个队列操作:1. PUSH X 向队列中push
2014-11-08 21:35:55
905
原创 027根据前序遍历和中序遍历,重建二叉树(keep it up)
剑指offer中题目:http://ac.jobdu.com/problem.php?pid=1385题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并输出它的后序遍历序列。输入
2014-11-08 19:33:12
1144
原创 026从尾到头打印链表(keep it up)
剑指offer中题目:http://ac.jobdu.com/problem.php?pid=1511题目描述:输入一个链表,从尾到头打印链表每个节点的值。输入:每个输入文件仅包含一组测试样例。每一组测试案例包含多行,每行一个大于0的整数,代表一个链表的节点。第一行是链表第一个节点的值,依次类推。当输入到-1时代表链表输入完毕。-1本身不属于链表
2014-11-08 12:32:01
907
原创 025 替换字符串中的空格(keep it up)
剑指offer中题目:http://ac.jobdu.com/problem.php?pid=1510题目描述:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。输入:每个输入文件仅包含一组测试样例。对于每组测试案例,输入一行代表要处理的字
2014-11-08 11:22:05
881
原创 024二维数组中的查找(keep it up)
剑指offer中题目:http://ac.jobdu.com/problem.php?pid=1384题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。输入:输入可能包含多个测试样例,对于每个测试案例,输入的第一行为两个整数m和n(1输入的第
2014-11-08 10:20:29
937
原创 023 和为S的两个数字(keep it up)
题目描述:输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。输入:每个测试案例包括两行:第一行包含一个整数n和k,n表示数组中的元素个数,k表示两数之和。其中1 第二行包含n个整数,每个数组均为int类型。输出:对应每个测试案例,输出两个数,小的先输出。如果找不到,则输出“-1 -1”
2014-11-07 22:36:25
1150
原创 nginx学习十四 ngx_master_process_cycle(master进程)
ngx_master_process_cycle()函数,这个函数会启动工作进程干活,并且会处理信号量,处理的过程中会杀死或者创建新的进程,具体流程如下a) 阻塞所有nginx关心的信号;b) 设置进程的title(如果你用ps –aux来查看就可以分清master与worker进程,这就是title的作用。);c) 按照ngx_core_conf_t中worker_
2014-11-06 20:30:41
3648
原创 linux fcntl函数
fcntl功能描述:根据文件描述来操作文件的特性。#include #include int fcntl(int fd, int cmd);int fcntl(int fd, int cmd, long arg);int fcntl(int fd, int cmd, struct flock *lock);描述fctl针对(文件)描述提供控制。fd是被参数cmd操作
2014-10-20 17:16:54
5386
原创 linux进程通信之信号
本节主要学习信号和与信号相关的处理函数,后续还会更新。一 信号信号是UNIX和Linux系统响应某些条件而产生的一个事件,接收到该信号的进程会相应地采取一些行动。通常信号是由一个错误产生的。但它们还可以作为进程间通信或修改行为的一种方式,明确地由一个进程发送给另一个进程。一个信号的产生叫生成,接收到一个信号叫捕获。二 信号的种类Signal Description
2014-10-19 17:28:48
1676
原创 linux进程通信之命名管道
前一节学习了无名管道,这节学习命名管道。二命名管道无名管道只能用来在父子进程或兄弟进程之间进行通信,这就给没有亲缘关系的进程之间数据的交换带来了麻烦,解决这个问题就是本节要学习的另一种管道通信:命名管道。命名管道也被称为FIFO文件,FIFO不同于管道之处在于它提供一个路径名与之关联,以FIFO的文件形式存在于文件系统中。这样,即使与FIFO的创建进程不存在亲缘关系的进程,只要
2014-10-15 22:50:34
1328
原创 进程通信之无名管道
本节学习进程通信的另一种方式:管道。管道是一个进程连接数据流到另一个进程的通道,它通常把一个进程的输出通过管道连接到另一个进程的输入。在shell命令中经常会看到管道的应用,比如我们要列出当前文件下所有命名中有"test"的文件:ls -l | grep test。其中"|"就代表我们在使用管道,它会把"ls -l"的查询结果通过管道,发送给grep,然后执行"grep test"命令后把结构输出
2014-10-15 17:20:05
7754
原创 进程通信之共享内存
共享内存共享内存就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,就好像它们是由用C语言函数malloc分配的内存一样。而如果某个进程向共享内存写入数据,所做的改动将立即影响到可以访问同一段共享内
2014-10-12 22:47:18
1558
原创 nginx学习十三 初始fork和nginx守护进程ngx_daemon
学习nginx已经有一个多月了,觉得越来越吃力了,主要原因自己总结了一下:1平台是基于linux的,以前几乎没有接触过linux,而nginx使用了很多linux的函数;2就是进程,这个东西接触的也很少,linux的多进程更不用说,而现在正好看到这里,觉得异常的吃力,这不看到nginx守护进程的建立,就找资料好好学习一下,所以本文已学习fork为主要内容。好了,先看一下nginx的守护进程的建
2014-10-11 20:45:17
5207
原创 nginx学习十二 ngx_cycle_t 和 ngx_init_cycle
在nginx的启动过程中,ngx_init_cycle这个函数做了大部分的初始化工作,而初始化的变量都保存在ngx_cycle_t这个结构体中,为了深入了解这个函数都做了那些初始化工作,就化时间研究了一下,并写下来以便以后参考。1ngx_cycle_t关于这个结构体前面已经简单介绍过,这里不再赘述。2ngx_init_cyclengx_cycle_t * ngx_init_cy
2014-10-11 17:28:58
3057
原创 nginx学习十一 nginx启动流程
今天用了一天的时间看nginx的启动流程,流程还是很复杂,主要的函数调用有十几个之多,通过看源码和上网查资料,弄懂了一些函数,有些函数还在学习中,有些函数还待日后学习,这里记录一下今天所学。加油!1nginx.c启动的程序主要在src/core/nginx.c中,和普通函数一样,main函数是其入口函数:下面我们看看main函数的源代码:int ngx_cdeclmain(int a
2014-10-07 19:04:49
2551
原创 nginx学习十 ngx_cycle_t 、ngx_connection_t 和ngx_listening_t
最近在开始看nginx的事件模块,经常看到ngx_cycle_t、ngx_connection_t和ngx_listening_t这三个结构体,刚开始没在意,看到了就重新上网变量的意思,后来觉得不弄懂这三个结构体或者不清出其中变量的意义实在是无法看下去,因为有很多函数都涉及这三个结构体。因为ngx_listening_t存储监听有关的信息,ngx_connection_t存储连接有关的信息和读写事件,而ngx_cycle_t这个结构体几乎就是核心结构体,在nginx初始化时这个结构体存储了许多东西,而且它有
2014-10-06 20:12:22
5252
原创 nginx 学习八 高级数据结构之基数树ngx_radix_tree_t
1 nginx的基数树简介基数树是一种二叉查找树,它具备二叉查找树的所有优点:检索、插入、删除节点速度快,支持范围查找,支持遍历等。在nginx中仅geo模块使用了基数树。nginx的基数树使用ngx_radix_tree_t这个结构体表示的。ngx_radix_tree_t要求存储的每个节点都必须以32位整形作为区别任意两个节点的唯一标识。ngx_radix_tree_t基数树会负责分配每个
2014-10-01 15:39:07
3315
原创 nginx学习七 高级数据结构之动态数组ngx_array_t
1 ngx_array_t结构ngx_array_t是nginx内部使用的数组结构。nginx的数组结构在存储上与大家认知的C语言内置的数组有相似性,比如实际上存储数据的区域也是一大块连续的内存。但是数组除了存储数据的内存以外还包含一些元信息来描述相关的一些信息,并且可以动态增长。下面我们从数组的定义上来详细的了解一下。ngx_array_t的定义位于src/core/ngx_array.
2014-09-28 22:48:55
3441
原创 nginx学习六 高级数据结构之双向链表ngx_queue_t
1 ngx_queue_t简介ngx_queue_t是nginx提供的一个轻量级的双向链表容器,它不负责存储数据,既不提供数据的内存分配,它只有两个指针负责把数据链入链表,它跟stl提供的queue不同,stl提供的queue帮助用户存储数据,用户只需要相容器里添加数据即可,而ngx_queue_t,用户必须自己提供存储数据的内存,并且必须定义一种数据结构把ngx_queue_t包含在其中
2014-09-28 20:48:20
1696
原创 nginx 学习五 filter模块简介和实现一个简单的filter模块
1 nginx过滤模块简介过滤(filter)模块是过滤响应头和内容的模块,可以对回复的头和内容进行处理。它的处理时间在获取回复内容之后,向用户发送响应之前。它的处理过程分为两个阶段,过滤HTTP回复的头部和主体,在这两个阶段可以分别对头部和主体进行修改。2 过滤模块执行顺序2.1 ngx_http_output_(head, body)_filter_pt先看一下ng
2014-09-26 22:40:28
3786
原创 nginx 学习四 内存池 ngx_pool_t 和内存管理操作
这几天在看nginx,发现凡是有内存申请的地方都有pool这个东东出现,仔细看看,原来pool的类型是ngx_pool_t,是nginx用来做内存管理的,于是就决定看看他的实现。1 nginx内存池相关的结构体 ngx_pool_t定义在core/ngx_palloc.h ngx_palloc.c中,下面是几个主要的结构体 ngx_pool_data_ttypede
2014-09-24 19:34:48
3956
原创 makefile 学习一
最近在学习nginx,由于实在linux下,一些代码需要用makefile文件来编译,比较节省时间。因为在nginx中添加一个新的模块如果用./configure方法来添加,特别是当你的代码有错时,修改以后又./configure,那么没编译一次都需要几分钟,实现在受不了了,就学习一下makefile,另一个原因是自己以前没有接触过linux,跟没有在linux下编写过代码,这次决定在学nginx的同时学习一个linux编程,当然就有必要学习一下makefile(按需求学习,重点放在学习nginx)。
2014-09-18 22:26:36
1157
原创 nginx学习三 nginx配置项解析详解及代码实现
nginx配置项解析详解及代码实现0回顾 在上一节,用nginx简单实现了一个hello world程序:当我们在浏览器中输入lochost/hello ,浏览器就返回:hello world。为什么会这样呢,简单一点说就是当我们请求访问hello这个服务,nginx就会看配置文件中是否有,如果有,根据具体的handler处理后把处理的结果返回给用户,没有就返回not found。
2014-09-16 13:13:56
5567
assimp--3.0.1270-source-only.zip
2013-08-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人