
1.1 C/C++
文章平均质量分 70
AshlingR
C/C++ ,linux,网络编程,http协议,分布式 欢迎技术交流
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
从源码来看auto_ptr的特性
大家都知道,C++的auto_ptr auto_ptr所做的事情,就是动态分配对象以及当对象不再需要时自动执行清理。然而对于auto_ptr来说,它的规则也挺难记,有时候,我也在想,为什么会有这些规则呢,1) 两个auto_ptr不能同时拥有同一个对象2) 我们不应该用auto_ptr来管理一个数组指针。3) auto_ptr赋值运算,应该叫传值,传给别人,自己没有了。4) aut原创 2012-12-14 14:55:20 · 3382 阅读 · 1 评论 -
unix 网络编程--select (一)
下面是一个很不错的select的例子,避免了调用fork而产生的新进程的开销:下面是server 代码:#include #include #include /* See NOTES */#include #include #include #include #include #include #define MAXLINE 1024typ原创 2012-11-15 21:37:15 · 2497 阅读 · 0 评论 -
C++库大全
基础类 1、 Dinkumware C++ Library参考站点:http://www.dinkumware.comP.J. Plauger编写的高品质的标准库。P.J. Plauger博士是Dr. Dobb's程序设计杰出奖的获得者。其编写的库长期被Microsoft采用,并且最近Borland也取得了其OEM的license,在其C/C+ +的产品中采用Dinkumw转载 2012-12-17 12:13:18 · 1415 阅读 · 0 评论 -
关于C++ const 的全面总结
C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助。Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。 一、Const作用 如下表所示:No.作用说明参考代码转载 2012-12-16 12:19:52 · 135 阅读 · 0 评论 -
FIFO读写产生SIGPIPE信号
以前一直在听说产生SIGPIPE信号,我但我平时遇得少,没怎么管它,今天一小心就遇到先看代码吧#include #include #include #include #include #include #include #include #define FIFO_FN "/tmp/test"void catch_pipe(int n) { printf("sign原创 2012-12-27 21:58:22 · 2781 阅读 · 0 评论 -
设计模式 之 STATE(状态)实例 —对象行为型模式
本文是对于 《设计模式 可复用面向对象软件的基础 Erich Gamma、Richard Helm》一书中的状态模型例子进行实现,并做了一些说明引目: 考虑一个表示网络连接的类T C P C o n n e c t i o n。一个T C P C o n n e c t i o n对象的状态处于若干不同状态之一: 连接已建立( E s t a b l i s原创 2012-12-06 19:33:39 · 5191 阅读 · 0 评论 -
File:f:\dd\vctools\crt_bld\_self_x86\crt\src\flength.c解决方式
问题: File:f:\dd\vctools\crt_bld\_self_x86\crt\src\flength.cDebug|Win32编译选项。环境是vs2008编译成功,但运行时就出现如下图所示的错误:出错代码大致如下:int main(int arg ,char ** argc){/*省略内容*/ int fh1 = _open( "CRT_原创 2012-09-23 22:15:37 · 7331 阅读 · 3 评论 -
UNIX 网络编程测试代码 -- UDP通信
运行环境:centos 6.3 说明 :UNIX 网络编程测试代码将客户端、服务端、以及广播消息的服务端都集成一段代码里面,个人感觉还不错呵呵呵里面的注释不多,但是应该不难读懂的,还算比较容易可以把一面代码直接贴下来,用gcc 编译跑一下,会发现在效果还不错#include #include /* See NOTES */#include原创 2012-11-08 13:11:09 · 3760 阅读 · 0 评论 -
vs2005中字节对齐研究
一、什么是字节对齐,为什么要对齐?[本段Quote自] 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些转载 2012-10-08 15:20:06 · 1982 阅读 · 0 评论 -
getaddrinfo()函数详解 、getsockname、getpeername
部分内容是引用:http://www.cnblogs.com/cxz2009/archive/2010/11/19/1881693.htmlgetaddrinfo()函数详解 1. 概述IPv4中使用gethostbyname()函数完成主机名到地址解析,这个函数仅仅支持IPv4,且不允许调用者指定所需地址类型的任何信息,返回的结构只包含了用于存储IPv4地址的空间。I原创 2012-04-22 16:04:41 · 2594 阅读 · 0 评论 -
APUE小结之 Unix/Linux core文件
转载请注明出处:http://blog.chinaunix.net/u3/105349/showart.php?id=21214191. 什么是 core 文件 在一个进程异常终止时,在一定的条件下(下面将介绍),会在当前工作目录下生成一个core文件。 core文件是该进程(异常终止时)的内存映像(同时加上调试信息)。大多数调试程序都使用 core 文件以检查进程终止转载 2012-10-27 20:16:26 · 810 阅读 · 0 评论 -
C++ 实现线程池的精典模型
内容做了部分修改,更新内容为: http://blog.youkuaiyun.com/rao_warrior/article/details/8607228原创 2013-01-03 12:57:25 · 977 阅读 · 0 评论 -
看源码学C++运算符重载
“什么是运算符的重载”与“为什么要引入运算符重载?”这两个问题,在这里都不多说了,百度一下就都OK了下面说了一下一些比较容易错的重载,首先看看模板们是如何声明重载的下是iterator 模板中的一段源码,大家看看它的格式:iterator 的一段源码 typedef _Vector_iterator _Myt; reference operator*() const {原创 2013-03-21 20:01:56 · 3251 阅读 · 0 评论 -
二叉树的各种操作总汇(c/c++语言实现)
本文总结二叉树的各种操作与C语言的实现头文件#include #include #include #include using namespace std ;数据结构typedef struct Node{ char data ; struct Node * rchild ; struct Node * lchild ;}Node,*pNode;原创 2013-03-23 18:17:07 · 2945 阅读 · 0 评论 -
C++ 实现线程池的精典模型
什么时候需要创建线程池呢?简单的说,如果一个应用需要频繁的创建和销毁线程,而任务执行的时间又非常短,这样线程创建和销毁的带来的开销就不容忽视,这时也是线程池该出场的机会了。如果线程创建和销毁时间相比任务执行时间可以忽略不计,则没有必要使用线程池了。下面列出线程的一些重要的函数int pthread_create(pthread_t *thread, const pthread_at原创 2013-02-24 18:27:57 · 3525 阅读 · 0 评论 -
makefile高级编写示例详解
下面是一个段比较精典的makefile编译示例代码,首先介绍一下代码环境。有三个源文件:a.c b.c main.c ,有两个头文件 a.h b.h ,示例代码与下a.c文件#include "a.h"int myadd(int a,int b){ printf("myadd\n"); return a+b+1 ;}int mysub(int a,int b){ prin原创 2014-02-11 09:38:59 · 1337 阅读 · 0 评论 -
MD5加密算法(c语言实现)
md5.h文件/*md5.hauthor mwater.www.epopsoft.com */#ifndef _MD5_H_#define _MD5_H_#include #define R_memset(x, y, z) memset(x, y, z)#define R_memcpy(x, y, z) memcpy(x, y, z)#define R_memcmp原创 2013-08-19 19:32:46 · 2085 阅读 · 0 评论 -
网络编程简单例子(windows、linux)
//client#include #include void main(){ WORD wVersionRequested ; WSADATA wsaData ; int err; wVersionRequested = MAKEWORD( 1, 1) ; err = WSAStartup( wVersionRequested ,&wsaData ); if(err != 0)原创 2013-08-14 11:09:52 · 1772 阅读 · 1 评论 -
nginx负载均衡策略分析[一](round_robin模块概要)
1.基本情况模块名:round_robin文件位置:ngx_http_upstream_round_robin.c运行阶段:content_phaseRR策略做为默认策略每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。例如: upstream tomcats { server 10.1.1.107:88 max_fails=原创 2013-05-29 21:04:58 · 2457 阅读 · 0 评论 -
用汇编来看看inline
inline说明 inline关键字仅仅是建议编译器做内联展开处理,而不是强制。在gcc编译器中,如果编译优化设置为O0,即使是inline函数也不会被内联展开,除非设置了强制内联(__attribute__((always_inline)))属性。对于可展开与必须当成函数的情形同时出现,则在展开处需展开,在当成函数调用处则当函数处理.有下面几个文件test.h ,test6.c原创 2013-03-28 11:28:21 · 2061 阅读 · 0 评论 -
一个string类的实现
下面是一个string 类一般实现,重点在于操作符的重载,以后会继续更新#includeusing namespace std;class String{ friend ostream& operator<< (ostream&,String&);public: String(const char* str=NULL); //赋值构造兼默认构造函数(char) St原创 2013-04-08 09:39:33 · 877 阅读 · 0 评论 -
位操作的一些很实用的例子
位操作带来的快速的运算,下面是一些位操作的小技巧1.求一个数的绝对值unsigned int myabs(int a){ if(a>0) return (unsigned int)a; if(a<0) return 0-(unsigned int )a ;}2.判断两个整数是否同号bool check(int a,int b){ if((unsigned int)(原创 2013-03-24 23:43:06 · 907 阅读 · 0 评论 -
c++一些不常见的东西
1.new 在现有的堆上再次分配char *cp = new char[100],ch[50];int *p = new(cp) int ;*p=58;delete p;cp = cp+sizeof(int);delete cp;//错误,不能释放两次int *p = new(ch) int ; //利用现有栈空间重新分配delete *p ; //错误,不能原创 2012-12-14 09:55:51 · 3375 阅读 · 0 评论 -
main函数的汇编代码
本文主要对main函数编译后生成的汇编码进行观察,为了简单起见,main函数的内容为空。(注:以下部分内容来自于新浪博客)实验方法如下:首先在不同环境下编译源代码,收集生成的可执行文件;随后将可执行文件使用IDA Pro(版本为5.5,这里赞一下强大的IDA!)进行反汇编;最后观察main函数的汇编码(所有汇编码格式都是Intel风格的),进行分析与比较。本文重点在于讨论一些最基本的概念,原创 2013-03-21 10:47:51 · 6274 阅读 · 0 评论 -
构造函数能不能是虚函数
转至:http://blog.youkuaiyun.com/woyaowenzi/article/details/2310710最近有人问构造函数能不能是虚函数:当然不能解释一下: 1,从存储空间角度 虚函数对应一个vtable,这大家都知道,可是这个vtable其实是存储在对象的内存空间的。问题出来了,如果构造函数是虚的,就需要通过 vtable来调用转载 2012-11-04 12:45:05 · 646 阅读 · 0 评论 -
析构函数可以是纯虚函数
在某些类里声明纯虚析构函数很方便。纯虚函数将产生抽象类——不能实例化的类(即不能创建此类型的对象)。有些时候,你想使一个类成为抽象类,但刚好又没有任何纯虚函数。怎么办?因为抽象类是准备被用做基类的,基类必须要有一个虚析构函数,纯虚函数会产生抽象类,所以方法很简单:在想要成为抽象类的类里声明一个纯虚析构函数。 class awov { public: vi转载 2012-11-04 12:50:03 · 1608 阅读 · 1 评论 -
有关dup的疑惑
代码一:int main(){ int fd = open("/home/lrao/test", O_CREAT | O_RDWR | O_APPEND, S_IRWXU|S_IRWXG|S_IRWXO) ; close(1) ; int fd2 = dup(fd) ; printf("hello"); write(fd,"\r\nwrite\r\n",9); wri原创 2012-10-24 16:37:37 · 1343 阅读 · 0 评论 -
设计模式大集锦 程序员面试全攻略
无论你是参与Java面试还是C#面试,设计模式和软件设计问题在程序员面试中是必不可少的一部分。编程和设计技两者相得益彰,一名出色的程序员也是一名出色的设计师,他们懂得如何利用代码来解决问题或者软件设计,但是这些技能需要不断提升。这就要求你不断的保持设计理念,无论编程项目的大小,从失败中总结经验。从面向对象的设计原则开始学习是个不错的起点。本文总结了在各种面试过程中经常被提及的一些设计问题。转载 2012-09-10 09:30:41 · 761 阅读 · 0 评论 -
12个有趣的C语言面试题
1.gets()函数问:请找出下面代码里的问题:#include int main(void) { char buff[10]; memset(buff,0,sizeof(buff)); gets(buff); printf("\n The buffer entered is [%s]\n",buff); return 0; } 答转载 2012-09-09 23:57:12 · 2594 阅读 · 0 评论 -
VC内存泄漏的解决方法
程序退出后都出现内存泄漏:Detected memory leaks!Dumping objects ->{98500} normal block at 0x05785AD0, 152 bytes long. Data: 3C AC 4E 10 00 00 00 00 BC A4 4E 10 78 B6 37 00Object dump complete.而且每次退出转载 2012-09-26 12:15:33 · 1252 阅读 · 0 评论 -
staic 在类中的访问规则与 non-staic 一样
#include using namespace std;class base { static int priInt ;protected : static int proInt ;public: static int pubInt ;};int base::priInt = 1;int base::proInt = 2;int base::pubInt = 3 ;原创 2012-09-06 19:14:08 · 491 阅读 · 0 评论 -
常用的日志信息的宏
#if defined (DRM_LOG_MSG_S)#define _D_LOG_DIR "./LOG"#define PLAY_MSG_LOG(X) { \ if(NULL != (X)) { \ char tempbuf[30]; struct tm ti; \ FILE *file =NULL; __time64_t long_ti原创 2012-08-24 14:11:49 · 817 阅读 · 0 评论 -
关于const_cast 和 修改const 的值
/*用法:const_cast (expression) 该运算符用来修改类型的const或volatile属性。除了const 或volatile修饰之外, type_id和expression的类型是一样的。 一、常量指针被转化成非常量指针,并且仍然指向原来的对象; 二、常量引用被转换成非常量引用,并且仍然指向原来的对象; 三、常量对象被转换成非常量对象。 type_i原创 2012-08-21 09:58:29 · 1747 阅读 · 0 评论 -
C++ 类中的常量 const 、define、static 赋值问题
先看下面一个类:class A{ static const int sci; const int cim; int ni; #define MYCONST"sdfs"};里面两个成员,一个静态常量,一个整型常量。在用G++ 编译,只要你不用这两个成员,是可以通过的。下面看看如何对它们赋值。对于sci赋值:1原创 2012-08-14 21:40:27 · 3986 阅读 · 2 评论 -
将对setjmp与longjmp的具体使用方法和适用的场合,进行一个非常全面的阐述
int setjmp(jmp_buf jmpb) 设置缓冲区来保存堆栈的内容,将保存的上下文存入进程的自身的数据空间(u区),并继续在当前的上下文中执行,一旦碰到了longjmp,进城就从该进程 的u区,取出先前保存的上下文,并恢复该进程的上下文为先前保存的上下文。这时核心将使得进程从setjmp处执行(摘自:unix平台下c语言高级编程 指南)void longjmp(jmp_buf转载 2012-08-13 10:05:05 · 889 阅读 · 0 评论 -
c语言连接mysql中文显示乱码问题-解决方案
首先用、mysql> show variables like 'char%';查看默认的编码方式在连接数据库成功后,使用函数int mysql_set_character_set( MYSQL * mysql, char * csname);该函数用于为当前连接设置默认的字符集。字符串csname指定了1个有效的字符集名称。连接校对成为字符集的默认校对。该函数的工作方式与SET N原创 2012-05-04 18:44:27 · 1899 阅读 · 0 评论 -
关于数据在内存中存储有点让我不解
#include using namespace std;struct st{ char i; int m;void prin(){ cout <<"this is hello"<<endl;}void prin2(){ cout <<"this is print2"<<endl;}};int main(){ cout << sizeof(st) <原创 2012-06-22 16:49:36 · 622 阅读 · 0 评论 -
守护进程
守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进 程。 Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任务。比如,作业规划进程crond,打印进程lpd等。守护进程的编程本身并不复杂,复杂的是各种版本的Un转载 2012-10-02 20:27:38 · 886 阅读 · 0 评论 -
关于文件读写冲突问题的探索
我在写日志记录时,项目当然是多线程、多进程的。有时候会出fwrite.c错误(windows 下面),项目中除了日志会对文件进行读写而外,没有文件读内容,所以第一个想法就是:是不是日志写发生冲突了? 虽然这种错误的情况比较少,但还是引起了我的注意,于是我有一个问题:多进程、多线程对文件进行写操作会不会发生写冲突?为此我在 ubuntu上做了一下试验,代码如下:#include #incl原创 2012-10-04 11:26:58 · 7024 阅读 · 0 评论 -
unix C 出错处理函数
1、strerror的实现:char *strerror(errnum) int errnum;{ extern int sys_nerr; extern char *sys_errlist[]; static char ebuf[20]; if ((unsigned int)errnum < sys_nerr) return(sys_errlist[errnum]);原创 2012-10-05 15:10:17 · 1590 阅读 · 0 评论