- 博客(27)
- 资源 (8)
- 问答 (1)
- 收藏
- 关注
原创 make条件判断ifeq,ifneq,ifdef,ifndef
使用条件判断,可以让make根据运行时的不同情况选择不同的执行分支。条件表达式可以是比较变量的值,或是比较变量和常量的值。 一、示例 下面的例子,判断$(CC)变量是否“gcc”,如果是的话,则使用GNU函数编译目标。 libs_for_gcc = -lgnu normal_libs = foo: $(objects) ife
2013-02-26 14:27:55 73547 2
原创 makefile函数集锦
Makefile 常用函数表一、字符串处理函数1.$(subst FROM,TO,TEXT)函数名称:字符串替换函数—subst。函数功能:把字串“TEXT”中的“FROM”字符替换为“TO”。返回值:替换后的新字符串。2.$(patsubst PATTERN,REPLACEMENT,TEXT)函数名称:模式替换函数—patsubst。函数功能:搜索“TEXT”中
2013-02-26 11:10:47 1746
原创 C++中产生随机数
C/C++怎样产生随机数:这里要用到的是rand()函数, srand()函数,C语言/C++里没有自带的random(int number)函数。(1) 如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机数值, 范围在0至RAND_MAX 间。RAND_MAX定义在stdlib.h, 其值为2147483647。例如:#incl
2013-02-25 19:48:50 832
原创 linux信号锁的封装与实现
信号量的值与相应资源的使用情况有关,当它的值大于 0 时,表示当前可用的资源数的数量;当它的值小于 0 时,其绝对值表示等待使用该资源的进程个数。信号量的值仅能由 PV 操作来改变。 在 Linux 下,PV 操作通过调用semop函数来实现。该函数定义在头文件 sys/sem.h中,原型如下: int semop(int semid,struct
2013-02-25 17:15:10 2763
原创 linux select 多路复用机制
函数作用:系统提供select函数来实现多路复用输入/输出模型。select系统调用是用来让我们的程序监视多个文件句柄的状态变化的。程序会停在select这里等待,直到被监视的文件句柄有一个或多个发生了状态改变。关于文件句柄,其实就是一个整数,我们最熟悉的句柄是0、1、2三个,0是标准输入,1是标准输出,2是标准错误输出。0、1、2是整数表示的,对应的FILE *结构的表示就是stdin、
2013-02-25 14:18:45 38433 8
原创 LINUX 共享内存越界
shmget的时候,我们能指定共享内存的size,当size越界的时候,会如何呢?如下:/* * ShareMem.h * * Created on: 2013-2-25 * Author: coreycui */#ifndef SHAREMEM_H_#define SHAREMEM_H_#include #include #include
2013-02-25 11:07:56 2692
转载 linux共享内存
共享内存是系统出于多个进程之间通讯的考虑,而预留的的一块内存区。在/proc/sys/kernel/目录下,记录着共享内存的一些限制,如一个共享内存区的最大字节数shmmax,系统范围内最大共享内存区标识符数shmmni等,可以手工对其调整,但不推荐这样做。一、应用共享内存的使用,主要有以下几个API:ftok()、shmget()、shmat()、shmdt()及shmctl()
2013-02-25 10:52:30 1043
原创 linux文件锁实现
linux文件锁是默认的劝告锁。以下证实两点:1)读写锁分别的排他性。2)当文件上锁区域交叉时的锁竞争关系。FIleMutex.h:class FileMutex {public: FileMutex(const string& filename); virtual ~FileMutex(); int lockR(int offset,int len);
2013-02-24 23:38:14 1671
转载 Linux 2.6 中的文件锁
在多任务操作系统环境中,如果一个进程尝试对正在被其他进程读取的文件进行写操作,可能会导致正在进行读操作的进程读取到一些被破坏或者不完整的数据;如果两个进程并发对同一个文件进行写操作,可能会导致该文件遭到破坏。因此,为了避免发生这种问题,必须要采用某种机制来解决多个进程并发访问同一个文件时所面临的同步问题,由此而产生了文件加锁方面的技术。早期的 UNIX 系统只支持对整个文件进行加锁,因此无
2013-02-24 13:31:42 859
原创 mutex和cond为何需要配合使用
pthread_cond_wait总和一个互斥锁结合使用。在调用pthread_cond_wait前要先获取锁。pthread_cond_wait函数执行时先自动释放指定的锁,然后等待条件变量的变化。在函数调用返回之前,自动将指定的互斥量重新锁住。int pthread_cond_signal(pthread_cond_t * cond);pthread_cond_signal通过
2013-02-23 19:32:23 6475
原创 C++线程锁封装
C++线程锁的封装,主要提供lock,unlock,require等操作,需要注意的是线程重复获取锁的问题,设置了一个count的计数器,该计算器之所以不考虑++,--的原子操作的问题,是因为该计数器本身就在lock与unlock中,所以本身是线程安全的。另外mutable count是将count的变化操作防止在const方法中,保证方法语义。class TC_T
2013-02-22 18:20:21 2948
转载 mutalbe解析
的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。 在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。 我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的。但是,有些时候,我们需要在const的函数里面修改一些跟类状
2013-02-22 17:36:20 680
转载 C++中public,protected,private访问
当private,public,protected单纯的作为一个类中的成员权限设置时:private: 只能由该类中的函数、其友元函数访问,不能被任何其他访问,该类的对象也不能访问. protected: 可以被该类中的函数、子类的函数、以及其友元函数访问,但不能被该类的对象访问 public: 可以被该类中的函数、子类的函数、其友元函数访问,也可以由该类的对象访问
2013-02-22 16:56:41 701
转载 java和C++语法上的一些区别
1)java是解释性语言,java程序在运行时类加载器从类路经中加载相关的类,然后java虚拟机读取该类文件的字节,执行相应操作.而C++编译的 时候将程序编译成本地机器码.一般来说java程序执行速度要比C++慢10-30倍.即使采用just-in-time compiling (读取类文件字节后,编译成本地机器码)技术,速度也要比C++慢好多.2)java程序有要从网络上加载类字节
2013-02-21 11:26:34 3653
转载 关于反码取值的一些思考
#include int main(void){ unsigned char a = 0xa5; printf("%d\n",~a); char b = ~a; printf("%d\n",b); unsigned char c = ~a; printf("%d\n",c); retu
2013-02-21 00:51:29 870
转载 嵌套模版类
Templates can be defined within classes or class templates, in which case they are referred to as member templates. Member templates that are classes are referred to as nested class templates. Member
2013-02-19 16:44:33 725
原创 C++ 模版中的一些稀奇古怪的技巧
typename和.template的其他用法。将成员函数和嵌套类也定义为模板。模板的模板参数。零初始化。使用字符串作为模板实参时需要注意的地方。一:typename和.template的另类用法。 先看typename。在前面,typename总是用来定义一个模板参数,在这个时候他和classname有相同的功效。可是,typename的作用并不限于此。试想,在模板参数的类型中有一
2013-02-19 16:21:43 769 1
原创 placement new
placement new 是重载operator new 的一个标准、全局的版本,它不能够被自定义的版本代替(不像普通版本的operator new 和 operator delete能够被替换)。void *operator new( size_t, void *p ) throw() { return p; }placement new的执行忽略了size_t参数,只
2013-02-19 16:01:32 422
原创 BufferedReader
BufferedReader有一个我们比较喜欢的方法,readLine,但是注意,该方法not including any line-termination characters, or null if the end of the stream has been reached。也就是说该方法将吃掉换行符。请注意。
2013-02-18 22:45:17 579
原创 c/c++ 变参
从写了好几年的java转到写c上来,充分的理解到了一句话“由俭入奢易,由奢入俭难”。习惯了java中的API和设计以及强大的JIT编译器和对语法的理解,对于C++实在是有点觉得设计者脑残,比如变参。变参的使用方式如下,其中变参表示待累加的参数int/*calculate_status*/ add(int* sum/*result*/,...){va_list vas;va_
2013-02-16 23:12:53 1161
原创 linux syslog日志服务
简介 不同的Linux发行版使用不同syslog程序来记录系统日志。的Debain 4.0/Ubuntu8.04(桌面版)默认使用的是sysklogd,配置文件为/etc/syslog.conf。Fedora9默认使用rsyslogd,配置文件为/etc/rsyslog.conf。ubuntu中使用rsyslog,配置文件在/etc/rsyslog.d/50-default.con
2013-02-14 22:24:40 6177
原创 Eclipse为action新增快捷键
在Eclipse的Plugin开发中,给Action增加快捷键是很简单的,只要在插件的plugin.xml加入如下内容即可: point = "org.eclipse.ui.commands"> name="Bacchus.Category1" description="Test description" id="Bacchus.Category
2013-02-13 02:16:44 2466
原创 关于HttpServer的time-wait
TIME_WAIT状态根据TCP协议,主动发起关闭的一方,会进入TIME_WAIT状态,持续2*MSL(Max Segment Lifetime),缺省为240秒,在这个post中简洁的介绍了为什么需要这个状态。值得一说的是,对于基于TCP的HTTP协议,关闭TCP连接的是Server端,这样,Server端会进入TIME_WAIT状态,可想而知,对于访问量大的Web Server
2013-02-08 14:44:30 2039
原创 time_wait和close_wait
总结:一端忘记close,将造成另一端大量的close_wait的状态。主动执行close的一端,在量特别大的情况下,对so_linger没有做设置,将造成大量的time_wait状态的连接。TCP状态转移要点TCP协议规定,对于已经建立的连接,网络双方要进行四次握手才能成功断开连接,如果缺少了其中某个步骤,将会使连接处于假死状态,连接本身占用的
2013-02-08 13:49:14 2274
转载 慎用TCP的选项SO_LINGER
原文地址:http://blog.csdn.net/fullsail/article/details/4424324最近有一次性能测试,通讯程序出现错误,表现为服务器处理速度明显降低,检查发现服务器的很多句柄出于TIME_WAIT状态,后来发现测试用例写的有问题,在recv函数返回0后,没有close句柄。我很郁闷google了一下如何处理这类错误,发现了SO_LINGER这个选项,发现这
2013-02-07 16:17:15 800
原创 本地字节顺序和网络字节顺序
在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺序的问题。这是就可能用到htons(), ntohl(), ntohs(),htons()这4个函数。网络字节顺序与本地字节顺序之间的转换函数: htonl()--"Host to Network Long" ntohl()--"Network to Host Long" htons
2013-02-01 11:26:10 850
原创 Makefile的变量
$@代表规则中的目标文件名。如果目标是一个文档(Linux中,一般称.a文件为文档),那么它代表这个文档的文件名。在多目标的模式规则中,它代表的是哪个触发规则被执行的目标文件名。$%规则的目标文件是一个静态库文件时,代表静态库的一个成员名。例如,规则的目标是“foo.a(bar.o)”,那么,“$%”的值就为“bar.o”,“$@”的值为“foo.a”。如果目标不是函数库文件,其值为空
2013-02-01 10:09:24 492
Java动画、图形和极富客户端效果
2010-03-22
成都环境怎么样?
2010-11-15
TA创建的收藏夹 TA关注的收藏夹
TA关注的人