自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 收藏
  • 关注

原创 gdb 高级用法

<br />1  条件断点 <br /> <br />19 #include <stdio.h> 20 21 int main() 22 { 23 int i,j; 24 for( i = 0; i < 10; ++i) 25 {

2010-11-26 20:05:00 1538 1

原创 nginx 数据结构之 array

        array是一个动态的数组,可以往里面动态的添加元素,结构图如下

2010-11-23 20:57:00 1265 1

原创 nginx signal 之 quit reload

<br />      这个信号,使master进程的环境重新加载,同时启动一批新的子进程,再把原来的进程退出,这样可以是系统平稳的重启。 <br /> <br />      在收到这个信号好,系统:<br />      //收到 reload 信号 if (ngx_reconfigure) { ngx_reconfigure = 0; //更新程序了 if (ngx_new_binary) {

2010-11-23 20:26:00 1243 1

原创 nginx signal 之 quit

       quit信号其实和前面介绍的stop基本一样,唯一的不同之处就是quit是一种优雅的停止,也就是进程如果还在服务中,那么就不会关闭该进程,直到进程完成服务为止。当然这个过程中不能再接受新的任务了。 

2010-11-21 22:08:00 2722 1

原创 nginx signal 之 stop

<br />        当运行的nginx程序收到了 stop信号后是如何处理,使整个程序停下来的呢? 总结了下,主要有下面几个步骤:<br /> <br />      一 master进程收到 stop 信号后,把 ngx_terminate 设置为1 <br /> <br />      二 master看到ngx_terminate 为1 ,通过channel向子进程发送 NGX_CMD_TERMINATE 命令<br /> <br />      三 子进程收到命令后,把  ngx_termi

2010-11-21 18:19:00 2950 4

原创 nginx 父子进程通信 channel

<br />        nginx 中利用socketpair()函数,创建一对相互连接的socket,实现父子进程的通信。 下面分析下整个过程: <br /> <br />一  创建 <br />       在子进程创建之前,需要创建这样一对连接:  ngx_spawn_process函数(ngx_process.c中)<br /> //创建一对匿名的已经连接的套接字 if (socketpair(AF_UNIX, SOCK_STREAM, 0, ngx_proces

2010-11-20 21:06:00 5111 7

原创 nginx add listen sock to epoll

      到进程获得了监听锁的时候,就会调用ngx_enable_accept_events函数,我们来看看这个函数作什么事情:ngx_enable_accept_events(ngx_cycle_t *cycle){ ngx_uint_t i; ngx_listening_t *ls; ngx_connection_t *c; ls = cycle->listening.elts; for (i = 0; i listening

2010-11-19 20:01:00 1964 1

原创 nginx signal

     objs/nginx -h      -s signal     : send signal to a master process: stop, quit, reopen, reload      nginx 支持 stop ,quit , reopen ,reload 四种信号      一 信号定义     typedef struct { int signo; //信号的编号 char *signame; //信号的名字

2010-11-19 18:49:00 6961 1

原创 nginx phases 详细介绍

     我们知道,nginx 请求分为下面几个阶段:typedef enum {    NGX_HTTP_POST_READ_PHASE = 0,      //读取请求    NGX_HTTP_SERVER_REWRITE_PHASE,     //server重写    NGX_HTTP_FIND_CONFIG_PHASE,        //查找配置    NGX_HTTP_REWRITE_PHASE,            //重写    NGX_HTTP_POST_REWRI

2010-11-18 17:11:00 1829 2

原创 nginx location tree

<br />       nginx通过三叉查找树来定位处理函数,当我们把位置放到队列后,整个结果如下图: <br /> <br /><br /> <br />在ngx_http_core_loc_conf中的location位置,这里使用红色表示的,比如 a, b ,c ,aa, bb, cc ,而在每个location中,又有inclusive和exact指向ngx_http_core_loc_conf ,表示该位置的子位置。 <br /> <br />     在 ngx_http_init_stat

2010-11-18 16:13:00 1917

原创 nginx phases

      nginx 在处理请求的过程中,需要经过一些阶段,具体阶段可以在ngx_http_core_module.h中定义: typedef enum { NGX_HTTP_POST_READ_PHASE = 0, //读取请求 NGX_HTTP_SERVER_REWRITE_PHASE, //server重写 NGX_HTTP_FIND_CONFIG_PHASE, //查找配置 NGX_HTTP_REWRITE_PHASE,

2010-11-17 20:25:00 1832

原创 nginx location 定位

<br /><br />     我们前面写过hello_world模块,当我们再游览器中输入 http://10.22.222.33:80/helloworld?q=xiaochi ,最后是如何到达我们的hello_world的处理函数的呢? <br /><br />    首先我们来看我们的配置文件<br />    http{ <br />     server{<br />           location /hello {<br />              ngx_he

2010-11-17 14:04:00 3606

原创 nginx http server location 关系

<br />     我们在配置文件中,可以看到类似下面的结构:<br /> <br />     http{<br />                server{<br />                        location a {<br /> <br />                        }<br />                        location b{<br /> <br />                        }<br />       

2010-11-17 13:10:00 10524 1

原创 nginx 处理请求

<br />     我在上面前面介绍,nginx把connection的read事件设置为ngx_http_init_request,那么请求过来的时候,系统就调用这个函数开始了请求过程,接下来对这个函数进行介绍:<br /> <br /> 

2010-11-16 16:19:00 1019

原创 nginx 处理accept

<br />      accept过程实现在 ngx_event_accept.c中的ngx_event_accept函数中,主要过程如下:<br /> <br />     一  accept()<br /> <br />     二  从连接池中取得一个连接                                                                                                  <br />          c = ngx_

2010-11-16 11:51:00 2901

原创 nginx listen

<br />     nginx中使用ngx_listening 来监听外部的连接请求<br />     struct ngx_listening_s { ngx_socket_t fd; //socket struct sockaddr *sockaddr; //地址 socklen_t socklen; /* size of sockaddr */ size_t ad

2010-11-16 11:06:00 3554

原创 nginx 进程的类型

     nginx 有使用ngx_process 变量表示进程的类型,这个变量的取值在ngx_process_cycle.h中定义,主要有下面几个#define NGX_PROCESS_SINGLE 0 //单独进程#define NGX_PROCESS_MASTER 1 //主进程#define NGX_PROCESS_SIGNALLER 2 //信号进程#define NGX_PROCES

2010-11-14 17:53:00 3314

原创 nginx module

       nginx 支持模块化,系统中的很多功能就是一个模块,比如event、http、email 等,可以看出,模块在nginx中重要性,模块的定义在 src/core/ngx_conf_file.h中,     struct ngx_module_s { ngx_uint_t ctx_index; //分类索引,在该类别下模块中的索引号,现在系统core、event、http和mail四种模块 ngx_uint_t

2010-11-14 16:12:00 1336

原创 nginx conf

<br />        从配置文件和系统的参数之间,ngx_conf_s 在起着一个桥梁的作用,我们再这里暂时把它定名了指令结构吧<br /> <br />struct ngx_conf_s { char *name; //这个好像没有用,下面args中第一个就是名字 ngx_array_t *args; //指令参

2010-11-13 22:06:00 1359

原创 nginx cycle

   在系统整个运行过程中,需要使用的一些参数、资源需要统一的管理,nginx把这个任务交给了ngx_cycle_t struct ngx_cycle_s { void ****conf_ctx; //指向模块的配置 ngx_pool_t *pool; //内存池 ngx_log_t *log;

2010-11-13 19:38:00 2527

原创 fork 父子进程变量之间的关系

<br />       调用fork,会有两次返回,一次是父进程、一次是子进程,因为子进程是父进程的副本,所以它拥有父进程数据空间、栈和堆的副本,它们并没有共享这些存储空间,它们只共享正文段。 我们通过下面的程序验证下。 19 #include<unistd.h> 20 #include<stdio.h> 21 22 int global = 6; 23 24 int main(int argc,char** argv) 25 { 26 int var=10;

2010-11-12 19:55:00 4776 2

原创 nginx 配置文件解析

<br />      ngx_conf_parse 这个函数来完成对配置文件的解析,其实这个函数不仅仅解析文件,还可以用来解析参数和块的,不过我们在这里分析解析文件。 <br /> <br />     文件简单的分为三个部分<br />     一 配置文件预先处理<br />     二 读取<br />     三 处理 <br /> <br /> <br />     一  配置文件预处理<br />     主要打开文件,创建缓冲区,并把文件信息以及读取的缓冲区信息填到cf->conf_file

2010-11-12 17:03:00 2123 1

原创 nginx 整体结构

       零零碎碎的看了nginx的源码,自己感觉还是比较的乱,所以花点时间把它的整体结构给理下,      一   模块的结构(ngx_module_t)      index 是指模块的下标,系统在初始化的是,给了每个模块一个唯一id,就好比每个学生都有一个学号,每个员工都有一个工号,下标从0开始。      ctx   是模块的上下文,不同的模块具有不同的上下文,这个具体在第二部分介绍      command  处理指令,在配置文件中的每条指令,在模块中都有对应的处理,因为每个模块可以有多个指令

2010-11-11 23:06:00 2133 1

原创 nginx connections 介绍

       connection 主要负责连接,里面存放了很多的信息: 读事件、写事件、socket等。        一 创建        在nginx_event.c 中的ngx_event_process_init 函数中创建: //给connect 分配空间 cycle->connections = ngx_alloc(sizeof(ngx_connection_t) * cycle->connection_n, cycle->log); //给connect分配内存 if

2010-11-11 13:42:00 2640

原创 nginx accept 加锁

     nginx 采用多进程的模,当一个请求过来的时候,系统会对进程进行加锁操作,保证只有一个进程来接受请求。     加锁: ngx_trylock_accept_mutex(cycle)     解锁: ngx_shmtx_unlock(&ngx_accept_mutex)      下面对加锁和解锁进行详细的介绍:      一 加锁操作     ngx_int_t271 ngx_trylock_accept_mutex(ngx_cycle_t *cycle)272 {273

2010-11-10 18:35:00 3904

原创 hadoop 运行 wordcount

<br />1  源代码<br />package com.felix;import java.io.IOException;import java.util.Iterator;import java.util.StringTokenizer;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.io.LongWritable;import

2010-11-09 11:25:00 2848

原创 linux 文件操作

1 mmap      mmap将一个文件或者其它对象映射进内存。文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零使用#include   void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);     int munmap(void *start, size_t length);         参数:   start:映射区的开始地址。

2010-11-01 18:59:00 442

空空如也

空空如也

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

TA关注的人

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