![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
文章平均质量分 76
VC天下
35+程序员,关注程序员的职场发展。
展开
-
VS2010编译Mongodb C++驱动
完成了VS2010编译Mongo C++ Driver,中间遇到了不少问题,记录一下。原创 2013-10-22 15:23:42 · 12292 阅读 · 3 评论 -
读写锁(Read-Write Lock)的一种实现
项目中用到了此类,实现了多个线程读、单个线程写的功能,基于Windows平台。思想:两个相关的锁,一个用于读,一个用于写。可以多个同时读,但只能一个写。比传统的互斥锁,提高了一定的并发性。#ifndef READER_WRITER_LOCK_H_ #define READER_WRITER_LOCK_H_ /***********************************原创 2013-08-30 09:20:45 · 4504 阅读 · 0 评论 -
levelDB按时间范围检索
levelDB是谷歌的开源key-value存储系统,性能很高、设计思想很妙、使用起来也很简单。但像绝大多数的No Sql数据库一样,只适合做单一的查询,不能胜任复杂的关系组合查询。在实际项目中,我们应用levelDB,需要针对其进行一段时间的数据检索。于是,通过时间加减,来完成的这项功能,在此贴出简要代码,仅供参考。http://vcsky.net by havenzhao原创 2013-08-30 09:19:15 · 8580 阅读 · 0 评论 -
windows下使用net-snmp实现agent扩展(二)
刚刚实现了int型的get命令,可能更多的情况下,我们更需要的是字符串类型的。在实现int型的时候,用到了netsnmp_register_int_instance这个函数,很自然想到如果是string型的,用类似的netsnmp_register_string_instance,或者netsnmp_register_char_instance不就行了?很可惜的是:net-snmp并没有提供这两个原创 2013-08-30 09:31:05 · 6287 阅读 · 1 评论 -
与Java的MD5算法一致的C/C++的MD5算法
网上C/C++的MD5算法很多,但找了好久,也没找到合适的能与JAVA的MD5结果一样的算法。最后还是把以前项目里的一个算法改了一下,实现了和Java传输文件时,校验文件的功能。Java的MD5算法比较统一,而C++的算法则很多版本,只能C++往Java上靠拢。md5.h#ifndef _DMSUTIL_H#define _DMSUTIL_H#ifdef __cplus原创 2012-12-09 15:57:13 · 6765 阅读 · 1 评论 -
实时数据缓存管理的初步设计
http://vcsky.net by havenzhao对于实时较大数据量的缓存管理上,设计的方式有很多。在此提出一种初步的、较粗略的思路,仅供参考。背景:系统分为三层,数据采集层(采集底层的数据),消息管理层(对采集上来的数据进行处理)、消息接口层(对消息解析封装、处理客户端的Socket请求等)。在数据的缓存管理上,采用双缓冲区模式的管理机制。http://vcsky.原创 2012-05-10 12:30:01 · 5404 阅读 · 0 评论 -
C++模板:函数模板和模板函数
1.函数模板的声明和模板函数的生成1.1函数模板的声明函数模板可以用来创建一个通用的函数,以支持多种不同的形参,避免重载函数的函数体重复设计。它的最大特点是把函数使用的数据类型作为参数。函数模板的声明形式为:template(参数表){ 函数体}其中,template是定义模板函数的关键字;template后面的尖括号不能省略;typename(或cl原创 2009-05-20 17:08:00 · 148430 阅读 · 14 评论 -
[推荐]《C/C++高质量编程》笔记
引言:《C/C++高质量编程》这本书,很好的给出了一些编程规范,是每一个C/C++程序员都应该认真读取的一本书。几次阅读,几次忘记,今天把一些关键点记录下来,便于以后继续学习和参考。建议此书和谷歌C++编码规范一起使用,相得益彰。 【规则2-2-1】一行代码只做一件事情,如只定义一个变量,或只写一条语句。这样的代码容易阅读,并且方便于写注释。【建议2-2-1】尽可能在定义变量的同时原创 2011-11-22 10:01:57 · 2788 阅读 · 2 评论 -
strtok函数用法
原型:char *strtok(char *s, char *delim); 功能:分解字符串为一组标记串。s为要分解的字符串,delim为分隔符字符串。 说明:首次调用时,s必须指向要分解的字符串,随后调用要把s设成NULL。 strtok在s中查找包含在delim中的原创 2011-08-11 15:49:10 · 41411 阅读 · 1 评论 -
windows下使用net-snmp实现agent扩展(一)
项目上需要用snmp来做告警监控管理,达到对系统的运行状态的监测。这几天研究了一下,发现网上资料比较少,大多数抄来抄去,能够正确运行的更少。所以,总结了一下,把相关的代码放上来,希望能够帮助同样遇到困惑的朋友。 havenzhao http://vcsky.net项目名称为DCS系统,采用VS2010开发,DCS作为被监测的对象,因此需要实现snmp的Agent扩展。最开始的方法,采用了W原创 2013-08-30 09:26:29 · 12103 阅读 · 6 评论 -
Socket简介
Socket,这是一个老生常谈的话题,我只是梳理一下其相关知识点。Socket is a port。在Linux中,网络编程是通过Socket接口来完成的。Socket接口是一种特殊的I/O,也是一种文件描述符。一个Socket 用一个半相关描述: {协议,本地地址,本地端口}。通过IP可以建立网络中两个设备之间的连接。通过Sockets使用TCP/UDP服务来建立网络中两个应用程序或原创 2013-09-09 08:34:36 · 3435 阅读 · 0 评论 -
Mongodb中C++客户端与Java客户端的交互
Mongodb中C++客户端与Java客户端的交互,解决中文乱码的问题;C++客户端插入文件的简单例子。原创 2013-10-25 15:43:22 · 4564 阅读 · 1 评论 -
VS2010错误error C2678
之前用的好好的,今天整理了一下工程,删除了一些没用到的.h和.cpp文件,重新编译,发生错误:error C2678: binary '==' : no operator found which takes a left-hand operand of type 'std::string' (or there is no acceptable conversion)代码定位在if语句里:原创 2013-10-24 11:28:09 · 8737 阅读 · 2 评论 -
Linux下编译mongodb以及C++客户端驱动
想在Linux下编译一下mongo和它的C++驱动,网上一堆教程,官方一堆文档,实现起来依旧困难重重。我就很纳闷了,本来mongodb就是C++写的,为什么不直接提供出驱动,而java,C#之类的,倒是直接提供了jar包和dll文件。今天终于编译成功,赶紧记录下来。Linux版本:CentOS 5.4C++驱动版本:mongo-cxx-driver-v2.2Mongodb版本:mong原创 2013-10-14 17:06:31 · 16513 阅读 · 4 评论 -
windows下使用net-snmp实现agent扩展(四)
在前三篇的内容里,介绍了使用net-snmp实现agent的Get/Set命令,下面介绍一下发送trap消息。发送trap消息时,系统默认的端口是162。使用下面的代码,可以实现trap消息的发送。//该函数发送实时报警信息。与发送一般信息端口不同void init_alarm_info(void){DEBUGMSGTL((“dcsserver”,“initializing (sett原创 2013-09-05 09:13:06 · 5290 阅读 · 0 评论 -
windows下使用net-snmp实现agent扩展(三)
时间隔得太长了,我都快忘了什么是snmp了,知识啊知识,很容易在不用的时候忘却,也可能是自己脑袋不好使了吧?翻了翻代码,赶紧总结下,不然真不会了……在上篇博客中,实现了get/set一个字符串型变量,现在来实现对多个字符串变量的get/set。假设要实现获取CPU利用率、内存占用率和磁盘占用率的的功能,建立两个文件:alarmInfo.h和alarmInfo.c。在alarmInfo.h中原创 2013-09-04 08:41:02 · 5318 阅读 · 4 评论 -
VC6显式调用DLL
通过显式调用DLL的方法,不需要DLL的.lib或头文件,而只需要DLL。原创 2010-09-20 09:18:00 · 2432 阅读 · 0 评论 -
【高质量C++编程】读书笔记:引用与指针
引用是C++中的概念,初学者容易把引用和指针混淆一起。一下程序中,n 是m 的一个引用(reference),m 是被引用物(referent)。原创 2010-09-21 09:56:00 · 1010 阅读 · 0 评论 -
推荐C++编程技术网站
每天都在上网,一直在编程,下面与网友分享下我常去的编程网站,当然,排名不分先后,专注C++。 【http://www.csdn.net】 // 不用说了,论坛里有热心的斑竹【http://www.vckbase.com】 // VC知识库编程文摘【http://www.51cto.com】 // 一些专家的BLOG不错【http://www.pud原创 2010-01-04 16:46:00 · 1978 阅读 · 0 评论 -
JAVA调用DLL的注意事项
网上JAVA调用DLL的文章不少了,但发现有些还是有问题。刚好研究了一下,稍做更改后,在VC2005上测试通过,(Release和Debug版本均可)。更改点:1、#include "jni.h"2、将jni_md.h中的:#define JNICALL __stdcall变为:#define JNICALL __cdecl (函数使用的应该是c语言的缺省调用方式_cdecl方式,否则原创 2010-01-30 10:33:00 · 1601 阅读 · 0 评论 -
什么是泛型编程?
泛型编程让你编写完全一般化并可重复使用的算法,其效率与针对某特定数据类型而设计的算法相同。泛型编程的代表作品STL是一种高效、泛型、可交互操作的软件组件。所谓泛型(Genericity),是指具有在多种数据类型上皆可操作的含意,与模板有些相似。STL巨大,而且可以扩充,它包含很多计算机基本算法和数据结构,而且将算法与数据结构完全分离,其中算法是泛型的,不与任何特定数据结构或对象类型系在转载 2009-05-25 16:46:00 · 2971 阅读 · 0 评论 -
怎么把double型的保留三位小数输出?
#include #include using namespace std; int main() { float a=100,b=2.34422; cout<<setiosflags(ios::fixed)<<setprecision(3); cout<<a<<endl; cout<<b<<endl; printf("%.3f/n",a); ret转载 2009-05-15 16:43:00 · 9343 阅读 · 1 评论 -
VC++错误,fatal error C1010,在查找预编译头指令时遇到意外的文件结尾
方法一:在include头文件的地方加上#include "stdafx.h"。方法二:打开此项目的“属性页”对话框。单击“C/C++”文件夹。单击“预编译头”属性页。修改“创建/使用预编译头”属性为“不使用预编译头”。 这个文件包含了一个头文件#include 只有包含这个afxwin.h才可以使用mfc类库,还有些别的,反正这个文件不可以不要就是了。除非你写sdk程序或者co转载 2009-05-11 17:15:00 · 1837 阅读 · 0 评论 -
C语言整型变量所占内存字节数
C标准没有具体规定各类整型数据所占内存字节数,只要求long型数据长度不短于int型,short型不长于int型。具体如何实现,由各计算机系统自行决定。如在微机上,int型和short都是16位,而long是32位。在VAX 750上,short是16位,而int和long都是32位,一般以一个机器字(word)存放一个int数据。前一阶段,微机的字长一般为16位,故以16位存放一个整数,转载 2009-05-07 17:13:00 · 13447 阅读 · 3 评论 -
什么是socket
要写网络程序就必须用Socket,这是程序员都知道的。而且,面试的时候,我们也会问对方会不会Socket编程?一般来说,很多人都会说,Socket编程基本就是listen,accept以及send,write等几个基本的操作。是的,就跟常见的文件操作一样,只要写过就一定知道。 对于网络编程,我们也言必称TCP/IP,似乎其它网络协议已经不存在了。对于TCP/IP,我们还知道TCP和UDP转载 2008-12-26 11:04:00 · 1745 阅读 · 0 评论 -
C/C++语言编程修养
这篇文章很长,转载下来供自己慢慢学习。 编程修养 (作者:陈皓)———— 什么是好的程序员?是不是懂得很多技术细节?还是懂底层编程?还是编程速度比较快? 我觉得都不是。对于一些技术细节来说和底层的技术,只要看帮助,查资料就能找到,对 于速度快,只要编得多也就熟能生巧了。 我认为好的程序员应该有以下几方面的素质: 1、有专研精神,勤学善问、举一反三。 2、积极转载 2008-12-26 11:22:00 · 1493 阅读 · 0 评论 -
C++:函数名后加const
class MyClass{ public: int GetData(int Id,int Type,char* pData)const;} 通过把类成员函数声明为const 以表明它们不修改类对象。任何不会修改数据成员的函数都应该声明为const类型。如果在编写const成员函数时,不慎修改了数据成员,或者调用了其它非const成员函数,编译器将指出错原创 2008-12-10 13:54:00 · 12042 阅读 · 2 评论 -
shmget() -- 建立共享内存
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://leezen.blogbus.com/logs/19564086.html #include #include int shmget(key_t key, size_t size, int shmflg);key_t key------------------------------------转载 2009-12-22 11:13:00 · 1648 阅读 · 0 评论 -
C++多线程传参,CreateThread参数的使用方法
项目是VS2003下的,用到了CreateThread函数,看到网上说不应该调用CreateThread,而应该使用_beginthreadex。因为刚好用到了,就还是写一下CreateThread中参数的使用方法。见代码:先定义要传递的参数结构体:typedef struct SParam{ int No; unsigned short chnlID; unsi原创 2009-12-29 10:03:00 · 22110 阅读 · 2 评论 -
浅谈面向对象程序设计
我们在分析问题,解决问题的时候,比较好的一个做法是将问题分解。以面向对象的风格编写程序,你就可以将一个问题分解为几个小的组成部分,每个组成部分都能够成为一个小容器,包含相关的数据和代码。这样做的优点在于:你可以有效的降低程序的复杂性,从而能够管理更大规模的程序,解决更为复杂的问题。地球人都知道的秘密:面向对象程序设计语言具备3个特点:继承、封装、多态。先来说说继承,这个比较好理解。继承是指一个对原创 2011-07-03 11:22:37 · 1161 阅读 · 1 评论 -
《C++捷径教程》学习笔记【一】:虚函数
声明虚函数的方法是在基类中的成员函数原型前加上关键字virtual.格式如下: class 类名{ …… virtual 类型 函数名(参数表); …… }; 当一个类的成员函数声明为虚函数后,这就意味着该成员函数在派生类中可能有不同的实现,也就是说,该函数在派生类中可能需要定义与其基类虚函数原型相同的函数。 虚函数是动态联编的原创 2011-06-23 08:57:00 · 1196 阅读 · 2 评论 -
【书摘】C++编程思想:引用和拷贝构造函数
引用就像能自动地被编译器间接引用的常量型指针。它通常用于函数的参数表中和函数的返回值,但也可以独立使用。使用引用时有一定的规则:1.当引用被创建时,它必须被初始化(指针则可以在任何时候被初始化)。2.一旦一个引用被初始化为指向一个对象,它就不能改变为另一个对象的引用(指针则可以在任何时候指向另一个对象)。3.不可能有NULL引用。必须确保引用是和一块合法的存储单元关联。 最经常看见引用的原创 2011-06-22 09:23:00 · 1063 阅读 · 0 评论 -
《C++沉思录》读书笔记【一】:代理类
C++代理类是为了解决这样的问题: 容器通常只能包含一种类型的对象,所以很难在容器中存储对象本身。怎样设计一个c++容器,使它有能力包含类型不同而彼此相关的对象? 代理运行起来和他所代表的对象基本相同,但是允许将整个派生层次压缩在一个对象类型中。#include using namespace std;//定义基类,纯虚函数class Vehicle{ publi原创 2011-06-21 09:31:00 · 1225 阅读 · 0 评论 -
变量的存储与作用域
/* 全局变量,固定地址,其他源文件可见*/int global_static;/* 静态全局变量,固定地址,但只在本文件中可见*/static int file_static;/* 函数参数:位于栈帧当中,动态创建,动态释放*/int foo(int auto_param){ /*静态局部变量,固定地址,只在本函数中可见*/ static int func_static; /*原创 2011-06-14 14:58:00 · 974 阅读 · 0 评论 -
union:C/C++语言关键字
1. 共用体声明和共用体变量定义<br />共用体(参考“共用体”百科词条)是一种特殊形式的变量,使用关键字union来定义 <br /> 共用体声明和共用体变量定义与结构体十分相似。其形式为: <br /> union 共用体名{ <br /> 数据类型 成员名; <br /> 数据类型 成员名; <br /> ... <br /> } 变量名;<br />共用体表示几个变量共用一个内存位置,在不同的时间保存不同的数据类型和不同长度的变量。<br />在union中,所有的共用体成员共用一个空转载 2010-11-22 09:36:00 · 2131 阅读 · 0 评论 -
A brief description of C++
一篇不错的介绍C++语言的文章,包含C++的特性,本人尝试做了简要的翻译,水平有限,欢迎指正。翻译 2010-11-09 10:06:00 · 2563 阅读 · 0 评论 -
VC6.0打开文件 内存错误
<br />问题症状:使用VC6.0,添加文件或打开文件,都出现0x5003eaed内存报错,如下图<br /><br /><br />这个问题存在很久了,只是影响不大没理会,今天有时间上网搜了一下,终于找到解决办法<br />微软提供的解决方案:<br />http://support.microsoft.com/kb/241396<br />写得比较麻烦,其实下载了该页面上的filetool.exe后,解压得到filetool工程,然后编译得到FileTool.dll<br />将该dll文件拷贝到 x转载 2010-07-01 17:11:00 · 1900 阅读 · 0 评论 -
memset用法详解(转)
memest原型 (please type "man memset" in your shell) void *memset(void *s, int c, size_t n); memset:作用是在一段内存块中填充某个给定的值,它对较大的结构体或数组进行清零操作的一种最快方法。常见的三种错误第一: 搞反了c 和 n的位置. 一定要记住 如果要把一个char a[20]清转载 2009-01-13 16:33:00 · 1221 阅读 · 0 评论