C++
文章平均质量分 87
youngyang525
努力学习!!!
展开
-
构造函数中指针参数的初始化
最近在写一个小程序时,主要是文件信息的读取。在程序中定义了类Tpersonclass Tperson {public: Tperson(string newName=NULL ,int newAge=0); virtual~Tperson(); private: string name; int age;原创 2012-03-24 15:51:07 · 3470 阅读 · 4 评论 -
可重入函数与不可重入函数
转自:http://www.cppblog.com/franksunny/archive/2007/08/03/29269.html主要用于多任务环境中,一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误;而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等,所以它如转载 2015-04-23 17:19:33 · 475 阅读 · 1 评论 -
Linux下的多线程编程
1 引言 线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者。传统的Unix也支持线程的概念,但是在一个进程(process)中只允许有一个线程,这样多线程就意味着多进程。现在,多线程技术已经被许多操作系统所支持,包括Windows/NT,当然,也包括Linux。 为什么有了进程的概念后,还要再引入线程呢?使用转载 2015-04-23 10:45:11 · 457 阅读 · 1 评论 -
Linux下的多进程编程
最近在学习linux环境高级编程,多进程编程算是编程中的最重要的一个部分了,本文让我学习和明白了很多,所以转载过来。让更多想多线程编程的人学习。只有顶到首页才能让更多的人学习。文章摘要: 多线程程序设计的概念早在六十年代就被提出,但直到八十年代中期,Unix系统中才引入多线程机制,如今,由于自身的许多优点,多线程编程已经得到了广泛的应用。本文我们将介绍在Linux下编写多进程和多转载 2015-04-23 10:43:43 · 723 阅读 · 1 评论 -
linux进程(二)
1 linux进程概述进程简单的说就是一个程序一次执行的过程,它是一个动态的概念。按照教科书上的定义,进程是程序执行的实例,是linux的基本调度单位。 对于程序员来说,最重要的就是要区分进程和程序的区别,程序是指一段完成功能的代码,或者说是一个工具,它是一个静态的概念,而进程,它是动态的,比如,linux的vi编辑器,它就是一段在linux下用于文本编辑的工具,那么它是一个程序,而我原创 2015-04-24 09:17:07 · 667 阅读 · 1 评论 -
C通过unixODBC连接数据库
首先进程数据库的相关配置,主要是修改/etc/odbcinst.ini和/etc/odbc.ini两个文件。(这是它们的默认位置,有时也可能在/usr/local/etc/或者/usr/local/unixODBC/etc/,这个和你安装的unixODBC位置有关)odbcinst.ini(配置驱动)点击(此处)折叠或打开[mysql]Driver=/usr原创 2015-04-30 09:59:46 · 3629 阅读 · 3 评论 -
linux中线程如何退出
在Linux中,默认情况下是在一个线程被创建后,必须使用此函数对创建的线程进行资源回收,但是可以设置Threads attributes来设置当一个线程结束时,直接回收此线程所占用的系统资源,详细资料查看Threads attributes。其实在Linux中,新建的线程并不是在原先的进程中,而是系统通过一个系统调用clone()。该系统调用copy了一个和原先进程完全一样的进程,并在翻译 2015-08-07 16:44:29 · 4467 阅读 · 1 评论 -
Linux下实现简单Echo中继服务器
Linux下编写一个Echo中继服务器,echo客户端通过它获取Echo服务器的响应。中继服务器能同时作为多个echo服务器的中继,并且具有一个简单的负载均衡算法。1. 服务器与客户端描述与设计支持多个服务器进行Echo服务,服务器需要设定输入端口参数,服务器和客户端可以直接使用多进程版本的设计即可。2. 中继服务器描述与设计为了简化,假定所有的服务器都在相同的ip地址转载 2015-08-01 15:35:09 · 1051 阅读 · 1 评论 -
arm-linux-gdb、gdbserver的编译安装
下载gdb-7.5.tar.gz(http://www.gnu.org/software/gdb/download/)解压gdb-7.10.tar.gztar -zxvf gdb-7.10.tar.gz编译arm-linux-gdbcd gdb-7.10$./configure --target=arm-linux --prefix=/opt/FriendlyARM/t原创 2015-09-08 09:54:53 · 2731 阅读 · 2 评论 -
C实现的简单键值对
typedef struct { unsigned short id; char *str;} value_string;static const value_string vals_message_type[] = { /* MMS 1.0 */ { PDU_M_SEND_REQ, "m-send-req" }, { PDU_M_SEN原创 2015-10-08 13:29:12 · 9127 阅读 · 1 评论 -
makefile文件的笔记
1、编译所有子目录的makefile经常有人需要顺序编译一个一个的模块,最后才连接生成可执行程序,但是如果一个模块一个模块地执行make,比较马法,下面是一个经过验证的makefile;可以根据自己的需要修改SUBDIRS宏的值,设定自己需要编译的目录的顺序.就可以了.#编译所有子目录#SUBDIRS=`ls -d */ | grep -v 'bin' | grep -v原创 2015-11-10 17:31:35 · 563 阅读 · 1 评论 -
Mosquitto-Ubuntu 14.04快速安装问题解决
Mosquitto是一个轻量级的MQTT Broker,支持很多种系统。下载与安装:http://mosquitto.org/download/注意:由于客户端paho工程进展较快,目前需要使用最新的3.1.1版本的mqosuitto服务器才能连接,因此用Ubuntu内置库的mosquitto将无法正常访问。我就是因为这个莫名奇妙的原因,死活调试不通org.eclipse.paho.mqt原创 2015-12-11 13:39:44 · 1651 阅读 · 1 评论 -
makefile多目录的.c 格式.cpp混合编译
## c.cpp混合编译的makefile模板##BIN = test.exeCC = gccCPP = g++#这里只加入库头文件路径及库路径INCS = -I"c:/mingw/include"LIBS = -L"c:/mingw/lib"SUBDIRS =#生成依赖信息时的搜索目录,比如到下列目录中搜索一个依赖文件(比如.h文件),例如 -I"./***/" -I"原创 2015-12-08 14:21:47 · 10145 阅读 · 1 评论 -
Linux socket 获得本地IP和广播地址
#include #include #include #include #include #include #include int main(int argc, char *argv[]){ int inet_sock; struct ifreq ifr; //建立套接字 inet_sock = socket(AF_INET, SOCK_DGRAM, 0);原创 2016-01-14 14:57:33 · 3898 阅读 · 1 评论 -
socket编程相关的结构体和字节序转换、IP、PORT转换函数
注意:结构体之间不能直接进行强制转换, 必须先转换成指针类型才可以进行结构体间的类型转换, 这里需要明确的定义就是什么才叫强制转换.强制转换是将内存中一段代码以另一种不同类型的方式进行解读, 因此转换的空间必须与源空间一一对应.而结构体则是由不固定的多种类型变量组合而成, 因此强制转换时并不确定原格式与目标格式确定的对应关系, 例如一个结构体为3个变量, 而另一个则为2个, 那么就无法确定原创 2016-01-14 15:39:24 · 3830 阅读 · 1 评论 -
c/c++创建动态链接库
extern "C"C++保留了一部分过程式语言的特点,因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C有明显的不同。extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。由于C++支持函数重载原创 2016-04-18 10:37:27 · 2933 阅读 · 1 评论 -
利用qmake生成Makefile文件
在linux下写程序,免不了要写Makefile文件,用automake,总感觉比较麻烦,linux人喜欢做麻烦的事,以显得风格迥异。其实用qmake生成Makefile文件相当简单。1 装好qmake工具2 在源码工程目录下,运行qmake -project这样会生成一个*.pro文件。3 运行qmake -makefile *.pro,生成Makefile文件。此Mak转载 2016-04-18 13:06:53 · 5503 阅读 · 1 评论 -
mosquitto_pub和mosquitto_sub 命令参数说明
mosquitto_pub 命令参数说明1. -d 打印debug信息2. -f 将指定文件的内容作为发送消息的内容3. -h 指定要连接的域名 默认为localhost4. -i 指定要给哪个clientId的用户发送消息5. -I 指定给哪个clientId前缀的用户发送消息6. -m 消息内容7. -n 发送一个空(null)消息8. -p原创 2016-05-05 17:03:59 · 14885 阅读 · 3 评论 -
write read;writev readv;recv send;recvfrom sendto;recvmsg sendmsg五组I/O函数汇总
read、write头文件: #include 原型:size_t read ( int fd, void *buf, size_t count); size_t write ( int fd, const void * buf, size_t count);参数: fd文件描述符;buf指向一段内存的指针;count想要读取或者写入fd的字原创 2015-04-23 15:03:04 · 2999 阅读 · 1 评论 -
c语言中内存的动态分配与释放(多维动态数组构建)
一. 静态数组与动态数组 静态数组比较常见,数组长度预先定义好,在整个程序中,一旦给定大小后就无法再改变长度,静态数组自己自动负责释放占用的内存。 动态数组长度可以随程序的需要而重新指定大小。动态数组由内存分配函数(malloc)从堆(heap)上分配存储空间,只有当程序执行了分配函数后,才为其分配内存,同时由程序员自己负责释放分配的内存(free)。二. 为什么要使用动态转载 2015-03-04 11:12:13 · 1068 阅读 · 1 评论 -
C/C++中int/long/float/double数值类型与字符串互相转换
memcpy方法可以实现将int等保存到字符类型的数组中。示例: long long_data=-9828;unsigned char data[4];memcpy(data,&t,4); //将long类型的数据用4个char保存。 long my_long_data=0; memcpy(&tt,data,4);//从4个c原创 2015-03-04 10:57:35 · 6798 阅读 · 1 评论 -
c++深拷贝和浅拷贝
对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=88;int b=a;而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。#include using namespace std;class CExample {private: int a;public: CExa转载 2012-03-25 19:06:01 · 399 阅读 · 1 评论 -
OpenCV之cvSmooth函数平滑滤波
1、cvSmooth函数用法 定义原型 void cvSmooth( const CvArr* src, CvArr* dst,int smoothtype=CV_GAUSSIAN, int param1, int param2, double param3, double param4 );src:输入图像.dst:输出图像.smootht转载 2013-10-20 14:37:01 · 1193 阅读 · 0 评论 -
Tesseract3的常用API
初始化函数(1) int Init(const char* datapath, const char* language, char **configs, int configs_size, bool configs_global_only);(2) int Init(const char* datapath, const char* language) { return Init(d转载 2014-03-01 20:23:26 · 10607 阅读 · 3 评论 -
OCR之Tesseract在VS2010中的使用
测试代码:#include "stdafx.h" #pragma comment(lib, "libtesseract302.lib")#pragma comment(lib, "liblept.lib")#include "tesseract\baseapi.h" #include "tesseract\strngs.h" int _tmain(int argc, _TC原创 2014-03-01 20:02:41 · 10227 阅读 · 4 评论 -
MFC截图
/************************************************************************//* 返回一个实例的截屏HBITMAP *//********************************原创 2014-03-12 12:40:31 · 1586 阅读 · 0 评论 -
Linux Socket UDP对等通信
/*socket udo示例程序* 由于UDP是一种对等通信,是不区分服务器端和客户端的*/#include #include #include #include #include #include #include #include #include #include #include #include #define SERVER_PORT 5555int原创 2014-04-04 14:34:47 · 1280 阅读 · 0 评论 -
Linux Socket TCP/IP通信
1. Server端/*socket tcp服务器端*/#include #include #include #include #include #include #include #include #include #include #include #include #define SERVER_PORT 5555int main(){ int ser转载 2014-04-04 14:33:27 · 646 阅读 · 0 评论 -
MFC网络编程TCP/IP的服务器与客户端代码
一.1 TCP/IP服务器代码:#pragma comment(lib, "ws2_32.lib")//使用WinSock库中的函数需要加载这个动态链接库。#include //因为要使用WinSock库中的函数#include //输入输出流#includeusing namespace std;void main(){cout//------加载套接字库---------转载 2014-03-01 21:15:43 · 9472 阅读 · 0 评论 -
Linux C连接Mysql数据库
1. 连接数据库转载 2014-04-04 14:30:48 · 637 阅读 · 0 评论 -
opencv字符轮廓分割
先看效果原创 2014-04-04 14:05:56 · 6451 阅读 · 2 评论 -
windows中编译libevent库
首先到libeventde版本为2.0.21,开发环境为vs2010。(1)首先将下载下来的libevent解压到本地磁盘中。我解压的路径为:D:\libevent-2.0.21-stable。 运行解压文件后,会在libevent-2.0.21-stable中会有该库的源文件。(2)修改“D:\libevent-2.0.10-stable\event_i原创 2014-06-17 09:58:52 · 1522 阅读 · 0 评论 -
Windows API串口编程
在Windows系统中实现串口通信的基本功能,并对有关的API函数进行解释。原创 2014-09-27 15:17:41 · 7285 阅读 · 0 评论 -
linux串口API编程
在linux下编写终端程序时,有规范模式 ,非规范模式(原始模式特殊的非规范模式)之分。不用于终端,而是在串口这种使用情况下,一般设置为原始模式(非规范的一种特殊情况)。但用read()函数,希望从串口接收指定的数量的字符时,往往接收到的实际字符数,都与指定的不同。如本人用read()希望接收 10 bytes的数据,但实验后发现,分了几次才接收到,俩次接收2bytes ,两次接收3bytes。原创 2014-10-28 13:54:39 · 3429 阅读 · 0 评论 -
Windows串口API编程
(一)Windows API串口通信编程概述Windows环境下的串口编程与DOS环境下的串口编程有很大不同。Windows环境下的编程的最大特征之一就是设备无关性,它通过设备驱动程序将Windows应用程序同不同的外部设备隔离。Windows封装了Windows的通信机制,这种方式称为通信API,Windows程序可以利用Windows通信API进行编程,不用对硬件直接进行操作。这种体系被称原创 2014-10-28 13:30:47 · 4883 阅读 · 0 评论 -
Makefile选项CFLAGS,LDFLAGS,LIBS
CFLAGS 表示用于 C 编译器的选项,CXXFLAGS 表示用于 C++ 编译器的选项。这两个变量实际上涵盖了编译和汇编两个步骤。CFLAGS: 指定头文件(.h文件)的路径,如:CFLAGS=-I/usr/include -I/path/include。同样地,安装一个包时会在安装路径下建立一个include目录,当安装过程中出现问题时,试着把以前安装的包的include原创 2014-12-09 09:32:55 · 2419 阅读 · 1 评论 -
C/C++时间函数的使用
一、获取日历时间time_t是定义在time.h中的一个类型,表示一个日历时间,也就是从1970年1月1日0时0分0秒到此时的秒数,原型是: typedef long time_t; /* time value */可以看出time_t其实是一个长整型,由于长整型能表示的数值有限,因此它能表示的最迟时间是2038年1月18日19时14分07秒。函数time可以获取原创 2014-12-09 10:39:09 · 3899 阅读 · 2 评论 -
valgrind的使用
Valgrind是一个GPL的软件,用于Linux(For x86, amd64 and ppc32)程序的内存调试和代码剖析。你可以在它的环境中运行你的程序来监视内存的使用情况,比如C 语言中的malloc和free或者 C++中的new和 delete。使用Valgrind的工具包,你可以自动的检测许多内存管理和线程的bug,避免花费太多的时间在bug寻找上,使得你的程序更加稳固。Valg原创 2015-03-04 10:32:29 · 544 阅读 · 1 评论 -
C语言正则表达式详解 regcomp() regexec() regfree()详解
标准的C和C++都不支持正则表达式,但有一些函数库可以辅助C/C++程序员完成这一功能,其中最著名的当数Philip Hazel的Perl-Compatible Regular Expression库,许多Linux发行版本都带有这个函数库。可以参照:http://midatl.radford.edu/docs/C/Pattern-Matching.html#Pattern-M原创 2016-05-09 14:10:44 · 15271 阅读 · 1 评论