存档

2013年1月 的存档

gcc的编译过程及相关简介

2013年1月23日 没有评论 16,149 次浏览

我们知道,在平常编译程中所使用的gcc或g++只是一套工具集的外包封装,具体的编译工作并不是由gcc本身来完成的,而gcc为了完成整个编译工作,它直接或间接调用的工具主要包括预处理器/分析编译器/汇编器/连接器(preprocessor/parser-compiler/assembler/linker),比如cpp,cc1,cc1plus,as和ld等等。 如何查看gcc在编译过程的细节?这很简单,带上-v或-###参数(两者有差别,具体请看man手册:man... [阅读更多]

gcc中的weak和alias

2013年1月20日 没有评论 19,220 次浏览

在看glibc源代码的时候,能看到很多对函数的属性修饰,比如weak_alias(注:我当前看的是2.17版本的glibc源代码)宏里的weak和alias: /* Define ALIASNAME as a weak alias for NAME. If weak aliases are not... [阅读更多]

gcc选项-g与-rdynamic的异同

2013年1月13日 没有评论 23,841 次浏览

gcc的-g,应该没有人不知道它是一个调试选项,因此在一般需要进行程序调试的场景下,我们都会加上该选项,并且根据调试工具的不同,还能直接选择更有针对性的说明,比如-ggdb。-g是一个编译选项,即在源代码编译的过程中起作用,让gcc把更多调试信息(也就包括符号信息)收集起来并将存放到最终的可执行文件内。 相比-g选项,-rdynamic却是一个连接选项,它将指示连接器把所有符号(而不仅仅只是程序已使用到的外部符号,但不包括静态符号,比如被static修饰的函数)都添加到动态符号表(即.dynsym表)里,以便那些通过dlopen()或backtrace()(这一系列函数使用.dynsym表内符号)这样的函数使用。 看示例: #... [阅读更多]

分类: *nix技术, 跟踪调试 标签: , ,

nginx与正向代理

2013年1月12日 5 条评论 17,716 次浏览

对于nginx的介绍,往往都会以这么一句评价作为开头:nginx,是一个功能强大的高性能Web和反向代理服务器,……。那么,作为反向代理概念的另一面,正向代理,nginx是否同样支持呢?在解答这个问题之前,需要先搞清楚何谓正向代理,何谓反向代理以及它们之间的联系与差别。 在计算机网络领域,代理服务器也就是充当相互通信双方(按通信请求方client以及通信服务方server两种角色划分)的中间功能媒介的角色,而正向代理和反向代理,只不过是用于对代理服务器在充当中间功能媒介的不同类别的更进一步划分(除了正向代理和反向代理,还有其他类别,具体请看参考1)。即,如果代理服务器充当的是相互通信双方中的client角色,那么就是正向代理。图示如下(来之参考2): 与此相对,如果代理服务器充当的是相互通信双方中的server角色,那么就是反向代理。图示如下(来之参考2): 对此,我们需搞清楚两个问题: 1,所谓正向反向,这个方向性是相对相互通信双方中的client端而言的。 2,要判断一个代理服务器是正向代理还是反向代理,只需检查它在原始双方通信过程中代表着哪一方,替谁干活。 代理服务器的功能有很多,比如在做正向代理时,可以用于代理共享上网,翻(河蟹)墙,掩藏身份(在网易评论里换个火星IP地址,囧)等等;做反向代理时,隐藏服务器端,统一控制,防范攻击,提高服务性能等等。 回到本文的正题:nginx是否支持正向代理? 早在4年前,Igor已经给出了答案:不支持,并且也没有打算在短期内支持。原因是:已经有了非常优秀的正向代理软件,例如squid。 虽然如此,但nginx对正向代理的有限支持还是可以有的,比如对HTTP正向代理的支持(即不支持HTTPS),示例如下(参考2)。 1,编译nginx: #... [阅读更多]

分类: nginx, 源码分析 标签: ,

nginx对Linux native AIO机制的应用(实现篇)

2013年1月12日 没有评论 16,520 次浏览

从前面文章已经了解到,在Linux系统上,要使用native... [阅读更多]

nginx对Linux native AIO机制的应用(配置篇)

2013年1月12日 没有评论 10,375 次浏览

从0.8.11版本开始,nginx开始支持Linux native... [阅读更多]

利用GDB7.0的反向调试(reverse debug)特性调试程序

2013年1月11日 没有评论 12,576 次浏览

同事问到一个问题:假设a函数调用了b函数,并且当前执行点已经进入到b函数,如果想退到a函数来查看程序状态,是否有这样的调试工具?因为2010年在CU上写过一篇博客“利用GDB7.0的反向调试(reverse... [阅读更多]

Linux native AIO与eventfd、epoll的结合使用

2013年1月9日 没有评论 18,692 次浏览

在前面的示例libaio_test.c和native_aio_test.c中,可以看到对磁盘aio请求(本文的aio都指此类)的使用有阻塞等待,这明显之处为对io_getevents()函数(当然,其它函数,比如io_submit()也有一定程度的阻塞)的调用,它会等待并获取已完成的io请求,如果当前没有或少于指定数目的io请求完成,那么就会等待直到timeout。 io_getevents()函数的等待会导致整个进程的阻塞使得程序无法继续向下执行,如果程序还有其它阻塞点,那么有必要想办法把这多处等待合而为一同时进行,从而提高并行性,也就是通常所说的select/epoll等这类多路复用技术。 本文就以epoll为例,介绍一下在linux下,如何把aio结合并应用到epoll机制里。我们知道,epoll机制的最大好处就是它能够在同一时刻对多个文件描述符(通常是由众多套接字形成的描述符集合)进行监听,并将其上发生的读/写(或错误等)事件通知给应用程序,也就是做到时间上的复用。如果能够把aio也放到epoll机制里,即把aio当作epoll机制里的“一路io”,那么就能使得aio与其它可能的等待操作(比如:读/写套接字)共同工作,从而达到时间复用的目的。 作为epoll机制里的“一路io”,需要一个文件描述符来反馈对应的发生事件,而对于纯aio而言,是没有文件描述符作为代表的,因此linux系统上多出了一个eventfd()的系统调用: #include... [阅读更多]

异步I/O之native AIO篇

2013年1月6日 6 条评论 14,015 次浏览

本文介绍Linux下另外一种异步I/O,即由Linux内核实现提供的native... [阅读更多]

异步I/O之glibc AIO篇

2013年1月1日 2 条评论 8,652 次浏览

Linux下可用的异步I/O(以下简称为AIO)有两种,一种由Glibc实现提供,另一种是由Linux内核实现提供,而本文介绍的是glibc内的AIO。 在介绍AIO之前,需要对Linux上的各种不同I/O模型有一个较好的了解,而在这里:http://www.ibm.com/developerworks/cn/linux/l-async/,已经有了很详细的解释,这无需多说。 先来看示例,从感观上来进行认识: /** ... [阅读更多]