`
bollaxu
  • 浏览: 217120 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
文章列表
在shell下运行: $ echo | gcc -v -x c++ -E - 或者 $ echo | g++ -v -x c++ -E -   可以看到类似如下的结果 Using built-in specs. Target: x86_64-redhat-linux Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release ...
Internet地址的基本数据结构如下:   #include <netinet/in.h> struct sockaddr_in { short sin_family; // e.g. AF_INET unsigned short sin_port; // e.g. htons(3490) struct in_addr sin_addr; // see struct in_addr, below char sin_zero[8]; // zero this ...
首先,必须安装几个开发包,在centos/fedora下,可以使用yum安装: $ yum -y install tcl-devel expect-devel   装完以后,就可以使用expect来写代码了,从网上拉下来一段代码,稍微修改了一下: #include <tcl.h> #include <expect.h> #include ...
1. 安装gcc的objc编译功能: $ yum -y install gcc-objc   2. 从http://wwwmain.gnustep.org下载GNUstep Startup和GNUstep Base,并从源码进行安装。   3. 把gnustep tools目录加入到系统目录下(默认是/usr/GNUstep/System/Tools) $ export PATH=$PATH:/usr/GNUstep/System/Tools   4. 把编译好的库放在ldconfig的配置文件 $ echo "/usr/GNUstep/Local/Librar ...
如果想要对两个目录下的所有文件做diff,可以使用以下命令:   $ diff -BurN [org-src-dir] [target-src-dir] > [patch-file]   其中-B可以忽略所有的空白行,-r对所有的子目录进行递归的操作。[org-src-dir]是未经修改前的源文件目录,[target-src-dir]是修改后的源文件目录。注意:最后生成的patch文件是用来作用到[org-src-dir]的内容。   使用patch来对[org-src-dir]打补丁,对其进行内容变更:   $ patch -p[N] < [patc ...
由于工作中时常遇到web server/cache的开发工作。一旦做出一些改动,或者添加一些功能,除了功能测试(比如设计一些测试用例)、查看debug信息之外,还需要对整个系统做全面的测试。反向代理服务器和缓存,往往承载着大量的并发请求,对于稳定性的要求很高。这就需要一款比较好的benchmark来进行测试。   Web Polygraph是几年前专门为缓存服务器、代理服务器等设计的测试工具。它具有比较完整的测试用例(比如专门为正向代理和反向代理的测试用例)。另外,它还有一套专门的description language (PGL),可以让测试者来定制测试用例。它的测试结果的呈现也是比较强大 ...
Nginx upstream目前只有短连接,通过HTTP/1.0向后端发起连接,并把请求的"Connection" header设为"close"。Nginx与前端的连接默认为长连接,一个用户跟Nginx建立连接之后,通过这个长连接发送多个请求。如果Nginx只是作为rever ...
上一篇把upstream的配置和初始化的代码稍微分析了一下。本篇主要用图来解释一下upstream反向代理在收到用户请求之后初始化和事件处理流程。   当Nginx收到downstream(用户或者是其他代理)的请求的时候,它会初始化upstream的请求(如图)。经过了下图所示的步骤之后,Nginx创建了向upstream服务器的请求,并向upstream服务器发起连接请求。     下面,通过事件触发/处理机制,Nginx通过建立的连接向upstream发送请求,并检查client(downstream)连接是否断开。当从upstream服务器收到回复的时候,会触发事件,并向d ...
POSIX threads(简称Pthreads)是在多核平台上进行并行编程的一套常用的API。线程同步(Thread Synchronization)是并行编程中非常重要的通讯手段,其中最典型的应用就是用Pthreads提供的锁机制(lock)来对多个线程之间共 享的临界区(Critical Section)进行保护(另一种常用的同步机制是barrier)。 Pthreads提供了多种锁机制:(1) Mutex(互斥量):pthread_mutex_***(2) Spin lock(自旋锁):pthread_spin_***(3) Condition Variable(条件变量):pthre ...
本文从几个部分来详细介绍Nginx的proxy cache功能。第一部分,主要介绍proxy cache的过期、空间管理等。第二部分,主要介绍在Nginx(作为反向代理服务器)收到请求之后,如何检查本地的缓存来确定是否要向后端服务器发起请求。第三 ...
Nginx的内存缓存是通过slab pool来实现的,但是目前Nginx代码没有对http响应进行内存缓存。比如作为反向代理服务器时向后端获取的文件也只是缓存在磁盘里,而内存只是用来做索引。不过Nginx已经提供了内存缓存功能的函数,所以如果在其他地方有需要使用内存缓存的话,也可以通过修改代码来实现(当然,也可以用memory disk来实现内存缓存)。在Nginx的内存缓存机制中,最重要的结构就是ngx_slab_pool_t,里面存放了包括内存缓存的空间使用情况、位置映射以及缓存空间本身的几乎所有信息。先来看一下ngx_slab_pool_t吧。 typedef struct { ng ...
在nginx里面,定义了一个spinlock,来同步父子进程间的共享内存操作     #define ngx_shmtx_lock(mtx) ngx_spinlock((mtx)->lock, ngx_pid, 1024)     void ngx_spinlock(ngx_atomic_t *lock, ngx_atomic_int_t value, ngx_uint_t spin) { #if (NGX_HAVE_ATOMIC_OPS) ngx_uint_t i, n; for ( ;; ) { //__sync_bool_compare_and_swa ...
mmap函数是unix/linux下的系统调用,来看《Unix Netword programming》卷二12.2节对mmap的介绍: The mmap function maps either a file or a Posix shared memory object into the address space of a process.We use this function for three purposes:1. with a regular file to provide memory-mapped I/O2. with special files to provide an ...
  static void mainInitialize(void) { //... //do nothing ... comm_select_postinit(); //configure_once代表是否曾经调用过mainInitialize()函数 //1表示之前调用过 if (!configured_once) //do nothing ... disk_init(); /* disk_init must go before ipcache_init() */ //域名和IP地址的缓存初始化,用来缓存dns正反解得到的ip ...
启动一个新程序,替换原有的进程,因此这个新的被exec执行的进程的PID不会改变,和调用exec函数的进程一样。   #include <unistd.h> int execl(const char *path, const char *arg, ...); int execlp(const char *file, const char *arg, ...); int execle(const char *path, const char *arg, ..., char *const envp[]); int execv(const char *path, char ...
Global site tag (gtag.js) - Google Analytics