- 博客(21)
- 资源 (5)
- 收藏
- 关注
转载 enable_if
1 导言 使用 enable_if 系列模板可以控制一个函数模板或类模板偏特化是否包含在基于模板参数属性的一系列匹配函数或偏特化中。比如,我们可以定义一个只对某些类型(通过特征类[traits class]定义)有效——当然也只匹配这些类型——的函数模板。enable_if 也可以对类模板偏特化实现同样的效果。enable_if 的应用在 [1] 和 [2] 中有详细的介绍。
2012-03-31 17:46:49 6433
转载 模板特化和偏特化
摘要:本文通过例子介绍了在 C++标准库中广泛使用的模板特化和偏特化,并指出了模板特化和偏特化的定义规则和应用规则。关键词:模板、特化、偏特化1.引言C++中的模板分为类模板和函数模板,虽然它引进到C++标准中的时间不是很长,但是却得到了广泛的应用,这一点在STL中有着充分的体现。目前,STL在C++社区中得到了广泛的关注、应用和研究。理解和掌握模板是学习、应用和研究以及扩充STL
2012-03-31 17:23:25 846
转载 boost锁的概述
● boost锁的概述boost库中提供了mutex类与lock类,通过组合可以轻易的构建读写锁与互斥锁。 ▲ mutex对象类mutex类主要有两种:boost::mutex,boost::shared_mutex,其中mutex有lock和unlock方法,shared_mutex除了提供lock和unlock方法外,还有shared_lock和shar
2012-03-31 16:05:43 24051
转载 boost::mutex vs boost::recursive_mutex
boost::mutex vs boost::recursive_mutex boost::mutex is not re-entrant, a thread can only lock it once, otherwise it’s dead-locked. The following code snippet demonstrates it: #include "boo
2012-03-31 15:29:50 1218
转载 boost::bind 源代码分析
boost::bind库绝对是最有用,最有价值的库之一,已被纳入tr1。bind库的出现,替代了stl中的mem_fun,ptr_fun,bind1st,bin2nd等函数本文并不介绍bind的使用,而是从bind的源代码(boost1.38.0)中分析出它的实现原理bind执行大致可分为2个过程 1:构造函数对象 2:调用函数对象下面我们以以下代码为列,抽丝剥茧,分析bind
2012-03-31 14:41:18 2176 2
转载 C++仿函数
仿函数(Functor、Function Object)传递给STL算法的函数型参数(functional arguement)不一定要是函数,可以是行为类似于函数的对象,即Function Object或者Functor。STL中大量运用了Function Object,也提供了很多预先定义的Function Object。如果你定义了一个对象,其行为像函数,就可以拿来当函数使用。
2012-03-29 17:23:23 580
转载 Boost::asio io_service 实现分析
io_service的作用io_servie 实现了一个任务队列,这里的任务就是void(void)的函数。Io_servie最常用的两个接口是post和run,post向任务队列中投递任务,run是执行队列中的任务,直到全部执行完毕,并且run可以被N个线程调用。Io_service是完全线程安全的队列。Io_servie的接口提供的接口有run、run_one、poll、poll_
2012-03-29 16:10:25 1193
转载 Boost::asio io_service 实现分析
io_service的作用io_servie 实现了一个任务队列,这里的任务就是void(void)的函数。Io_servie最常用的两个接口是post和run,post向任务队列中投递任务,run是执行队列中的任务,直到全部执行完毕,并且run可以被N个线程调用。Io_service是完全线程安全的队列。Io_servie的接口提供的接口有run、run_one、poll、poll_
2012-03-29 16:00:03 103
转载 利用信号监视进程存在
下面这个例程可以用于监视某个进程是否存在。 #include #include using namespace std; int get_pid(string & managerName){ string strCmd = "pidof "+managerName; FILE *pp; char buffer[10]
2012-03-29 10:44:04 449
转载 resolve的用法和endpoint浅析
tcp::resolver 一般和 tcp::resolver::query 结合用 , 通过query这个词顾名思义就知道它是用来查询socket 的相应信息,一般而言我们关心socket的东东有address,port而已,通过tcp::resolver 很容易实现设置和查询,它通过query把字符串格式的ip如192.168.0.200或主机名http:://localhost,端口“808
2012-03-28 16:11:45 1036
转载 理解inode
一、inode是什么?理解inode,要从文件储存说起。文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 s
2012-03-26 16:12:02 328
转载 通过打开文件的fd值,如何找到被打开文件文件的全路径
通过打开文件的fd值,如何找到被打开文件文件的全路径 fd1 = open(filename, O_RDWR)我们知道当我们调用open的时候,会得到一个fd的文件描述符。这个文件描述符是保存在:/proc/getpid()/fd/fd1,通过这个文件描述符符,调用readlink我们就可以知道打开文件的路径了。 示例代码如下: 1 #include"all.
2012-03-26 15:39:33 1490
转载 为什么用ls和du显示出来的文件大小有差别?
曾经有几次,我用ls和du查看一个文件的大小,发现二者显示出来的大小并不一致,例如:bl@d3:~/test/sparse_file$ ls -l fs.img-rw-r--r-- 1 bl bl 1073741824 2012-02-17 05:09 fs.img复制代码bl@d3:~/test/sparse_file$ du -sh fs.img0 fs
2012-03-24 23:33:11 526
转载 文件空洞产生的原因分析
在文件拷贝时候,scp一个占磁盘空间300G大小(du命令的结果)左右的目录到另外一台机器上,du命令发现该目录占用的磁盘空间变大了,约330多G。为什么会多出来这30G呢?分析可能原因:一.原机器的block大小为1024k,新机器的block大小为4096k,可能是文件系统block大小引起的。拷贝的数据文件大概有1000个,文件块的影响也就是1
2012-03-24 23:11:38 645
转载 GDB调试信号、多进程、多线程
GDB的功能很强大,本文主要介绍用GDB来调试信号、多进程、多线程,具体如下:(一)信号GDB有能力在你调试程序的时候处理任何一种信号,你可以告诉GDB需要处理哪一种信号。你可以要求GDB收到你所指定的信号时,马上停住正在运行的程序,以供你进行调试。你可以用GDB的handle命令来完成这一功能。 handle 在GDB中定义一个信号处理。信号可以以SI
2012-03-21 12:26:36 599
转载 设计模式 reactor和proactor
在高性能的I/O设计中,有两个比较著名的模式Reactor和Proactor模式,其中Reactor模式用于同步I/O,而Proactor运用于异步I/O操作。 在比较这两个模式之前,我们首先的搞明白几个概念,什么是阻塞和非阻塞,什么是同步和异步,同步和异步是针对应用程序和内核的交互而言的,同步指的是用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪,而异步是指用户进
2012-03-15 17:09:43 427
转载 sigaction函数 - 改变信号行为
函数原型:int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); 函数描述:The sigaction() function allows the calling process to examine and/or specify the action to be associated
2012-03-14 14:25:25 472
转载 Linux 实时信号 非实时信号
实时信号之所以是可靠的,因为在进程阻塞该信号的时间内,发给该进程的所有实时信号会排队,而非实时信号则会合并为一个信号。早期的kill函数只能向特定的进程发送一个特定的信号,并且早期的信号处理函数也不能接受附加数据。siqueue和sigaction解决了这个问题。平时没有有机会使用实时信号,所以想体验下它的排队特性。 下面这个例子中,进程先屏蔽SIGINT和SIGRTMIN两个
2012-03-14 14:00:07 3305 1
转载 sigprocmask系统调用
功能描述:设定对信号屏蔽集内的信号的处理方式(阻塞或不阻塞)。用法:#include int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);参数:how:用于指定信号修改的方式,可能选择有三种SIG_BLOCK //加入信号到进程屏蔽。SIG_UNBLOCK //从进程屏蔽里将信号删除。SIG
2012-03-14 12:50:41 417
转载 ctrl+c,ctrl+d,ctrl+z在linux中意义
linux下: ctrl-c 发送 SIGINT 信号给前台进程组中的所有进程。常用于终止正在运行的程序。 ctrl-z 发送 SIGTSTP 信号给前台进程组中的所有进程,常用于挂起一个进程。 ctrl-d 不是发送信号,而是表示一个特殊的二进制值,表linux下:ctrl-c 发送 SIGINT 信号给前台进程组中的所有进程。常用于终止正在运行的程序。ctrl-z 发送 SIGTS
2012-03-12 17:52:27 1823
转载 Linux 进程状态
Linux进程状态:R (TASK_RUNNING),可执行状态。只有在该状态的进程才可能在CPU上运行。而同一时刻可能有多个进程处于可执行状态,这些进程的task_struct结构(进程控制块)被放入对应CPU的可执行队列中(一个进程最多只能出现在一个CPU的可执行队列中)。进程调度器的任务就是从各个CPU的可执行队列中分别选择一个进程在该CPU上运行。很多操作系统教科书将正在CPU上执
2012-03-06 11:25:51 382
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人