![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
文章平均质量分 64
Mark-Han
现任上海德拓信息技术有限公司高级副总裁,负责公司整个研发体系,在存储、云计算、大数据平台、数据管理应用,备份容灾、虚拟化等领域有些研究, 有几年的开发设计经验,希望和更多的朋友多交流,共同成长 http://blog.csdn.net/hanxin1987216
展开
-
windows dll 和 Linux so 的异同
摘要:动态链接库技术实现和设计程序常用的技术,在Windows和Linux系统中都有动态库的概念,采用动态库可以有效的减少程序大小,节省空间,提高效率,增加程序的可扩展性,便于模块化管理。 但不同操作系统的动态库由于格式 不同,在需要不同操作系统调用时需要进行动态库程序移植。本文分析和比较了两种操作系统动态库技术,并给出了将Visual C++编制的动态库移植到Linux上的方法和经验。原创 2009-09-01 13:28:00 · 2374 阅读 · 1 评论 -
通过_stat结构体获取文件大小
<br /><br />获取文件大小,使用到_stat结构体,用_stat函数取得数据。<br />struct _stat ST;<br /> _stat("C://xxx.iso", &ST); <br />ST.st_size 为文件大小(Byte)。<br />当文件超过4GB时,<br />char filesize[20] = {0};<br />struct _stati64 ST;<br />::_stati64("C://xxx.iso", &ST);<br />_i64toa(ST.st原创 2010-11-07 13:25:00 · 3415 阅读 · 1 评论 -
C语言中伪随机数生成方法
<br /><br />-----------------------------------------<br />原理<br /><br />C语言中伪随机数生成算法实际上是采用了"线性同余法”。具体的计算如下:<br /><br />Xi = (Xi-1 * A + C ) mod M <br /><br />其中A,C,M都是常数(一般会取质数)。当C=0时,叫做乘同余法。引出一个概念叫seed,它会被作为X0被代入上式中,然后每次调用rand()函数都会用上一次产生的随机值来生成新的随机值。可以看原创 2010-11-17 13:27:00 · 10020 阅读 · 2 评论 -
一个类型转换的bug
<br /> 类型转换bugint a = -10;unsigned int b = 5;<br />if (a > b) {printf(“big/n”):} else {printf(“small/n”);}<br />有经验的人一看上面的代码,就知道有问题,“>”会让int型降为unsigned int,结果会是打印出“big”,因为-10转成unsigned int肯定比5大多了。<br />虽然是个小bug,却是第一次撞上,因为我以前如果拿变量做计数,通常是给size_t类型,所以还真不容易遇到。原创 2011-01-27 22:57:00 · 453 阅读 · 0 评论 -
ACE_Mem_Map 笔记1
<br /><br /> ACE太大了,学习的过程充满了坎坷,我想还是从基础开始吧,撇开ACE作为网络开发库的初衷不说,ACE也是学习操作系统相关知识的良好资源,良好的跨平台性使得它必须封装操作系统提供的各种应用程序接口,所以学习ACE基础就当作是复习操作系统吧,慢慢积累,相信总有一天我能站在平流层的高度来一睹ACE的全貌。内存映射是IPC中的一种,不过其似乎作为进程通信的一种手段在实际用途中似乎用的并不多,大多数人将其作为一种简洁高效率操作文件的手段来使用。通过strace跟踪Linux各种命令原创 2011-03-06 01:09:00 · 2392 阅读 · 0 评论 -
Visual age C++ On AIX 安装
1.安装步骤步骤一:将AIX操作系统安装盘的第一张放入光盘驱动器,之后执行下面的命令:# smitty install--> Install and Update Software--> Install and Update from ALL Availa原创 2011-08-01 15:50:27 · 1166 阅读 · 1 评论 -
poll, select, epoll
随着2.6内核对epoll的完全支持,网络上很多的文章和示例代码都提供了这样一个信息:使用epoll代替传统的poll能给网络服务应用带来性能上的提升。但大多文章里关于性能提升的原因解释的较少,这里我将试分析一下内核(2.6.21.1)代码中poll与epoll的工作原理,然后再通过一些测试数据来对比具体效果。POLL:先说poll,poll或select为大部分Unix/Linu转载 2012-06-16 15:57:20 · 973 阅读 · 1 评论 -
人们最初厌恶编程的10个原因
作者 jforeverg 2011-08-19 16:19:53英文原文: 10 Reasons Why People Initially Suck at Programming每个人刚开始的编程技术都不理想,所以我们决定列出一张清单,写上大家都能接受的理由,还有提高编程能力的建议。 0. 编程适合所有人吗?开门见山地说,编程并不适合所有人。它比较适合那些有耐心去解决难转载 2012-09-14 13:24:45 · 1193 阅读 · 0 评论 -
NoSQL数据库:MongoDB初探
NoSQL数据库:MongoDB初探跟着时下炒得火热的NOSQL潮流,学习了一下mongodb,记录在此,希望与感兴趣的同学一起研究!MongoDB概述mongodb由C++写就,其名字来自humongous这个单词的中间部分,是由10gen开发并维护的,关于它的一个最简洁描述为:scalable, high-performance, open source,转载 2012-11-07 09:10:00 · 1293 阅读 · 0 评论 -
更好的内存管理-jemalloc
更好的内存管理-jemalloc ▼ 今年年初由于facebook而火起来的jemalloc广为人之,但殊不知,它在malloc界里面很早就出名了。Jemalloc的创始人Jason Evans也是在FreeBSD很有名的开发人员。此人就在2006年为提高低性能的malloc而写的jemalloc。Jemalloc是转载 2012-11-07 09:15:10 · 48452 阅读 · 0 评论 -
GCC 中的编译器堆栈保护技术
GCC 中的编译器堆栈保护技术以堆栈溢出为代表的缓冲区溢出已成为最为普遍的安全漏洞。由此引发的安全问题比比皆是。早在 1988 年,美国康奈尔大学的计算机科学系研究生莫里斯 (Morris) 利用 UNIX fingered 程序的溢出漏洞,写了一段恶意程序并传播到其他机器上,结果造成 6000 台 Internet 上的服务器瘫痪,占当时总数的 10%。各种操作系统上出现的溢出漏转载 2012-11-07 13:24:41 · 2114 阅读 · 0 评论 -
【转】先思再行 闭着眼睛编程
摘要:解决问题最重要的习惯不是一直盯着屏幕和编写修改代码,某些时候,阻止你成功的东西恰恰会是过于努力。这时候你需要暂停一下,平缓你的思绪,换一种方法或许能带给你不一样的效果。你会花多少时间思考如何编写代码?乍看这是一个引人思考的深层次问题,在编程专业中常有这样的误解,软件开发就是写代码。软件开发实为一门艺术,而代码仅仅是通往艺术之门的工具。好比燃料和画布是画家的工具一样,代码的转载 2012-11-09 08:53:46 · 752 阅读 · 0 评论 -
中文编码杂谈
中文编码杂谈桂南编码问题的例子在windows自带的notepad(记事本)程序中输入“联通”两个字,保存后再次打开,会发现“联通”不见了,代之以“��ͨ”的乱码。这是windows平台上典型的中文编码问题。即文件保存的时候是按照ANSI编码(其实就是GB2312,后面会详细介绍)保存,打开的时候程序按照UTF-8方式对内容解释,于是就出现了乱码。避免乱码的方式很简单,转载 2013-01-11 09:16:43 · 1117 阅读 · 0 评论 -
看小白如何解决ajax跨域问题
由于此前很少写前端的代码(哈哈,不合格的程序员啊),最近项目中用到json作为系统间交互的手段,自然就伴随着众多ajax请求,随之而来的就是要解决ajax的跨域问题。本篇将讲述一个小白从遇到跨域不知道是跨域问题,到知道是跨域问题不知道如何解决,再到解决跨域问题,最后找到两种方法解决ajax跨域问题的全过程。不知是跨域问题起因是这样的,为了复用,减少重复开发,单独开发了一转载 2013-01-11 09:18:31 · 1049 阅读 · 0 评论 -
在AIX平台如何创建动态库
对UNIX 平台,动态库的创建大同小异,都是通过编译器(实际上为ld )生成。除此之外, 在AIX 平台,系统提供了丰富的工具创建动态库。 从大的范围看有两种不同的方法可以创建动态库,一种是按照传统的方式,编写输出符号 文件,创建动态库。另一种可通过编译器提供的参数选项,自动生成输出符号文件创建动态 库。将逐一给出介绍。 按照传统的方法创建动态库,关键的问题是如何编写输出符号文件,VisualAge C/C++原创 2010-08-20 11:59:00 · 2703 阅读 · 0 评论 -
HP_UX 库环境变量设置
1、 编译HP-UX编译为动态库非常简单,只需要加参数-b,而参数+z/+Z是为了生成位置无关代码(PIC position independent code)。2、 使用使用动态库的方式有多种1) 类似静态库方式编译,直接用-L -l的方式在编译选项中指定。需要注意的是在HP9000下32位应用会将动态库的绝对路径加进去,而在IA和64位的PA下只包含文件名。如原创 2010-04-15 13:21:00 · 3818 阅读 · 0 评论 -
AIX下的升级补丁包的命令
smitty update_all 使用update_all来升级MLsmitty install_bundle主要是用来安装软件包的,比如一些第三厂家设备的驱动程序等smitty instfix 安装指定的补丁,比如IY…………smit install_latest 安装指定的软件 例如hacmp等smitty install_all 应该就是用来安装和更新软件原创 2010-04-15 13:19:00 · 5420 阅读 · 0 评论 -
编译时的 warning
warning其实可以分为两种:一种是可以忽略的,一种是不可以忽略的。比如:int被看作bool的warning往往是不能忽略的,而MyClass*被转换成int的warning都是可忽略的。#pragmawarning(disable:xxxx)可以显式的忽略那些确定不会造成恶劣影响的warning。比如VC编译器在编译STL时候的一些warning。只有把那些可以忽略的原创 2009-08-31 10:18:00 · 1279 阅读 · 0 评论 -
创建一个EveryOne SECURITY_ATTRIBUTES.
使用IIS的身份模拟来使用通过SharedMemoryEx生成的内存映射文件...这种做法可以解决一时的问题,不能真正长久的解决问题.在前一个文章MutexEx 中,Mutex的创建,使用也要对其权限进行设置..同样的,如果我们想在不同的帐号使用这个Mutex,我们可能也不得不使用另一种方式的身份模拟.在Win32中,我们可以通过创建 NULL DACL来创建一个Every原创 2009-09-10 12:35:00 · 3606 阅读 · 0 评论 -
function结合bind 封装回调函数
很喜欢function,但之前没认真思考,总感觉在使用bind绑定时很麻烦,所以有抵触情绪,有时宁可使用函数指针或thunk。今天又想起这个问题,并且尝试了一下将bind部分封装到类里:如能实现,外部接口只需要将需要回调的函数名传递进去即可。 经过一番努力,使用模板类实现了。 主要代码:C/C++ code<!-- Code highlighting pro原创 2009-09-30 11:05:00 · 1769 阅读 · 0 评论 -
Heap corruption detected error
最近写程序忽然发现了一些错误,运行总是报Heap corruption detected.断点单步发现总是在delete的时候出错。以前也出现过,不过没啥注意,现在想留着是个大大的心病!于是上网查了相关资料:下面是转载资料:http://www.cppblog.com/kerlw/archive/2007/04/10/21604.aspx今天写程序的时候原创 2009-10-10 12:48:00 · 2770 阅读 · 0 评论 -
CLOSE_WAIT生成原因
原文地址:http://blog.csdn.net/eroswang/archive/2008/03/10/2162986.aspx关闭socket分为主动关闭(Active closure)和被动关闭(Passive closure)两种情况。前者是指有本地主机主动发起的关闭;而后者则是指本地主机检测到远程主机发起关闭之后,作出回应,从而关闭整个连接。 其状态图如下图所示:转载 2009-10-19 20:12:00 · 641 阅读 · 0 评论 -
将DLL中的导出函数表导出到一定义(.DEF)文件
一、使用VC++的工具DUMPBIN将DLL中的导出函数表导出到一定义(.DEF)文件EXAMPLE: DUMPBIN VideoDeCoder.dll /EXPROTS /OUT:VideoDeCoder.def 二、将导出的.DEF文件整理为一符合.DEF个数的函数导出文件EXAMPLE:VideoDeCoder.DEF 文件内容如下Dump of file VideoDeCo原创 2010-03-30 18:53:00 · 2986 阅读 · 0 评论 -
xpcom 组件开发技术
COM技术作为微软推行的一种组件技术,在WINDOWS平台站有重要地位,在模块重用,跨语言通信等方面都能见到其身影。但今天给我要介绍的是LINUX下的COM实现----XPCOM,这是MOZILLA浏览器项目中所使用的基本技术,我们可以用C++制作XPCOM组件,在C++客户程序或MOZILLA浏览器中通过JAVASCRIPT脚本来调用组件,从而实现软件模块的复用。 1、原创 2010-03-30 18:56:00 · 1414 阅读 · 2 评论 -
reinterpret_cast本质
代码:#include iostream> using namespace std;void main() { int i = 875770417; couti" "; char* p = reinterpret_cast转载 2010-03-30 19:05:00 · 524 阅读 · 0 评论 -
学习 DNAT 中
DNAT(Destination Network Address Translation,目的地址转换) 通常被叫做目的映谢。而SNAT(Source Network Address Translation,源地址转换)通常被叫做源映谢。这是我们在设置Linux网关或者防火墙时经常要用来的两种方式。以前对这两个都解释得不太清楚,现在我在这里解释一下。首先,我们要了解一下IP包的结构,如下图原创 2010-03-30 19:33:00 · 449 阅读 · 0 评论 -
虚析构函数、纯虚析构函数 理解
虚析构函数析构函数的工作方式是:最底层的派生类(mostderivedclass)的析构函数最先被调用,然后调用每一个基类的析构函数。因为在C++中,当一个派生类对象通过使用一个基类指针删除,而这个基类有一个非虚的析构函数,则结果是未定义的。运行时比较有代表性的后果是对象的派生部分不会被销毁。然而,基类部分很可能已被销毁,这就导致了一个古怪的“部分析构”对象,这是一个泄原创 2010-03-31 12:26:00 · 807 阅读 · 0 评论 -
c++ 中的类型转换
1、static_cast Operator MSDN: Theexpression static_cast ( expression ) convertsexpression to the type of type-id based solely on the types present inthe expression. No run-time type chec原创 2010-03-31 12:33:00 · 427 阅读 · 0 评论 -
C++ 智能指针学习
首先来看SmartPtr的定义:#pragma once#include assert.h>///////////////////////////////////////////////////// a simple smart pointer wrapper class, use reference count////原创 2010-03-31 12:44:00 · 589 阅读 · 0 评论 -
常用 正则表达式 笔记
匹配中文字符的正则表达式: [/u4e00-/u9fa5]评注:匹配中文还真是个头疼的事,有了这个表达式就好办了匹配双字节字符(包括汉字在内):[^/x00-/xff]评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)匹配空白行的正则表达式:/n/s*/r评注:可以用来删除空白行匹配HTML标记的正则表达式:]*>.*?|评注:网上原创 2010-04-15 13:17:00 · 547 阅读 · 0 评论 -
淘宝搜索引擎的缓存机制
在淘宝搜索系统中中,搜索结果页的缓存(Cache)是对搜索“效率”贡献最大的设计。由于缓存中的搜索结果页都是前人查询的结果,因此用户的查询请求如果在缓存中命中(和前人的查询相同),则查询系统直接把缓存中存放的搜索结果页返回给用户。用户在使用淘宝搜索引擎进行检索时,查询词可能千差万别。但是如果从大量用户的查询统计上看,总会有一些词汇经常被查询,有些词汇却很少被查询。(1)前20%的查询词的查转载 2013-04-24 09:42:59 · 2616 阅读 · 0 评论