keep_simple

导航

2013年11月10日 #

inotify监听文件夹的变动

摘要: inotify只能监控单层目录变化,不能监控子目录中的变化情况。如果需要监控子目录,需要在调用inotify_add_watch(int fd, char *dir, int mask):int建立监控时,递归建立子目录的监控,伪代码如下void addwatch(int fd, char *dir, int mask){ wd = inotify_add_watch(fd, dir, mask); 向目录集合加入(wd, dir); for (dir下所有的子目录subdir) addwatch(fd, subdir, mask);}这样就可以得到一个目录集合... 阅读全文

posted @ 2013-11-10 13:39 keep_simple 阅读(2138) 评论(0) 推荐(0) 编辑

Linux inotify功能及实现原理

摘要: 1. inotify主要功能它是一个内核用于通知用户空间程序文件系统变化的机制。众所周知,Linux 桌面系统与 MAC 或Windows相比有许多不如人意的地方,为了改善这种状况,开源社区提出用户态需要内核提供一些机制,以便用户态能够及时地得知内核或底层硬件设备发生了什么,从而能够更好地管理设备,给用户提供更好的服务,如 hotplug、udev 和 inotify 就是这种需求催生的。Hotplug 是一种内核向用户态应用通报关于热插拔设备一些事件发生的机制,桌面系统能够利用它对设备进行有效的管理,udev 动态地维护 /dev 下的设备文件,inotify 是一种文件系统的变化通知机制, 阅读全文

posted @ 2013-11-10 10:35 keep_simple 阅读(619) 评论(0) 推荐(0) 编辑

2013年11月9日 #

区分各类编译器与操作系统的宏

摘要: 转载自:http://blog.csdn.net/wulibin136/article/details/6358521编译器GCC#ifdef__GNUC__#if __GNUC__ >= 3 // GCC3.0以上Visual C++#ifdef_MSC_VER(非VC编译器很多地方也有定义)#if _MSC_VER >=1000 // VC++4.0以上#if _MSC_VER >=1100 // VC++5.0以上#if _MSC_VER >=1200 // VC++6.0以上#if _MSC_VER >=1300 // VC2003以上#if _MSC_V 阅读全文

posted @ 2013-11-09 20:55 keep_simple 阅读(657) 评论(0) 推荐(0) 编辑

编译器各种宏使用总结

摘要: 转:C/C++中宏总结C程序的源代码中可包括各种编译指令,这些指令称为预处理命令。虽然它们实际上不是C语言的一部分,但却扩展了C程序设计的环境。本节将介绍如何应用预处理程序和注释简化程序开发过程,并提高程序的可读性。ANSI标准定义的C语言预处理程序包括下列命令:#define,#error,#include,#if,#else,#elif,#endif,#ifdef,#ifndef,#undef,#line,#pragma等。非常明显,所有预处理命令均以符号#开头,下面分别加以介绍。命令#define定义了一个标识符及一个串。在源程序中每次遇到该标识符时,均以定义的串代换它。ANSI标准将标 阅读全文

posted @ 2013-11-09 20:52 keep_simple 阅读(2227) 评论(0) 推荐(0) 编辑

windows线程退出的方法

摘要: 线程的handle用处:线程的handle是指向“线程的内核对象”的,而不是指向线程本身.每个内核对象只是内核分配的一个内存块,并且只能由内核访问。该内存块是一种数据结构,它的成员负责维护对象的各种信息(eg: 安全性描述,引用计数等)。CloseHandle()在CreateThread成功之后会返回一个hThread的handle,且内核对象的计数加1,CloseHandle之后,引用计数减1,当变为0时,系统删除内核对象。但是这个handle并不能完全代表这个线程,它仅仅是线程的一个“标识”,系统和用户可以利用它对相应的线程进行必要的操纵。如果在线程成功创建后,不再需要用到这个句柄,就可 阅读全文

posted @ 2013-11-09 19:48 keep_simple 阅读(4311) 评论(0) 推荐(0) 编辑

2013年10月10日 #

Nginx开发从入门到精通

摘要: http://tengine.taobao.org/book/index.html 阅读全文

posted @ 2013-10-10 16:28 keep_simple 阅读(183) 评论(0) 推荐(0) 编辑

2013年10月9日 #

淘宝开源网络框架TBNET分析

摘要: http://blog.chinaunix.net/uid-20196318-id-3142050.html 阅读全文

posted @ 2013-10-09 13:19 keep_simple 阅读(261) 评论(0) 推荐(0) 编辑

2013年8月10日 #

关于C++11中的std::move和std::forward

摘要: std::move是一个用于提示优化的函数,过去的c++98中,由于无法将作为右值的临时变量从左值当中区别出来,所以程序运行时有大量临时变量白白的创建后又立刻销毁,其中又尤其是返回字符串std::string的函数存在最大的浪费。比如:1 std::string fileContent = “oldContent”;2 s = readFileContent(fileName);因为并不是所有情况下,C++编译器都能进行返回值优化,所以,向上面的例子中,往往会创建多个字符串。readFileContent如果没有内 部状态,那么,它的返回值多半是std::string(const std::s 阅读全文

posted @ 2013-08-10 16:34 keep_simple 阅读(1732) 评论(0) 推荐(0) 编辑

关于左值右值和左值引用右值引用

摘要: C++ 11中引入的一个非常重要的概念就是右值引用。理解右值引用是学习“移动语义”(move semantics)的基础。而要理解右值引用,就必须先区分左值与右值。 对左值和右值的一个最常见的误解是:等号左边的就是左值,等号右边的就是右值。左值和右值都是针对表达式而言的,左值是指表达式结束后依然存在的持久对象,右值是指表达式结束时就不再存在的临时对象。一个区分左值与右值的便捷方法是:看能不能对表达式取地址,如果能,则为左值,否则为右值。下面给出一些例子来进行说明。inta=10;intb=20;int*pFlag=&a;vectorvctTemp;vctTemp.push_back(1 阅读全文

posted @ 2013-08-10 16:27 keep_simple 阅读(952) 评论(0) 推荐(0) 编辑

2013年6月30日 #

Linux下Gcc生成和使用静态库和动态库详解

摘要: 一、基本概念1.1什么是库在windows平台和linux平台下都大量存在着库。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。由于windows和linux的平台不同(主要是编译器、汇编器和连接器的不同),因此二者库的二进制是不兼容的。本文仅限于介绍linux下的库。1.2库的种类linux下的库有两种:静态库和共享库(动态库)。二者的不同点在于代码被载入的时刻不同。静态库的代码在编译过程中已经被载入可执行程序,因此体积较大。共享库的代码是在可执行程序运行时才载入内存的,在编译过程中仅简单的引用,因此代码体积较小。1.3库存在的意义库是别人写好的现有的,成熟的,可以复用 阅读全文

posted @ 2013-06-30 21:20 keep_simple 阅读(551) 评论(0) 推荐(0) 编辑