C/C++
文章平均质量分 68
sws9999
2012目标:40(TML)
2010目标:::AB!!!(实现)
2009大目标 ::: S(已实现)
展开
-
linux下的c++线程池实现
http://www.cnblogs.com/osyun/archive/2012/08/31/2664938.html转载 2012-11-02 10:11:53 · 1317 阅读 · 0 评论 -
epoll介绍
<br />在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。<br />相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,在linux/posix_types.h头文件有这样的声明:<br />#define __FD_SETSIZE 1024<br />表示select最多同时监听转载 2010-09-07 16:05:00 · 518 阅读 · 0 评论 -
消息队列
优缺点消息队列只适用于单台主机的进程间通信,如果是不同主机,需要用socket等其他方式,也就不属于IPC的范畴了。消息队列可以实现异步通信,这似乎是优点,但说是它缺点也是可以的:通讯往往不是实时的。消息队列有大小限制,通常只用于小数据量的发送。系统对用户的大小限制可以通过 ulimit -q 命令进行查询。消息队列可以实现阻塞调用和非阻塞调用。实现简单,且可移植性好。 演示#include #include #include #include int main(int argc,char*a转载 2010-09-03 00:01:00 · 948 阅读 · 0 评论 -
Linux消息队列操作
对消息队列的操作无非有下面三种类型:1、 打开或创建消息队列消息队列的内核持续性要求每个消息队列都在系统范围内对应唯一的键值,所以,要获得一个消息队列的描述字,只需提供该消息队列的键值即可;注:消息队列描述字是由在系统范围内唯一的键值生成的,而键值可以看作对应系统内的一条路经。2、 读写操作消息读写操作非常简单,对开发人员来说,每个消息都类似如下的数据结构: 1. struct msgbuf 2. { 3. long mtype; 4.转载 2010-09-02 14:50:00 · 636 阅读 · 0 评论 -
stream与C实现格式化 比较
<br /> <br /> <br /> <br />stream<br />c方式的格式化<br />灵活性<br />+<br />-<br />安全性<br />+<br />-<br />效率<br />-<br />+<br /> <br /> <br />模拟实现:<br />class cpp_ostream{public: string m_str; cpp_ostream& operator <<(int i) { char原创 2010-09-13 11:22:00 · 755 阅读 · 0 评论 -
extern "C"
<br />时常在cpp的代码之中看到这样的代码: <br /><br />#ifdef __cplusplus<br />extern "C" {<br />#endif<br /><br />//一段代码<br /><br />#ifdef __cplusplus<br />}<br />#endif<br /> 这样的代码到底是什么意思呢?首先,__cplusplus是cpp中的自定义宏,那么定义了这个宏的话表示这是一段cpp的代码,也转载 2010-08-25 10:46:00 · 437 阅读 · 0 评论 -
signal函数的简单应用
<br />标准头文件<signal.h>,这个头文件定义了raise与signal函数,sig_atomic_t类型与开始执行信号事件的宏SIG。在标准要求里有6个信号宏<br /><br />http://www.5ivb.net/Info/38/Info6516/<br />---------------------------------------------------------------<br /><br />一个简单的应用<br /><br />#incl原创 2010-08-23 14:56:00 · 679 阅读 · 0 评论 -
Pthread使用手册
#include 1、创建int pthread_create( pthread_t *tid, const pthread_attr_t *attr, void *(* func) (void *), void *arg );attr: 线程属性包括:优先级、初始栈大小,是否应该成为一个守护线程。缺省设置,NULL后面是线程要执行的函数和参数成功返回 02、等待一个给定线程终止int pthread_join( pthread_t tid, void **status);转载 2010-08-20 11:47:00 · 907 阅读 · 1 评论 -
linux多线程的总结(pthread用法)
linux多线程的总结(pthread用法)<br /> #include<br />int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict attr,<br />void *(*start_rtn)(void),void *restrict arg);<br />Returns: 0 if OK, error number on failure<br /><br />第一个参数为转载 2010-08-19 20:11:00 · 1456 阅读 · 0 评论 -
处理
#pragma pack(1)原创 2010-03-17 21:25:00 · 472 阅读 · 0 评论 -
用数组的方法解决大数、巨数的阶乘结果越界的问题
用数组的方法解决大数、巨数的阶乘结果越界的问题。(不过这里的代码超出了C99标准。)Severity Description Resource In Folder Location Creation Time2 `for loop initial declaration used outside C99 mode jc.c jiecheng line 19 2005年9月5日 12:原创 2010-03-15 14:09:00 · 1147 阅读 · 0 评论 -
linux网络编程常用函数详解与实例(socket-->bind-->listen-->accept)
常用的网络命令:netstat命令netstat是用来显示网络的连接,路由表和接口统计等网络的信息.netstat有许多的选项我们常用的选项是-an用来显示详细的网络状态.至于其它的选项我们可以使用帮助telnettelnet是一个用来远程控制的程序,但是我们完全可以用这个程序来调试我们的服务端程序的.比如我们的服务器程序在监听8888端口,我们可以用telnet转载 2010-03-08 10:42:00 · 3590 阅读 · 0 评论 -
用gcc编译生成动态链接库*.so文件的方法
linux下文件的类型是不依赖于其后缀名的,但一般来讲:.o,是目标文件,相当于windows中的.obj文件.so 为共享库,是shared object,用于动态连接的,和dll差不多.a为静态库,是好多个.o合在一起,用于静态连接.la为libtool自动生成的一些共享库,vi编辑查看,主要记录了一些配置信息。可以用如下命令查看*.la文件的格式 $file *.la转载 2010-03-05 15:01:00 · 672 阅读 · 0 评论 -
编程中的命名设计那点事
在我开始设计系统的时候,我会花去很多时间去设计命名,因为好的命名和好的设计是分不开的。In the beginning was the Word, and the Word was with God, and the Word was God太初有道。道与神同在,道就是神。 (约翰福音第一章,第一节)在设计过程中给类,方法和函数好的命名会带来好的设计,虽然这不是一定成立,但原创 2010-01-19 11:38:00 · 426 阅读 · 0 评论 -
ACE开发新手上路
0.1. ACE简单环境构建 是什么? 中文介绍,很全面,很易懂。 http://wiki.huihoo.com/index.php?title=ACE 资源包 http://download.dre.vanderbilt.edu/ 选择下载 ACE.tar.gz 就可以了 存放在相应路径 例如/tmp/cd /tmp推荐安装(编译成静态库,方便进一步开发) tar -xzf ACE-5.6.6.tar.gz c原创 2010-09-19 17:47:00 · 2956 阅读 · 0 评论 -
ACE 学习必看书籍
《ACE 程序员指南》《C++网络编程 卷1:运用ACE和模式消除复杂性》《C++网络编程 卷2:基于ACE和框架的系统化复用》转载 2010-09-19 11:26:00 · 3618 阅读 · 0 评论 -
Linux下基于C/C++的Socket编程实例
#include #include #include #include #include #include #include #include #define SERVPORT 3333#define MAXDATASIZE 100 /*每次最大数据传输量 */main(int argc, char *argv[]){ int sock_fd, recvbyt原创 2012-11-02 10:10:39 · 17190 阅读 · 0 评论 -
线程池 范例
#include #include #include #include #include #include /* *线程池里所有运行和等待的任务都是一个CThread_worker *由于所有任务都在链表里,所以是一个链表结构 */typedef struct worker{ /*回调函数,任务运行时会调用此函数,注意也可声明成其它形式*/ void *(*转载 2012-10-19 01:29:54 · 764 阅读 · 0 评论 -
pthread线程使用小结
1.奇怪的线程参数初始化for( i=0; i{//会有什么问题?pthread_create(&tid,NULL, &thread_client_function, (void*)&i );}上面代码应该很容易明白,创建多个线程,传入序列号作为线程id。基实这里存在一个大bug, 传递的参数会不成功!!示例代码:#include转载 2012-10-19 01:02:56 · 811 阅读 · 0 评论 -
Mutex, semaphore, spinlock的深度解析
Mutex是一把钥匙,一个人拿了就可进入一个房间,出来的时候把钥匙交给队列的第一个。一般的用法是用于串行化对critical section代码的访问,保证这段代码不会被并行的运行。Semaphore是一件可以容纳N人的房间,如果人不满就可以进去,如果人满了,就要等待有人出来。对于N=1的情况,称为binary semaphore。一般的用法是,用于限制对于某一资源的同时访问。转载 2012-10-18 23:34:13 · 3483 阅读 · 0 评论 -
socket 科普文章
Linux:C/Socket多路复用select 小全Submitted byELFeron 2006, August 3, 5:46 PM.Unix/Linux作一个tcp的服务程序,同时可能有大量的客户端连上来,希望分别记住各个socket谁有数据过来,就读出来,放到一个请求队列--这些事情用一个线程完成另外有一个结果队列,如果结果里包含了socket的编号转载 2012-09-27 17:49:53 · 1473 阅读 · 0 评论 -
快速的内存分配器
<br />为了减少内存碎片,实现了一个简单的快速内存分配器。<br />优点:<br />无内存碎片<br />O(1)的分配算法。<br />O(1)的回收算法。<br />缺点:<br />底层仍旧使用了malloc。进一步考虑采用mmap<br />内存大小不可动态扩展。考虑是否支持动态扩展<br />分配的每快内存都是固定大小。考虑是否支持不同大小的块。<br /> <br />基本算法:<br />采用链表管理可用内存与已使用内存。<br />分配原创 2011-01-12 15:20:00 · 703 阅读 · 0 评论 -
获取文件夹文件(C++)
<br />#include<sys/types.h>#include <stdlib.h>#include <stdio.h>#include <dirent.h>#include <unistd.h>DIR * dir;struct dirent * ptr;dir=opendir(dir_path.c_str());int i=0;while((ptr=readdir(dir))!=NULL){ if ( ".." == string(ptr->d_原创 2011-01-06 11:15:00 · 642 阅读 · 0 评论 -
一个简单的makefile示例及其注释
<br />相信在unix下编程的没有不知道makefile的,刚开始学习unix平台<br />下的东西,了解了下makefile的制作,觉得有点东西可以记录下。<br /> 下面是一个极其简单的例子:<br />现在我要编译一个Hello world,需要如下三个文件:<br /> 1. print.h<br /> #include<stdio.h><br /> void printhello();<br /> 2. print.c<br />转载 2010-10-27 10:58:00 · 971 阅读 · 0 评论 -
读取文件的几种方法
<br />第一个示例:<br />c++里怎样读文件呀,是这样的一个文件,每行行有两个数据,共有n行,要分别把每行的第一,二个元素读取出来,分别存到a,b两个向量当中,不知道该怎么处理。<br />-6.0000000e+001 2.6356764e+000 <br />-5.9899487e+001 2.6289755e+000 <br />-5.9798974e+001 2.6222747e+000 <br />-5.9698462e+001 2.6155738e+000 <br />-5.95979转载 2010-12-15 12:24:00 · 1581 阅读 · 0 评论 -
SIGINT and others
<br />SIGHUP 终止进程 终端线路挂断<br />SIGINT 终止进程 中断进程<br />SIGQUIT 建立CORE文件终止进程,并且生成core文件<br />SIGILL 建立CORE文件 非法指令<br />SIGTRAP 建立CORE文件 跟踪自陷<br />SIGBUS 建立CORE文件 总线错误<br />SIGSEGV 建立CORE文件 段非法错误<br />SIGFPE转载 2010-10-15 12:07:00 · 526 阅读 · 0 评论 -
ACE日志配置策略(例子)
#define ACE_NTRACE 0// $Id: Use_Logging_Strategy.cpp 14 2007-02-01 15:49:12Z mitza $#include "ace/Log_Msg.h"#include "ace/Service_Config.h"#include "ace/OS.h"#include "ace/Reactor.h"#include #include /* Put the following in your svc.conf转载 2010-10-14 11:24:00 · 1079 阅读 · 0 评论 -
epoll的LT和ET模式
<br />// 从网上看到一个代码, 解释ET和LT的区别, 比较生动// 拷贝可以直接编译 g++ -g -Wall aaa.cpp #include <stdio.h>#include <iostream>#include <errno.h>#include <unistd.h>#include <fcntl.h>#include <stdlib.h>#include <sys/epoll.h>#include <sys/types.h>转载 2010-10-12 16:32:00 · 1195 阅读 · 1 评论 -
第2章 包装外观(Wrapper Facade):用于在类中封装函数的结构型模式
<br />2.1 介绍 本论文描述包装外观模式。该模式的意图是通过面向对象(OO)类接口来封装低级函数和数据结构。常见的包装外观模式的例子是像MFC、ACE和AWT这样的类库,它们封装本地的OS C API,比如socket、pthreads或GUI函数。 `_'I 9,.a <br /> 直接对本地OS C API进行编程会使网络应用繁琐、不健壮、不可移植,且难以维护,因为应用开发者需要了解许多低级、易错的细节。本论文阐释包装外观模式怎样使这些类型的应用变转载 2010-09-27 11:39:00 · 1941 阅读 · 0 评论 -
程序命名的一些提示
选择一个正确的名字是编程中最重要的事。以前酷壳向大家推荐过两篇文章《编程命名中的7+1个提示》 和《编程中的命名设计那点事》,今天再向大家推荐一篇。一个正确的命名可以让你更容易地理解代码的程序,好的命名可以消除二义性,消除误解,并且说明真实的意图,甚至可以让你有清新的气息以让你更能吸引异性。;-)方法,类和变量正确的名字可以让你的程序顾名思义,下面是一些提示:不要使用”Pr转载 2010-01-19 11:40:00 · 776 阅读 · 0 评论 -
编程命名中的7+1个提示
前几天Neo写过《编程中的命名设计那点事》,这里也有另外一篇和程序命名的文章,可以从另一个角度看看。1.- 变量应该是尽可能的望文知意。千万不要使用教材中的命名方式。好的变量: daysDateRange, flightNumber, carColor.坏的变量: days, dRange, temp, data, aux…在我们的日常工作中,有很大数量转载 2010-01-19 11:39:00 · 613 阅读 · 0 评论 -
用C实现多线程
#include #include DWORD WINAPI funA(LPVOID lp) { int i=1; int sum=0; for(i=1;isum=sum+i; printf("a[0] thread print:%d/n",sum); return 0; } DWORD WINAPI funB(LPV转载 2008-08-25 17:27:00 · 616 阅读 · 0 评论 -
malloc函数
原型:extern void *malloc(unsigned int num_bytes); 用法:#include 功能:分配长度为num_bytes字节的内存块 说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。 当内存不再使用时,应使用free()函数将内存块释放。 举例: //原创 2008-06-04 10:47:00 · 588 阅读 · 0 评论 -
malloc函数
原型:extern void *malloc(unsigned int num_bytes); 用法:#include 功能:分配长度为num_bytes字节的内存块 说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。 当内存不再使用时,应使用free()函数将内存块释放。 举例: //原创 2008-06-04 10:47:00 · 520 阅读 · 0 评论 -
C_C++指针经验(一)
前言:复杂类型说明要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,所以我总结了一下其原则:从变量名处起,根据运算符优先级结合,一步一步分析.下面让我们先从简单的类型开始慢慢分析吧:int p; //这是一个普通的整型变量int *p; //首先转载 2008-05-29 10:24:00 · 521 阅读 · 0 评论 -
Printf参数详解
printf()函数作用:向终端输出若干个任意类型的数据(putchar 只能输出字符,而且只能是一个字符,而printf可 以输出多个数据,且为任意类型)一、 printf()的一般格式printf(格式控制,输出列表); 例:int i = 3;double f = 4.56;printf("i = %d, f = %f/n", i,转载 2008-08-19 15:14:00 · 6987 阅读 · 0 评论 -
基类指针、派生类指针与他们的关系
基类指针可以指向基类对象; 派生类指针可以指向派生类对象; 基类指针可以指向派生类对象(无需强制转换),但只能引用基类中有的成员; 派生类指针指向基类对象,会引发语法错误。但派生类指针通过强制转换可指向基类对象。可是该动作很危险:若引用对象中不村在的派生类成员,会得到错误的结果。转载 2008-07-31 11:01:00 · 807 阅读 · 0 评论 -
Sizeof与Strlen的区别与联系
1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。 该类型保证能容纳实现所建立的最大对象的字节大小。 2.sizeof是算符,strlen是函数。 3.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以/0结尾的。 sizeof还可以用函数做参数,比如: short f(); printf("%d/n", s转载 2008-08-01 09:33:00 · 571 阅读 · 0 评论 -
c/c++中const用法总结
const类型定义:指明变量或对象的值是不能被更新,引入目的是为了取代预编译指令 **************常量必须被初始化*************************cons的作用 (1)可以定义const常量 例如: const int Max=100; int Array[Max];转载 2008-07-31 09:39:00 · 509 阅读 · 0 评论 -
浮点数在计算机中存储方式
作者: jillzhang 联系方式:jillzhang@126.com 本文为原创,转载请保留出处以及作者, 谢谢 C语言和C#语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit,double数据占用64bit,我们在声明一个变量float f= 2.25f的时候,是如何分配内存的呢?如果胡转载 2008-07-30 14:20:00 · 918 阅读 · 0 评论