随笔分类 -  Linux

摘要:搭建目标如下: 图:系统架构图这个系统可以提供web服务及其它查询应用服务,我用其做一个二手房信息搜集、处理及分发的系统,可以通过浏览器访问,也可以通过定制的客户端进行访问。一、安装篇1、下载安装python# wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tgz## tar xvfz Python-2.7.3.tgz# cd Python-2.7.3#./configure# make# sudo make install下面是一些python安装工具,可以方便的安装所缺模块python的包管理setupt... 阅读全文
posted @ 2013-02-22 11:15 Geek_Ma 阅读(3415) 评论(1) 推荐(1) 编辑
摘要:nginx事件处理流程1. 进程初始化nginx启动流程中已经对进程启动进行了简单介绍,现在对每种进程的初始化进行下介绍。(1) 总进程的初始化(这里还没有启动worker进程,所以称为总进程):作为整个进程的入口,很多公用的初始化都是在一开始完成的,先对debug(ngx_debug_init)和错误码进行初始化(ngx_strerror_init),然后解析nginx的启动命令参数,并根据参数进行进一步处理;时间相关参数初始化ngx_time_init(),如果支持正则表达式,则初始化regex相关参数ngx_regex_init,紧接着是日志相关参数(日志文件描述符等)初始化ngx_lo 阅读全文
posted @ 2013-01-11 18:17 Geek_Ma 阅读(2126) 评论(0) 推荐(0) 编辑
摘要:命令格式tcpdump [ -AdDeflLnNOpqRStuUvxX ] [ -c count ] [ -C file_size ] [ -F file ] [ -i interface ] [ -m module ] [ -M secret ] [ -r file ] [ -s snaplen ] [ -T type ] [ -w file ] [ -W filecount ] [ -E spi@ipaddr algo:secret,... ] ... 阅读全文
posted @ 2013-01-07 18:28 Geek_Ma 阅读(1475) 评论(0) 推荐(0) 编辑
摘要:nginx代码分析--启动流程一、 nginx的编译安装1. configure时干的事根据configure后面跟的参数,解析auto文件夹下的文件生成Makefile文件。2. 编译时干的事ngx_modules.c文件是在编译过程中生成的,里面定义了ngx_modules[]模块数组,包含了哪些模块。(安装及配置可以参考)http://www.cnblogs.com/geekma/archive/2012/07/28/2612951.html二、 nginx启动流程1. 模块相关ngx_conf_s::module_type有四种类型: NGX_CORE_MODULE,NGX_EVENT 阅读全文
posted @ 2012-12-30 15:30 Geek_Ma 阅读(1934) 评论(2) 推荐(1) 编辑
摘要:做linux网络编程的同学都清楚,2.6版本以前的linux内核大多都是用select作为非阻塞的事件触发模型,但是效率低,使用受限已经很明显的暴露了select(包括poll)的缺陷了,为了解决这些缺陷,epoll作为linux新的事件触发模型被创造出来。一、epoll相对于select的优点: 1.支持一个进程socket描述符(FD)的最大数目 select支持的单进程socket描述符最大数目只有几千,而epoll支持的数目很大,等于系统最大打开的文件描述符数,这个文件描述符数跟内存有一定关系 2.IO效率不随FD数目增加而线性下降 select对事件的扫描是针对于所有创建的... 阅读全文
posted @ 2012-09-20 17:14 Geek_Ma 阅读(2021) 评论(2) 推荐(0) 编辑
摘要:近期由于工作需要,做了些防DDOS攻击的研究,发现nginx本身就有这方面的模块ngx_http_limit_req_module和ngx_http_limit_conn_module。一、基本介绍 1.ngx_http_limit_req_module 配置格式及说明: 设置一个缓存区保存不同key的状态,这里的状态是指当前的过量请求数。而key是由variable指定的,是一个非空的变量,我们这里使用$binary_remote_addr,表示源IP为key值。limit_req_zone $variable zone=name:size rate=rate; 指定要进行限制的... 阅读全文
posted @ 2012-09-06 12:13 Geek_Ma 阅读(6025) 评论(2) 推荐(1) 编辑
摘要:今天很有成就感,倒不是做出了多牛的东西,而是终于可以动态的进行编码的各种转换了。 其实这个用到的是网上一搜一大片的iconv,目前有windows版和linux版,linux下的很容易找到,直接装上就可以进行开发了,windows下的包可以通过这个链接下载:win-iconv-0.0.4.zip,直接将放入工程内,就可以使用了。 下面给出我自己的测试代码(基于文件的):#include <iostream>#include <stdlib.h>#include <stdio.h>#include <fstream>#include "i 阅读全文
posted @ 2012-08-29 15:58 Geek_Ma 阅读(2025) 评论(0) 推荐(1) 编辑
摘要:最近在写正文抽取的过程中,经常用到字符串处理,为了更好的定制,就没使用第三方的字符串处理库,而选择了c++自带的标准库string 真正使用的时候,发现知道方法名,不知道怎么用了(参数),所以在网上找了个方法列表:#include <string>// 注意是<string>using namespace std;//string类的构造函数:string(const char *s); //用c字符串s初始化string(int n,char c); //用n个字符c初始化//此外,string类还支持默认构造函数和复制构造函数,如string s1;string s 阅读全文
posted @ 2012-08-27 11:51 Geek_Ma 阅读(254) 评论(0) 推荐(0) 编辑
摘要:近期在写一个正文抽取的程序,基于linux平台C++,大体流程从网页获取-->网页解析-->构建变种dom树-->正文抽取算法-->结构化输出。 目前已经完成了第一个功能,调试第二、三个功能,由于互联网上的页面很多由“无证”程序员完成,所以很不规范,需要进行一些容错处理,所以比较耗时间,而且,由于之前对编码格式不了解,在解析时,对我来说编码格式的转换也是一个难题,不过应该会在不断的学习过程中慢慢解决,也算是弥补一下技术缺陷。 网页获取可以用curl库完成,很简单,主要有四个函数: 1.CURL *curl_easy_init( ) This function must 阅读全文
posted @ 2012-08-15 16:10 Geek_Ma 阅读(2621) 评论(0) 推荐(0) 编辑
摘要:信号(signal) 信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。 信号是进程间通信机制中唯一的异步通信机制,可以看作是异步通知,通知接收信号的进程有哪些事情发生了。信号机制经过POSIX实时扩展后,功能更加强大,除了基本通知功能外,还可以传递附加信息。 信号事件的发生有两个来源:硬件来源(比如我们按下了键盘或者其它硬件故障);软件来源,最常用发送信号的系统函数是kill, raise, alarm和setitimer以及si... 阅读全文
posted @ 2012-07-12 20:29 Geek_Ma 阅读(286) 评论(0) 推荐(0) 编辑
摘要:一、 XSI IPC1. 介绍XSI IPC包括消息队列、信号量和共享内存,它们都用一个非负的标示符(identifier)加以引用。标识符是IPC对象的内部名,为了使进程间能够在同一个IPC上相连,就要有一个外部名。键(key)就是这个外部名,每个IPC对象都与一个键相关联。 几种使客户进程与服务进程关联的方法(1) 服务进程可以指定键IPC_PRIVATE创建一个新IPC结构,将返回的标识符存在某处(如:一个文件)以便客户进程读取。注意:使用IPC_PRIVATE只能是创建一个新IPC,且只有服务进程将标识符写到文件中后,客户进程才能获取到。(2) 在公用都文件中定义一个客户进程和服务进. 阅读全文
posted @ 2012-07-12 20:16 Geek_Ma 阅读(337) 评论(0) 推荐(0) 编辑
摘要:一、 Linux进程间通信概述主要分为以下几种:管道(无名管道pipe和命名管道FIFO)、信号(signal)、消息队列、共享内存、信号量、套接字(socket)等。主要分为以下4个领域(1)消息传递(管道,FIFO,消息队列)(2)同步(互斥锁,条件变量,读写锁,信号量)(3)共享内存区(匿名共享内存区,有名共享内存区)(4)过程调用(Solaris门,Sun RPC)二、 无名管道PIPE普通Linux都允许重定向,而重定向就是使用的管道。管道是单向的,先进先出,固定大小,一个进程向管道里进行输入,另一个进程从管道里获取输出。一旦数据被读出,则从管道里面删除,其它进程无法再读到该数据。管 阅读全文
posted @ 2012-07-12 18:19 Geek_Ma 阅读(430) 评论(0) 推荐(0) 编辑