C/C++
文章平均质量分 83
ciaos
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
浅谈C语言的字符串拆分
字符串拆分应用在很多方面,尤其是针对格式化数据的处理,可是不同程序语言对于字符串拆分却有着很大的区别(易用性,效率等方面考虑)。对于格式化数据的处理首先想到的利器就是awk了,它尤其胜任文本的处理,逐行读取文本文件,按照指定的分隔符处理拆分的字符串,它还能为文本处理加入控制运算逻辑,功能强大到已经是一门复杂的编程语言了。还有就是以强大的正则匹配为基础的perl,对于字符串处理也是很强大。可原创 2012-04-26 13:16:48 · 7146 阅读 · 1 评论 -
/MT、/MD编译选项,以及可能引起在不同堆中申请、释放内存的问题
原文链接2012-2-3烛秋一、MD(d)、MT(d)编译选项的区别1、编译选项的位置以VS2005为例,这样子打开:1) 打开项目的Property Pages对话框2) 点击左侧C/C++节3) 点击Code Generation节4) 右侧第六行Runtim转载 2012-08-13 11:46:05 · 1415 阅读 · 0 评论 -
TCP端口同时做服务器与客户端
下面的代码主要实现两个功能:1,通过bind使本机指定端口如2012端口与远端服务器通信,不指定的话会随机分配2,然后使用该指定端口创建监听服务,接受其他客户端的连接。主要方法用到端口复用,通过调用setsocketopt函数设置标记位实现,不进行端口复用的话程序在第二个步骤bind的时候会出现端口已被占用的错误信息#include #include #include #原创 2012-08-09 17:11:25 · 5696 阅读 · 1 评论 -
试用libevent的事件触发
随着nginx,nodejs,Lua等技术大放异彩的时候,我们的程序设计习惯也在不断地改变中,现在什么都需要“异步”,做不到异步就和别人有差距了。看来教材上基于多进程多线程的模型等等远远不能满足现在互联网项目的需求。我们知道不同操作系统,不同底层内核对于IO的事件驱动模型是不一样的,有poll,select,windows select,epoll,kqueue等多种选择。nginx服务器原创 2012-05-24 22:31:45 · 4903 阅读 · 0 评论 -
MFC创建有模式对话框和无模式对话框
VC下创建一个新的窗口主要有两种模式,一种是创建后主窗口失去鼠标焦点,只有子窗口能获取到用户输入和用户操作,这种方式比如网页弹出警告框,我们必须先处理弹框内的操作才能再去控制浏览器,称之为有模式对话框;另外一种是创建新窗口后主窗口与子窗口都能获取到用户焦点,这种对话框为无模式对话框。两者的创建方法都很简单,有一些不同的地方。我们打开VC6.0,用MFC Wizard创建一个简单的窗体程原创 2012-04-25 16:32:33 · 2633 阅读 · 0 评论 -
初次尝试Object-C,编码风格还真不习惯
Object-C是Mac系统的默认编程语言,它是扩充了C的一门面向对象语言。基本C的标准的东西Objc都支持,虽然同样是一门面向对象的语言,可是和C++相比还是有很多的不同的地方,比如不支持命名空间,不支持多重继承等功能。不管怎样ios的盛行让它的排名已经升到TIOBE排行榜的前6位了。可惜的是我一直以来还没有尝试过用它编程序,本来是举手之劳,今天就试一试吧,windows以及Linux系原创 2012-06-04 21:36:58 · 991 阅读 · 0 评论 -
关于I/O操作的一点整理
今天遇到一个程序bug,A向B发送完整的一段数据,B却总是不能获取到结尾部分的内容。后来才发现在进行“write”操作(ngx.print)后还需要调用flush操作(ngx.flush)才能将数据写出。对数据IO,缓存的知识又忘光光了,这里整理一下:对于文件描述符的操作比较简单,不同的操作系统都封装了比较好用的fstream库函数。基于流的操作最终会调用read和write函数进行IO操作,原创 2012-05-30 22:20:16 · 895 阅读 · 0 评论 -
面向对象的C语言框架尝鲜
从学习编程开始就一直被灌输面向对象,继承,多态等等思想,工作后遇到一些纯C的编程工作还是有些不习惯,毕竟用C实现库以及中间件给别人使用也还是不如C++方便直观。这几天偶然看到一个轻量级的面向对象的C编程框架LW_OOPC,作者通过宏定义封装了面向对象编程的一些工具,我们可以用来方便的指定类,继承,借口等。首先下载框架包含到我们的项目中来(lw_oopc.h以及lw_oopc.c两个文件),原创 2012-05-20 16:40:22 · 1101 阅读 · 0 评论 -
C++操作SQLite示例笔记
SQLLite是一个轻量级关系型数据库,设计的目标是嵌入式的,很多桌面应用程序(如火狐浏览器,QQ,skype)以及手机应用经常用它来作为数据存储,毕竟纯文本或者xml格式的读取不方便。C语言操作SQLite3的方式很简单,下面的程序大致演示了数据表创建,插入数据,查询数据几个常用的数据操作。#includeextern "C"{#include"sqlite3.h"}usi原创 2012-09-03 14:39:20 · 1173 阅读 · 0 评论 -
linux编译生成动态链接库与静态链接库
这里以sqlite源代码为例,我们有时候需要用sqlite作为嵌入式存储引擎,但是我的opensuse上又不能自动yast安装sqlite的开发包,我们就自行编译链接库吧。首先下载sqlite3的源代码(共四个文件:shell.c,sqlite3.c,sqlite3ext.h,sqlite3.h)。1,编译静态链接库libsqlite3.agcc -c sqlite3.c shel原创 2012-09-06 09:46:46 · 1991 阅读 · 0 评论 -
写一个mongodb压力测试程序
闲着无事写一个mongodb的压力测试程序,支持设置数据库的并发数,数据长短,每个连接写数据的数目。(用到mongodb官方的C驱动mongoc库)(没有考虑连接失败的情况,只是个简单的并发测试例子,当n指定过大后会连接失败)功能如下:vm6245:~/penjin/mongodb # ./test -hmongo-bench-i host of the mongo server原创 2012-09-06 16:52:48 · 3359 阅读 · 2 评论 -
php和C语言程序计时
有时候想查看程序运行时间,可以用time工具,在程序命令前加time可以粗略查看到程序运行花费的时间。倘若想查看某个程序片段运行耗时则需要自己计算了。php记录时间(秒级别)<?php$start = microtime(true);for($i = 0;$i < 10000;$i ++){ for($j = 0;$j < 1000;$j ++){ }}$end原创 2012-09-07 15:26:12 · 1036 阅读 · 0 评论 -
C++操作leveldb示例笔记
leveldb是一个google实现的超高性能的k/v数据库,官方介绍说读写性能都很强大。下载下来make生成动态链接库libleveldb.so以及静态链接库libleveldb.a文件,下面就写一个测试文件使用leveldb吧。#include#include#include"leveldb/db.h"using namespace std;using namespace l原创 2012-09-03 17:15:49 · 6400 阅读 · 0 评论 -
用IOCP实现个简易TCP并发服务器
我们前面接触过几个高效的unix/linux的异步IO模型:select,poll,epoll,kqueue,其实windows也有它的异步模型,比如windows版本的select,当然最高效的还属IOCP吧。我也没有做过多少windows的网络编程,但是看到网上不少人拿IOCP与epoll模型做对比,觉得必定不简单,忍不住试试。IOCP的原理大家多百度百度吧,我也还没弄清楚,呵呵。大致核心原创 2012-07-13 14:16:45 · 4510 阅读 · 0 评论 -
VC多字节字符串和宽字节字符串转换
在VC编程中,wchar_t表示unicode字符类型,一个字符占两个字节,char则是ascii码类型,一个字符占一个字节。两者分别用在Unicode和ANSI编程环境下。下面是一组测试程序以及两者之间的转换程序,主要用到wcstombs以及mbstowcs函数。#include#include#includeusing namespace std;/*** LPWSTR原创 2012-07-17 15:51:15 · 2454 阅读 · 0 评论 -
windows 创建子线程
微软在Windows API中提供了建立新的线程的函数CreateThread,函数的原型定义如下:HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, //线程安全属性 DWORD dwStackSize, //堆栈大小 LPTHREAD_START_ROUTINE lpStartAddres原创 2012-07-17 15:50:00 · 1157 阅读 · 0 评论 -
windows 创建子进程
windows下想要创建一个子进程不如linux的fork函数来得方便,通过CreateProcess函数创建一个新的进程,函数的定义如下BOOL CreateProcess( LPCTSTR lpApplicationName, // 应用程序名称 LPTSTR lpCommandLine, // 命令行字符串 LPSECURITY_ATTRIBUTES lpProcessAttr原创 2012-07-17 15:49:48 · 16416 阅读 · 1 评论 -
libcurl模拟http访问的几点注意事项
libcurl是一个免费开源的,客户端url传输库,支持FTP,FTPS,TFTP,HTTP,HTTPS等常见协议,跨平台,支持Windows,Unix,Linux等,线程安全,支持Ipv6。并且易于使用的函数库,http://curl.haxx.se/libcurl/大致的使用方法如下: curl = curl_easy_init();//初始化 if(cur原创 2012-04-25 11:51:21 · 4000 阅读 · 1 评论 -
如何禁止程序启动多个实例
某些特定需求下(比如创建守护进程)我们需要禁止程序启动多个实例,如何让后启动的程序检测到程序已经在运行,我们可以简单的使用互斥信号来实现VC 6.0 项目下编译通过,可在程序启动处(如控制台程序的main函数,form程序的winmain函数)加入如下代码(需要包含windows.h头文件),结合GetLastError函数判断是否程序已经在运行。#include#inclu原创 2012-04-24 09:01:20 · 2801 阅读 · 0 评论 -
Winsock编程示例收录
偶然看到一个简单可用的socket通信示例程序,借助winsock静态库的功能,代码风格很类似linux下的套接口编程原文链接http://www.cnblogs.com/karying/archive/2009/12/14/2015391.html服务器端#include#include#pragma comment(lib,"ws2_32.lib")void main(转载 2012-05-22 14:45:23 · 971 阅读 · 0 评论 -
实现TCP并发服务器之三(select函数)
前面两篇介绍用进程方式和线程方式实现并发服务,其实里面调用send,read,accept函数都会导致阻塞,而linux的select函数可以使我们在程序中同时监听多个文件描述符的读写状态。程序会停在select这里等待,直到被监视的文件描述符有某一个或多个发生了状态改变。select()的机制中提供一fd_set的数据结构,实际上是一long类型的数组, 每一个数组元素都能与一打开的文件描述符(原创 2012-07-04 08:08:07 · 4074 阅读 · 1 评论 -
借用nginx内存池来管理自己的程序内存
最近学习nginx的源代码,深深地喜欢它的内存池管理方式,一次性申请大块的内存以供分配,避免了小内存的频繁申请释放产生的碎片,而且统一的内存释放可以保证不会有内存泄露。 我在此把nginx的内存池管理代码提取出来方便单独使用。(代码下载地址 http://dl.dbank.com/c0p7h49ts8)使用方法如下:#include#include"mem_p原创 2012-04-24 14:29:58 · 2145 阅读 · 0 评论 -
实现TCP并发服务器之五(epoll函数)
epoll是poll函数的加强版,因为针对同时监听大量文件描述符时poll函数比较低效率。select受到监听描述符个数的限制,比如我的示例三中的数值是1024,同时监听1025个描述符就不可能了。epoll模型不受这个限制,可打开的文件描述符远大于这个数字。IO效率也不会因为FD的增加而线性下降,我们来看看epoll怎么实现TCP并发服务器吧。以下是服务器端代码,客户端代码仍用多进程的那个版原创 2012-07-04 08:10:18 · 2936 阅读 · 0 评论 -
实现TCP并发服务器之四(poll函数)
poll函数类似于select函数,但是它的程序员接口不同,尽管它也可用于任何类型 文件描述符。与select不同,poll不为每个状态(可读,可写,异常状态)构造一个描述符集,而是构造一个pollfd结构数组,每个数组元素指定一个描述符编号以及对其所关心的状态。struct pollfd { int fd; //file descriptor to check short ev原创 2012-07-04 08:09:17 · 4006 阅读 · 1 评论 -
实现TCP并发服务器之一(多进程)
下面用多进程方式实现一个TCP并发服务器,每当一个新的客户端连接时fork一个子进程去和它通信。(各种主流的web服务器都不是纯粹的多进程方式运行,比如apache在每个进程中都用多路复用方式,直到连接数多到超过select可监听的最大描述符数时也会利用新的进程去处理。)服务器端(server.c)#include#include#include#include#include原创 2012-07-04 08:05:53 · 2817 阅读 · 0 评论 -
实现TCP并发服务器之二(多线程)
通过多线程来实现TCP服务器端和多进程类似,客户端代码同上一篇博客,下面只粘贴服务器端的代码。编译方法:gcc server.c -o server.out -lpthread#include#include#include#include#include#include#include#include#define MAX_LISTEN 5#define POR原创 2012-07-04 08:07:00 · 1907 阅读 · 0 评论 -
用LUA扩展cpp程序的几个测试
Lua提供的很多特性(垃圾收集,高效的字符串处理,便捷的开发)都是很吸引人的,能够把C中复杂的业务逻辑剥离到LUA脚本中处理的话会方便不少。下面做的几组测试示例分别展示了C语言如何调用Lua脚本,调用Lua函数以及Lua脚本如何调用C中自定义函数。测试一:最经典的Hello Worldmain.cppextern "C" { #include "lua.h" #include原创 2012-05-23 17:31:32 · 1720 阅读 · 0 评论 -
winsock编程使用HTTP代理(一)
代理服务我们比较熟悉了,常见的代理方式有HTTP,sock4,sock5。到底浏览器是怎么通过代理服务器访问目标资源的呢,我这里使用最简单的http代理服务来写个程序测试一下。首先用socket编程模拟正常的HTTP请求,winsock的使用方法请参看我以前的一篇博文——链接。#include#include#pragma comment(lib,"ws2_32.lib")vo原创 2012-07-03 19:24:28 · 2689 阅读 · 1 评论 -
winsock编程使用Sock5代理(二)
接着上一篇博文(winsock编程使用HTTP代理),常用的代理服务方式除了HTTP以外就是Sock4和Sock5。很多软件(迅雷,QQ)都提供了各种代理服务的支持,我们来看看怎么通过sock5代理来实现网页访问吧。Sock5代理的大致工作流程如下:1,需要代理方向服务器发出请求信息。2,代理方应答3,需要代理方接到应答后发送向代理方发送目的ip和端口4,代理方与目的连接原创 2012-07-03 19:27:41 · 3567 阅读 · 0 评论 -
C++写一个简单的fastcgi程序
接触web技术这么久,应该对fastcgi不陌生了,我一直以为只有php可以使用fastcgi配置多个cgi程序解释webserver发来的请求,这几天查看官方介绍,发现perl,python,java甚至C语言与shell也是可以开发fastcgi程序的。下面演示一个用C实现Hello World网页的输出。(互联网初期没有php等脚本语言时,网页开发者应该就是按照这种方式用C来做网页的吧)原创 2012-09-04 10:03:13 · 5370 阅读 · 0 评论
分享