摘要:
unlink的特殊地方: unlink一般用于服务进程,进程在unlink时不会立刻删除文件,而是在进程终止时删除文件,一些服务程序通过文件及对文件加锁来保持进程的唯一性,为了保证程序没有正常结束下次再启动时能正常启动,程序会在开始时新建一个文件然后调用unlink。原理就是,它减少了该文件的链接数,如果再没有程序打开它,那么它就会被系统删除。(程序结束之后会关闭打开它的文件句柄)。下面是一个简单的介绍:linux中每一个文件,都可以通过一个struct stat的结构体来获得文件信息,其中一个成员st_nlink代表文件的链接数。当通过shell的touch命令或者在程序中open一个带有. 阅读全文
摘要:
转载自:http://linux.chinaunix.net/techdoc/net/2007/03/27/953429.shtmlltrace的功能是能够跟踪进程的库函数调用,它是如何实现的呢?在ltrace源代码从chinaunix.net中下载下来,做了一个粗略的分析。ltrace其实也是基于ptrace。我们知道,ptrace能够主要是用来跟踪系统调用,那么它是如何跟踪库函数呢?首先ltrace打开elf文件,对其进行分析。在elf文件中,出于动态连接的需要,需要在elf文件中保存函数的符号,供连接器使用。具体格式,大家可以参考elf文件的格式。这样ltrace就能够获得该文件中,所有 阅读全文
摘要:
转载自:http://5iwww.blog.51cto.com/856039/771031strace 是一个非常简单的工具,用来跟踪可执行程序的系统调用(system call)。最简单的使用是,它追踪可行程序运行时的整个生命周期,输出每一个系统调用的名字,参数和返回值。但是它还可以做更多的事情:它可以基于系统调用或者系统调用组来过滤它可以通过计算制定系统调用的次数,花费的时间以及成功和失败的次数来描述系统调用的使用它可以追踪发送给进程的信号(signal)它可以通过进程id(pid)号加入到任意正在运行的进程上如何使用找出一个程序启动时读取了哪个配置文件有的时候,你发发现,无论你如何修改配 阅读全文
摘要:
strace(用来跟踪任何程序的系统调用)和 GDB 调试工具(用来在受控的环境中运行程序的功能齐全的调试工具)strace 专注于监控一个程序系统调用和它接受到的所有信号(与Unix系统上的truss是一样的),使用的是内核系统调用ptrace。另外,还有类似的ltrace(同样是基于ptrace的),它功能是能够跟踪进程的库函数调用。gdb比starce能做的事情更多,比如gdb可以获得堆栈跟踪信息,堆栈跟踪不仅会告诉你程序当前正在做什么,有底层的信息(如等待网络套接字),也有较高级别的信息(如正在执行什么类型的网络操作)。下面是使用过程中一些命令小结:strace调试工具strace工具 阅读全文
摘要:
平衡二叉树的常用算法有红黑树、AVL、Treap、伸展树平衡二叉树(Balanced Binary Tree)又被称为AVL树(区别于AVL算法,且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。构造与调整方法 平衡二叉树的常用算法有红黑树、AVL、Treap、伸展树等。红黑树 红黑树是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。它是在1972年由Rudolf Bayer发明的,他称之为"对称二叉B树",它现代的名字是在 Leo J. Guibas 和 Robert Sedge 阅读全文
摘要:
转载自:http://dongxicheng.org/structure/red-black-tree/1. 简介红黑树是一种自平衡二叉查找树。它的统计性能要好于平衡二叉树(AVL树),因此,红黑树在很多地方都有应用。在C++ STL中,很多部分(目前包括set, multiset, map, multimap)应用了红黑树的变体(SGI STL中的红黑树有一些变化,这些修改提供了更好的性能,以及对set操作的支持)。它是复杂的,但它的操作有着良好的最坏情况运行时间,并且在实践中是高效的: 它可以在O(log n)时间内做查找,插入和删除等操作。本文介绍了红黑树的基本性质和基本操作。2. 红黑 阅读全文
摘要:
转载自:http://www.cnblogs.com/xiao-cheng/archive/2011/10/04/2198972.html定义:一棵空二叉树是AVL树,如果T是非空二叉树,TL和TR分别是其左子树和右子树,则当且仅当TL和TR都为AVL树且|HL-HR|<=1时,T是AVL树。由定义知道一个AVL树的任何节点的左右子树的高度之差不超过1,这是AVL树最基本的特征。AVL树的高度:(固定节点数计算最大高度)记N_h为一棵高度为h的AVL树具有的最小节点数,则最坏情况是它的左右子树的高度不等,一个是N_(h-1)和N_(h-2),从而得到N_h=N_(h-1)+N_(h-2) 阅读全文
摘要:
转载自:http://hi.baidu.com/tianhua_sun/item/401166c90f874a03ad092f011. struct epoll_event 结构体epoll_event 被用于注册所感兴趣的事件和回传所发生待处理的事件,定义如下: typedef union epoll_data { void *ptr; int fd; __uint32_t u32; __uint64_t u64; } epoll_data_t;//保存触发事件的某个文件描述符相关的数据 struct epoll_event { __uint32_t events; /* epoll eve 阅读全文
摘要:
转自:http://www.cnblogs.com/haippy/archive/2011/12/04/2276064.htmlLevelDb日知录之一:LevelDb 101 说起LevelDb也许您不清楚,但是如果作为IT工程师,不知道下面两位大神级别的工程师,那您的领导估计会Hold不住了:Jeff Dean和Sanjay Ghemawat。这两位是Google公司重量级的工程师,为数甚少的Google Fellow之二。 Jeff Dean其人:http://research.google.com/people/jeff/index.html,Google大规模分布式平台Bigta.. 阅读全文
摘要:
1libevlibev所实现的功能就是一个强大的reactor,可能notify事件主要包括下面这些:ev_io // IO可读可写ev_stat // 文件属性变化ev_async // 激活线程ev_signal // 信号处理ev_timer // 定时器ev_periodic // 周期任务ev_child // 子进程状态变化ev_fork // 开辟进程ev_cleanup // event loop退出触发事件ev_idle // 每次event loop空闲触发事件ev_embed // TODO(zhangyan04):I have no idea.ev_prepare // 阅读全文
摘要:
ubuntu下安装libev开发包:$ sudo apt-get install libev-dev下面是libev的man page自带的libev用法示例,保存到testlibev.c 1 // a single header file is required 2 #include <ev.h> 3 4 #include <stdio.h> // for puts 5 6 // every watcher type has its own typedef’d struct 7 // with the name ev_TYPE 8 ev_io stdin_watche 阅读全文
摘要:
libevent是一个异步事件处理软件函式库,以BSD许可证发布。libevent提供了一组应用程序编程接口(API),让程式设计师可以设定某些事件发生时所执行的函式,也就是说,libevent可以用来取代网络服务器所使用的事件循环检查框架。由于可以省去对网络的处理,且拥有不错的效能,有些软件使用libevent作为网络底层的函式库,如:memcached、Tor。目前libevent支持以下的方式判断IO事件:poll(2)select(2)几乎所有的Unix平台都有提供的函式。/dev/pool以Solaris平台为主。kqueue(2)以BSD平台为主。epoll(2)以Linux平台为 阅读全文