在linux下安装eclipse以及运行c++程序的安装步骤
摘要:1. 下载jre,eclipse,cdt其中jre是java运行环境,eclipse需要先装jre,才可能运行,cdt是在eclipse中运行c\c++程序的插件。下载jre网址是:http://www.oracle.com/technetwork/java/javase/downloads/...
阅读全文
posted @
2014-04-30 16:20
bitbit
阅读(9935)
推荐(1) 编辑
在centos (linux) 搭建 eclipse c++开发分环境
摘要:网上说得很多,很烦,操作了很多,总有错误,但解决方案很简单。步骤就下面几步就OK了安装gcc 、g++yum install gccyum install gcc-c++安装jdk,配置jdk的环境(网上很多,就不用多说了)下载软件:eclipse: http://www.eclipse.org/d...
阅读全文
posted @
2014-04-30 15:58
bitbit
阅读(1939)
推荐(0) 编辑
Linux上使用Qt Creator进行C/C++开发
摘要:Qt Creator支持中文,启动速度比Eclipse、Netbeans更快,界面也更美观,跟输入法Fcitx协作良好(光标跟随)。你既可以把Qt Creator当代码编辑器作为vim辅助,好处在于Qt Creator能够自动parse项目,形成友好快速的智能提示,而且你也同样可以使用Qt Crea...
阅读全文
posted @
2014-04-30 15:49
bitbit
阅读(41455)
推荐(5) 编辑
使用Qt Creator 2.60编写C/C++程序
摘要:使用Qt Creator 2.60编写C/C++程序(Windows7-64bit和Ubuntu12.10-64bit)。一、Windows7-64bit +MinGW:从官网下载qt creator安装,如果没有安装qt(注意qt和qt creator不是一回事)的话是没办法直接使用的,因为qt ...
阅读全文
posted @
2014-04-30 11:57
bitbit
阅读(6179)
推荐(0) 编辑
用 Qt Creator 开发非 Qt 的 C/C++ 程序
摘要:在Windows还是习惯用VS2005但是现在到了Linux下,开发起来C/C++程序就没有那么得心应手的IDE了。虽然很多人推荐E开头那个主要作为Java开发的IDE,不过安上插件后感觉不大好,一个是那个智能完成功能反应有点迟钝,对标准库的支持 不大好,另一个是编译起来还是麻烦,不能自动根据工程生...
阅读全文
posted @
2014-04-30 11:40
bitbit
阅读(8824)
推荐(0) 编辑
linux FTP配置详解
摘要:一.vsftpd说明:LINUX下实现FTP服务的软件很多,最常见的有vsftpd,Wu-ftpd和Proftp等.Red Hat Enterprise Linux中默认安装的是vsftpd. 访问FTP服务器时需要经过验证,只有经过了FTP服务器的相关验证,用户才能访问和传输文件.vsftpd提供...
阅读全文
posted @
2014-04-29 23:20
bitbit
阅读(3683)
推荐(0) 编辑
转:CMake安装和使用
摘要:CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。只是 CMake 的组态档取名为 CmakeLists.txt。Cmake 并不直...
阅读全文
posted @
2014-04-29 19:42
bitbit
阅读(76455)
推荐(1) 编辑
虚拟机和宿主机不能互ping的解决办法等
摘要:1. 虚拟机和宿主机不能互ping的解决办法:禁用无关虚拟网卡.2. 有时有效光驱设备为cdrom1.3. CentOS 6.3 图形界面切换用户:System->Log Out
阅读全文
posted @
2014-04-29 18:53
bitbit
阅读(333)
推荐(0) 编辑
CentOS下安装IDE -- QTCreator
摘要:月底,美国的大佬们将会过来给我们几个搞一个培训。老大要求我们提前学习一下Qt。我现在的首要任务是在自己的CentOS系统上安装一下Qt开发环境。1. 获取下载地址Qt的官网是:http://qt.digia.com/在注册网页里填写了我的信息,重要的是邮件地址之后。网站给发了一封邮件,提供了安装相关...
阅读全文
posted @
2014-04-29 13:18
bitbit
阅读(5320)
推荐(0) 编辑
域名无法解析 Linux临时或永久修改DNS
摘要:最近给VPS重装了系统,因为服务商不提供DHCP,所以只好手动设置IP和DNS Server。悲催的是系统重装的时候忘记了输入DNS Server,最后导致进去系统后,各种域名无法解析。Linux中修改DNS有两种方式,临时修改和永久修改,下面分别介绍。1、临时修改网卡DNS地址sudo vim /...
阅读全文
posted @
2014-04-29 11:00
bitbit
阅读(1427)
推荐(0) 编辑
CentOS6.3的VNC--远程桌面
摘要:2G内存的服务器开启Gnome图形化界面应该没什么问题。1G还有512M的内存的就不敢开启了,现在内存正常状态就已经60%左右了。CentOS6.3服务器,Gnome图形化界面按照阿里官方步骤:一.配置163的yum源1.导入CentOS-6的GPG证书rpm –import http://mirr...
阅读全文
posted @
2014-04-28 11:37
bitbit
阅读(355)
推荐(0) 编辑
Linux下通用线程池的创建与使用
摘要:线程池:简单地说,线程池 就是预先创建好一批线程,方便、快速地处理收到的业务。比起传统的到来一个任务,即时创建一个线程来处理,节省了线程的创建和回收的开销,响应更快,效率更高。在linux中,使用的是posix线程库,首先介绍几个常用的函数:1 线程的创建和取消函数pthread_create创建线...
阅读全文
posted @
2014-04-25 15:42
bitbit
阅读(3091)
推荐(0) 编辑
Linux下动态共享库加载时的搜索路径详解
摘要:对动态库的实际应用还不太熟悉的读者可能曾经遇到过类似“error while loading shared libraries”这样的错误,这是典型的因为需要的动态库不在动态链接器ld.so的搜索路径设置当中导致的。 具体说来,动态链接器ld.so按照下面的顺序来搜索需要的动态共享库: 1.ELF可...
阅读全文
posted @
2014-04-25 11:13
bitbit
阅读(1258)
推荐(1) 编辑
在启动vsftpd,有时会报错
摘要:在启动vsftpd,有时会报错:C:>ftp 192.168.0.101Connected to 192.168.0.101.220 (vsFTPd 2.0.5)User (192.168.0.101:(none)): frank331 Please specify the password.Pas...
阅读全文
posted @
2014-04-25 10:20
bitbit
阅读(273)
推荐(0) 编辑
CentOS 6.5上使用gdb调试时出现Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.132.el6.i686 .
摘要:在CentOS6.5上用gdb调试时提示Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.132.el6.i686先修改/etc/yum.repos.d/CentOS-Debuginfo.repo里面的debuginfo...
阅读全文
posted @
2014-04-25 00:18
bitbit
阅读(3434)
推荐(2) 编辑
Cygwin--unix/linux模拟环境
摘要:Cygwin是一个在windows平台上运行的类UNIX模拟环境,是cygnus solutions公司开发的自由软件(该公司开发了很多有用的工具,著名的还有eCos,不过现已被Redhat收购)。它对于学习UNIX/Linux操作环境,或者从UNIX到Windows的应用程序移植,或者进行某些特殊...
阅读全文
posted @
2014-04-23 19:12
bitbit
阅读(2098)
推荐(0) 编辑
如何在 Linux 下调试动态链接库
摘要:大家都知道在 Linux 可以用 gdb 来调试应用程序,当然前提是用 gcc 编译程序时要加上-g 参数。我这篇文章里将讨论一下用 gdb 来调试动态链接库的问题。 首先,假设我们准备这样的一个动态链接库:QUOTE:库名称是: ggg动态链接库文件名是: libggg.so头文件是: get.h...
阅读全文
posted @
2014-04-23 09:12
bitbit
阅读(5413)
推荐(0) 编辑
linuxGDB下动态链接库的调试
摘要:(gdb) file (gdb) load #这条应该是可选的(gdb) dir (gdb) sharedlibrary (gdb) breakpoint (gdb) runload 是将动态库加载入内存。sharedlibrary是将动态库的符号读入gdb,为了你能找到变量和函数名。它们本身是没...
阅读全文
posted @
2014-04-23 09:06
bitbit
阅读(4971)
推荐(0) 编辑
linux下杀死进程(kill)的N种方法
摘要:常规篇: 首先,用ps查看进程,方法如下:$ ps -ef……smx 1822 1 0 11:38 ? 00:00:49 gnome-terminalsmx 1823 1822 0 11:38 ? 00:00:00 gnome-pty-helpersmx 1824 1822 0 11:38 pts/...
阅读全文
posted @
2014-04-22 20:30
bitbit
阅读(30465)
推荐(1) 编辑
转:一个多目录结构C程序的Makefile
摘要:来源: ChinaUnix博客 一个多目录结构的C程序Makefile,代码存在main init input output exit目录。CC = gccRDIR = RelsMAIN_DIR = main/RelsINIT_DIR = init/RelsINPUT_DIR = input/Re...
阅读全文
posted @
2014-04-22 16:38
bitbit
阅读(406)
推荐(0) 编辑
一个模块包含多目录和源文件,Makefile写法
摘要:假设这样一种情况,一个内核模块有多个目录多个源文件组成,编译成模块是Makefile如何编写呢?我这边测试通过的一种方法介绍一下。假设该模块的组成方式如下:module--> a.c | -->b/ | -->b1.c -->b2.c也就是该模块源代码由a.c和...
阅读全文
posted @
2014-04-22 16:22
bitbit
阅读(1733)
推荐(0) 编辑
Makefile之大型工程项目子目录Makefile的一种通用写法
摘要:管理Linux环境下的C/C++大型项目,如果有一个智能的Build System会起到事半功倍的效果,本文描述Linux环境下大型工程项目子目录Makefile的一种通用写法,使用该方法,当该子目录内的文件有增删时无需对Makefile进行改动,可以说相当的智能。下面先贴代码(为减小篇幅,一些非关...
阅读全文
posted @
2014-04-22 16:14
bitbit
阅读(4055)
推荐(0) 编辑
Makefile之写demo时的通用Makefile写法
摘要:Makefile之写demo时的通用Makefile写法[日期:2013-05-22] 来源:CSDN 作者:gqb666 [字体:大 中 小] 前面的一篇文章Makefile之大型工程项目子目录Makefile的一种通用写法介绍了大型项目子目录Makefile的一种通用写法,然而最近在写Linux...
阅读全文
posted @
2014-04-22 16:08
bitbit
阅读(380)
推荐(0) 编辑
如何自动生成Makefile
摘要:作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便。一般情况下,大家都是手工写一个简单Makefile,如果要想写出一个符合自由软件惯例的Makefile就不那么容易了。 在本文中,将给大家介绍如何使用autoconf和automake两...
阅读全文
posted @
2014-04-22 11:48
bitbit
阅读(2651)
推荐(0) 编辑
重要:Linux下IDE--KDevelop (用来跟踪调试C++) Ubuntu下QT4开发环境的搭建及初体验
摘要:Linux下安装Qt4有两大问题,一是环境变量,二是IDE(集成开发环境)。安装Qt4也有两种方法,一种是apt-get,一种是下载源码包,而后 一种方法已经人证实是最有可能不好使的方法。所以我最终采用了apt-get的方式。而apt-get也有两种方式(这就是Free OS之不爽之处):新立得与命...
阅读全文
posted @
2014-04-22 11:34
bitbit
阅读(1038)
推荐(0) 编辑
gcc/g++ 命令的常用选项
摘要:gcc/g++ 命令的常用选项使用g++编译CPP文件如果用gcc编译C++源文件时,加以下选项:-lstdc++,否则使用了C++操作的文件编译会出错。假如在程序中用到new delete操作,而不加此选项进行编译会出现以下错误信息:zch07eha01:/home/mrbt48/cpp> gcc...
阅读全文
posted @
2014-04-20 14:56
bitbit
阅读(6936)
推荐(0) 编辑
linux C++ 共享库导出类
摘要:1.共享库的对外接口函数的声明必须加上extern “C”。2.使用共享库对话接口函数生成的对象指针时在该对象未被释放之前不能关闭共享库句柄,否则会出现segmentation fault错误。以下是一个插件式设计的示例:1、主执行程序:main.cpp#include#include#includ...
阅读全文
posted @
2014-04-20 14:26
bitbit
阅读(8630)
推荐(0) 编辑
gdb调试运行程序带参数(调用动态链接库),debug过程记录
摘要:library多线程file1.gdb (运行程序名称)例如gdb cbenchmark2.设置运行参数set args -c 1 -n 1 -F ./libaliww.so -l 13.如果是多线程程序set follow-fork-mode child4.设置断点,如果代码是动态链接库.so中的...
阅读全文
posted @
2014-04-20 14:23
bitbit
阅读(2869)
推荐(0) 编辑
linux静态链接库与动态链接库详解
摘要:一顺便说说了哦 通常情况下,对函数库的链接是放在编译时期(compile time)完成的.所有相关的对象文件(object file)与牵涉到的函数库(library)被链接合成一个可执行文件(executable file).程序在运行时,与函数库再无瓜葛,因为所有需要的函数已拷贝到自己门下。所...
阅读全文
posted @
2014-04-20 14:21
bitbit
阅读(2404)
推荐(0) 编辑
LINUX下动态链接库的使用-dlopen dlsym dlclose dlerror
摘要:本定义 功能:打开一个动态链接库 包含头文件: #include 函数定义: void * dlopen( const char * pathname, int mode ); 函数描述: 在dlopen的()函数以指定模式打开指定的动态连接库文件,并返回一个句柄给调用进...
阅读全文
posted @
2014-04-20 14:19
bitbit
阅读(1259)
推荐(0) 编辑
linux动态链接库导出函数控制
摘要:windows 环境的vc的话,可以方便的指定__declspec(dllexport) 关键字来控制是否把dll中的函数导出。我也来测试一下linux下面是如何做的:先看gcc 和ld的相关选项======================================gcc 选项 -shared...
阅读全文
posted @
2014-04-20 14:17
bitbit
阅读(10551)
推荐(0) 编辑
转:RHEL6.3 安装GCC 记录
摘要:本文参考:http://blog.163.com/phys_atom/blog/static/1676445532012229814992/如果直接使用GUN GCC官方的源码来安装是不成功的,因为源码需要编译,编译要使用GCC,进入死循环,所以需要先安装GCC的RPM包,这文件在RHEL系统光盘里...
阅读全文
posted @
2014-04-20 11:16
bitbit
阅读(1838)
推荐(0) 编辑
转:configure/make/make install的作用 linux 安装 卸载 make uninstall
摘要:这些都是典型的使用GNU的AUTOCONF和AUTOMAKE产生的程序的安装步骤。./configure 是用来检测你的安装平台的目标特征的。比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本。make 是用来编译的,它从Makefile中读取指令,然后编译。make ...
阅读全文
posted @
2014-04-20 11:09
bitbit
阅读(4492)
推荐(0) 编辑
linux syslog详解
摘要:分三部分一、syslog协议介绍二、syslog函数三、linux syslog配置一、syslog协议介绍1、介绍 在Unix类操作系统上,syslog广泛应用于系统日志。syslog日志消息既可以记录在本地文件中,也可以通过网络发送到接收syslog的服务器。接收syslog的服务器可以对多个设...
阅读全文
posted @
2014-04-19 10:24
bitbit
阅读(107376)
推荐(3) 编辑
转:教会你如何编写makefile文件
摘要:最近一直在学习makefile是如何编写的。当我们写的程序文件比较少的时候,敲入gcc /g++,当你在大型工程中,在一个个编译文件的话,你可能就会很郁闷。linux有一个自带的make命令,它让你的工作省去了很大的力气,但是你要学习如何编写makefile文件。makefile是一种特殊的文件格式...
阅读全文
posted @
2014-04-18 17:27
bitbit
阅读(685)
推荐(0) 编辑
转:简单通用的一则makefile .
摘要:在linux下面下写程序少不了写makefile,如果每个文件都按部就班的详细的写编译脚本,效率势必低下;makefile提供了自动化变量、模式规则等,稍加利用可以提高写makefile的效率。下面列举一个简单通用的makefile书写规则:SRCS = $(wildcard *.c)OBJS = ...
阅读全文
posted @
2014-04-18 17:06
bitbit
阅读(244)
推荐(0) 编辑
转:发一个自己用过的makefile .
摘要:#gcc test.cpp -L. -Wl,-Bdynamic -ltestlib -Wl,-Bstatic -ltestlib -Wl,-Bdynamic #make clean; make init; make SERVER_NAME=krc_search#make clean; make in...
阅读全文
posted @
2014-04-18 17:03
bitbit
阅读(385)
推荐(0) 编辑
转:TCP/IP协议选项——TCP_KEEPALIVE .
摘要:[+]KEEPALIVE作用KEEPALIVE代码示例KEEPALIVE脚本设置1、KEEPALIVE作用KEEPALIVE机制,是TCP协议规定的TCP层(非应用层业务代码实现的)检测TCP本端到对方主机的TCP连接的连通性的行为。避免服务器在客户端出现各种不良状况时无法感知,而永远等在这条TCP...
阅读全文
posted @
2014-04-18 16:20
bitbit
阅读(838)
推荐(0) 编辑
转:Socket常用选项
摘要:功能描述获取或者设置与某个套接字关联的选 项。选项可能存在于多层协议中,它们总会出现在最上面的套接字层。当操作套接字选项时,选项位于的层和选项的名称必须给出。为了操作套接字层的选项,应该 将层的值指定为SOL_SOCKET。为了操作其它层的选项,控制选项的合适协议号必须给出。例如,为了表示一个选项由...
阅读全文
posted @
2014-04-18 16:18
bitbit
阅读(4314)
推荐(0) 编辑
转:sock_ev——linux平台socket事件框架(event loop) .
摘要:上一篇我们封装了三种事件监听方式,如果分别提供给客户端使用,有点不方便,也不利于统一管理;我们再封装一层EventLoop。/***************************************************************************************...
阅读全文
posted @
2014-04-18 12:00
bitbit
阅读(724)
推荐(0) 编辑
转:sock_ev——linux平台socket事件框架(event dispatcher) .
摘要:最近比较忙,好久没更新了;今天我们看一下事件的监听方式,在linux下面事件的监听方式有三种select、poll、epoll,性能上面epoll最高,如果仅是最多监听十多个描述符,用啥无所谓,如果是几千个呢就非epoll不能胜任了。对三种时间监听方式进行封装,由于行为相似因此都继承于一个抽象基类E...
阅读全文
posted @
2014-04-18 11:57
bitbit
阅读(1407)
推荐(0) 编辑
转:sock_ev——linux平台socket事件框架(socket代理类) .
摘要:前面分析了对socket基本操作的封装,并按照数据的传送方式写了两个类,本篇将写一个代理类提供给库的使用者使用的类。/*************************************************************************************** ***...
阅读全文
posted @
2014-04-18 11:55
bitbit
阅读(672)
推荐(0) 编辑
转:sock_ev——linux平台socket事件框架(socket API的封装) .
摘要:把linux平台提供的有关socket操作的API进行封装是有必要的;基于stream操作的流程与基于dgram操作的流程略有不同,分别放在两个类中,但两者又有很多相似的操作,因此写一个基类,让其继承自这个基类;基类起名为:CommBase,操作stream与dgram两个类分别起名为:Stream...
阅读全文
posted @
2014-04-18 11:52
bitbit
阅读(534)
推荐(0) 编辑
转:sock_ev——linux平台socket事件框架(uri地址的解析) .
摘要:在第一篇中,已经说明,传递的socket地址采取以下形式:[cpp] view plaincopyprint?stream://192.168.2.10:8080 dgram://192.168.2.10:8080 stream://unix.domain.ipc dgram://unix.doma...
阅读全文
posted @
2014-04-18 11:48
bitbit
阅读(809)
推荐(0) 编辑
转:sock_ev——linux平台socket事件框架(logTrace) .
摘要:写代码要有调试log,采用syslog的输出;一般会输出到"/var/log/messages"/*****************************************************************************************************...
阅读全文
posted @
2014-04-18 11:45
bitbit
阅读(672)
推荐(0) 编辑
转:sock_ev——linux平台socket事件框架(基于数据报的测试程序) .
摘要:上一篇已经做过注释,这一篇直接上代码/*************************************************************************************** *******************************************...
阅读全文
posted @
2014-04-18 11:43
bitbit
阅读(238)
推荐(0) 编辑
转:sock_ev——linux平台socket事件框架(基于字节流的测试程序) .
摘要:原文:http://blog.csdn.net/gdutliuyun827/article/details/8257186由于工作与学习的需要,写了一个socket的事件处理框架,在公司写的已经使用了一段时间,下班后回家抽出时间又重写了一下,并进行了完善,起名为:sock_ev;最近正在调试阶段,源...
阅读全文
posted @
2014-04-18 11:41
bitbit
阅读(754)
推荐(0) 编辑
手把手教你玩GDB
摘要:第一部分牛刀小试:启动GDB开始调试1. 编译带调试信息的可执行程序:用gcc(g++)编译的时候带上-g选项即可2. 启动GDB开始调试(1)gdb program ///最常用的用gdb启动程序,开始调试的方式(2)gdb program core ///用gdb查看core dump文件,跟踪...
阅读全文
posted @
2014-04-18 11:37
bitbit
阅读(24544)
推荐(3) 编辑
Linux程序调试GDB——数据查看
摘要:查看栈信息 当程序被停住了,首先要确认的就是程序是在哪儿被断住的。这个一般是通过查看调用栈信息来看的。在gdb中,查看调用栈的命令是backtrace,可以简写为bt。(gdb) bt#0 pop () at stack.c:10#1 0x080484a6 in main () at main.c:...
阅读全文
posted @
2014-04-18 11:34
bitbit
阅读(3526)
推荐(0) 编辑
linux C++ 共享库导出类
摘要:1.共享库的对外接口函数的声明必须加上extern “C”。2.使用共享库对话接口函数生成的对象指针时在该对象未被释放之前不能关闭共享库句柄,否则会出现segmentation fault错误。以下是一个插件式设计的示例:1、主执行程序:main.cpp#include#include#includ...
阅读全文
posted @
2014-04-17 19:47
bitbit
阅读(1180)
推荐(0) 编辑
转:使用事件驱动模型实现高效稳定的网络服务器程序
摘要:前言事件驱动为广大的程序员所熟悉,其最为人津津乐道的是在图形化界面编程中的应用;事实上,在网络编程中事件驱动也被广泛使用,并大规模部署在高连接数高吞吐量的服务器程序中,如 http 服务器程序、ftp 服务器程序等。相比于传统的网络编程方式,事件驱动能够极大的降低资源占用,增大服务接待能力,并提高网络传输效率。关于本文提及的服务器模型,搜索网络可以查阅到很多的实现代码,所以,本文将不拘泥于源代码的陈列与分析,而侧重模型的介绍和比较。使用 libev 事件驱动库的服务器模型将给出实现代码。本文涉及到线程 / 时间图例,只为表明线程在各个 IO 上确实存在阻塞时延,但并不保证时延比例的正确性和 I
阅读全文
posted @
2014-04-12 20:19
bitbit
阅读(370)
推荐(0) 编辑
Linux网络编程入门 (转载)
摘要:(一)Linux网络编程--网络知识介绍Linux网络编程--网络知识介绍客户端和服务端 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户端 在网络程序中,如果一个程序主动和外面的程序通信,那么我们把这个程序称为客户端程序。 比如我们使用ftp程序从另外一 个地方获取文件的时候,是我们的ftp程序主动同外面进行通信(获取文件), 所以这个地方我们的ftp程序就是客户端程序。 服务端 和客户端相对应的程序即为服务端程序。被动的等待外面的程序来和自己通讯的程序称为服务端程序。 比如上面的文件获取中,另外一个地方的程序就是服务端,我们从服务端获取文件过..
阅读全文
posted @
2014-04-11 09:19
bitbit
阅读(2105)
推荐(0) 编辑
Linux系统中的信号量(semphore)与互斥体(mutex)
摘要:http://www.embexperts.com/viewthread.php?tid=31两者最大区别:信号量可以允许多个线程进入临界区,而互斥体只允许一个线程进入临界区。本贴将描述信号量与互斥体之间的细微区别以及在实际的代码设计中如何使用它们。信号量在2.6.26中的定义如下:struct semaphore { spinlock_t lock; unsigned int count; struct list_head wait_list;};从以上信号量的定义中,可以看到信号量底层使用到了spin lock的锁定机制,这个spin lock...
阅读全文
posted @
2014-04-10 16:44
bitbit
阅读(7800)
推荐(0) 编辑
Linux AIO
摘要:Linux aio是Linux下的异步读写模型。Linux 异步 I/O 是 Linux 内核中提供的一个相当新的增强。它是 2.6 版本内核的一个标准特性。对于文件的读写,即使以O_NONBLOCK方式来打开一个文件,也会处于"阻塞"状态。因为文件时时刻刻处于可读状态。而从磁盘到内存所等待的时间是惊人的。为了充份发挥把数据从磁盘复制到内存的时间,引入了aio模型。AIO 背后的基本思想是允许进程发起很多 I/O 操作,而不用阻塞或等待任何操作完成。稍后或在接收到 I/O 操作完成的通知时,进程就可以检索 I/O 操作的结果。I/O 模型在深入介绍 AIO API 之前,让
阅读全文
posted @
2014-04-10 11:09
bitbit
阅读(1899)
推荐(0) 编辑
浅析Linux Native AIO的实现
摘要:前段时间在自研的基于iSCSI的SAN上跑mysql,CPU的iowait很大,后面改用Native AIO,有了非常大的改观。这里简单总结一下Native AIO的实现。对于以IO为最大瓶颈的数据库,native AIO几乎不二的选择,仅仅依靠多线程,显然无法解决磁盘和网络的问题。1 API 与data structAIO的主要接口:System callDescriptionio_setup( )Initializes an asynchronous context for the current processio_submit( )Submits one or more asynchr
阅读全文
posted @
2014-04-10 11:07
bitbit
阅读(4380)
推荐(0) 编辑
Linux异步IO操作
摘要:Linux® 中最常用的输入/输出(I/O)模型是同步 I/O。在这个模型中,当请求发出之后,应用程序就会阻塞,直到请求满足为止。这是很好的一种解决方案,因为调用应用程序在等待 I/O 请求完成时不需要使用任何中央处理单元(CPU)。但是在某些情况中,I/O 请求可能需要与其他进程产生交叠。可移植操作系统接口(POSIX)异步 I/O(AIO)应用程序接口(API)就提供了这种功能。在本文中,我们将对这个 API 概要进行介绍,并来了解一下如何使用它。AIO 简介 Linux 异步 I/O 是 Linux 内核中提供的一个相当新的增强。它是 2.6 版本内核的一个标准特性,但是我们在
阅读全文
posted @
2014-04-09 16:38
bitbit
阅读(6084)
推荐(0) 编辑
Linux 的多线程编程的高效开发经验
摘要:背景Linux 平台上的多线程程序开发相对应其他平台(比如 Windows)的多线程 API 有一些细微和隐晦的差别。不注意这些 Linux 上的一些开发陷阱,常常会导致程序问题不穷,死锁不断。本文中我们从 5 个方面总结出 Linux 多线程编程上的问题,并分别引出相关改善的开发经验,用以避免这些的陷阱。我们希望这些经验可以帮助读者们能更好更快的熟悉 Linux 平台的多线程编程。我们假设读者都已经很熟悉 Linux 平台上基本的线程编程的 Pthread 库 API 。其他的第三方用以线程编程的库,如 boost,将不会在本文中提及。本文中主要涉及的题材包括线程开发中的线程管理,互斥变量,
阅读全文
posted @
2014-04-09 16:33
bitbit
阅读(972)
推荐(0) 编辑
转: Linux网络编程 【8】五种I/O 模式
摘要:五种I/O 模式:【1】 阻塞 I/O (Linux下的I/O操作默认是阻塞I/O,即open和socket创建的I/O都是阻塞I/O)【2】 非阻塞 I/O (可以通过fcntl或者open时使用O_NONBLOCK参数,将fd设置为非阻塞的I/O)【3】 I/O 多路复用 (I/O多路复用,通常需要非阻塞I/O配合使用)【4】 信号驱动 I/O (SIGIO)【5】异步 I/O一般来说,程序进行输入操作有两步:1.等待有数据可以读2.将数据从系统内核中拷贝到程序的数据区。对于sock编程来说: 第一步: 一般来说是等待数据从网络上传到本地。当数据包到达的时候,数据将会从网络层拷贝到内核的缓
阅读全文
posted @
2014-04-09 16:28
bitbit
阅读(425)
推荐(0) 编辑
select()函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET
摘要:select函数用于在非阻塞中,当一个套接字或一组套接字有信号时通知你,系统提供select函数来实现多路复用输入/输出模型,原型: #include sys/time.h> #include unistd.h> int select(int maxfd,fd_set *rdset,fd_set *wrset,fd_set *exset,struct timeval *timeout); 参数maxfd是需要监视的最大的文件描述符值+1;rdset,wrset,exset分别对应于需要检测的可读文件描述符的集合,可写文件描述符的集 合及异常文件描述符的集合。struct timev
阅读全文
posted @
2014-04-09 16:21
bitbit
阅读(14484)
推荐(1) 编辑
Linux内核开发之异步通知与异步I/O(一)
摘要:“小王,听说过锦上添花吧..”我拍拍下王的头说。“还锦上添花你,为你上次提的几个东东,我是头上长包..”小王气愤地瞪着我。“啊,为啥这样呢,本来还特意拒绝了MM的月份,抽出时间打算给你说点高级的东东,看来现在是不行了”我吃惊道,“这样吧,这次就给你讲些和前边有关的东西,也不失为锦上添花不是?”。“好,我也是这么打算的,就是没好意思说,今天讲些啥呢?”小王暗淡的眼光总算闪了闪。(为啥这么难受呢,好像跟什么会嚎叫的特像,哈哈) 那就言归正传,今天我们讲---Linux设备驱动程序之异步通知与异步I/O.” 小王,前边不是讲了阻塞与非阻塞访问,poll()函数等提供的较好的解决设备访问的机制,那么通
阅读全文
posted @
2014-04-09 08:27
bitbit
阅读(2452)
推荐(0) 编辑
linux下vim命令详解
摘要:高级一些的编辑器,都会包含宏功能,vim当然不能缺少了,在vim中使用宏是非常方便的::qx 开始记录宏,并将结果存入寄存器xq 退出记录模式@x 播放记录在x寄存器中的宏命令稍微解释一下,当在normal模式下输入:qx后,你对文本的所有编辑动作将会被记录下来,再次输入q即退出了记录模式,然后输入@x对刚才记录下来的命令进行重复,此命令后可跟数字,表示要重复多少次,比如@x20,可以重复20次。这个在文本的批处理中是非常有用的。同时编辑多个文件在vim众多的插件中,有一个叫minibuffer的插件,就是下面所说的标签页功能了,可以支持同时编辑多个文件。标签命令:tabe fn 在一个新的标
阅读全文
posted @
2014-04-09 08:13
bitbit
阅读(619)
推荐(0) 编辑
linux下vim命令详解
摘要:高级一些的编辑器,都会包含宏功能,vim当然不能缺少了,在vim中使用宏是非常方便的::qx 开始记录宏,并将结果存入寄存器xq 退出记录模式@x 播放记录在x寄存器中的宏命令稍微解释一下,当在normal模式下输入:qx后,你对文本的所有编辑动作将会被记录下来,再次输入q即退出了记录模式,然后输入@x对刚才记录下来的命令进行重复,此命令后可跟数字,表示要重复多少次,比如@x20,可以重复20次。这个在文本的批处理中是非常有用的。同时编辑多个文件在vim众多的插件中,有一个叫minibuffer的插件,就是下面所说的标签页功能了,可以支持同时编辑多个文件。标签命令:tabe fn 在一个新的标
阅读全文
posted @
2014-04-09 08:07
bitbit
阅读(684)
推荐(0) 编辑
Linux下的进程间通信-详解
摘要:详细的讲述进程间通信在这里绝对是不可能的事情,而且笔者很难有信心说自己对这一部分内容的认识达到了什么样的地步,所以在这一节的开头首先向大家推荐著 名作者Richard Stevens的著名作品:《Advanced Programming in the UNIX Environment》,它的中文译本《UNIX环境高级编程》已有机械工业出版社出版,原文精彩,译文同样地道,如果你的确对在Linux下编程有浓 厚的兴趣,那么赶紧将这本书摆到你的书桌上或计算机旁边来。说这么多实在是难抑心中的景仰之情,言归正传,在这一节里,我们将介绍进程间通信最最初步和最 最简单的一些知识和概念。 首先,进程间通...
阅读全文
posted @
2014-04-08 13:04
bitbit
阅读(35531)
推荐(1) 编辑
linux之进程管理详解
摘要:|-进程管理 进程常用命令 |- w查看当前系统信息 |- ps进程查看命令 |- kill终止进程 |- 一个存放内存中的特殊目录/proc |- 进程的优先级 |- 进程的挂起与恢复 |- 通过top命令查看进程 计划任务 |- 计划任务的重要性 |- 一次性计划at和batch |- 周期性计划crontab 进程管理的概念 进程和程序区别 1.程序是静态概念,本身作为一种软件资源长期保存;而进程是程序的执行过程,它是动态概念,有一定的生命期,是动态产生和消亡的。 2.程序和进程无一一对应关系。一个程序可以由多个时程公用;另一一方面,一个进程在活动中有可顺...
阅读全文
posted @
2014-04-08 13:01
bitbit
阅读(32065)
推荐(2) 编辑
深度介绍Linux内核是如何工作的
摘要:本文发表于Linux Format magazine杂志,作者从技术深度上解释了Linux Kernel是如何工作的。相信对Linux开发者来说有不小的帮助。牛津字典中对"kernel"一词的定义是:"较软的、通常是一个坚果可食用的部分。"当然还有第二种定义:"某个东西核心或者最重要的部分。"对Linux来说,它的Kernel无疑属于第二种解释。让我们来看看这个重要的东西是如何工作的,先从一点理论说起。广义地来说kernel就是一个软件,它在硬件和运行在计算机上的应用程序之间提供了一个层。严格点从计算机科学的角度来说,Linux中的K
阅读全文
posted @
2014-04-08 12:56
bitbit
阅读(1306)
推荐(1) 编辑
Linux内核
摘要:[1]Linux是最受欢迎的自由电脑操作系统内核。它是一个用C语言写成,符合POSIX标准的类Unix操作系统。Linux最早是由芬兰黑客 Linus Torvalds为尝试在英特尔x86架构上提供自由免费的类Unix操作系统而开发的。该计划开始于1991年,在计划的早期有一些Minix 黑客提供了协助,而今天全球无数程序员正在为该计划无偿提供帮助。 技术上说Linux是一个内核。“内核”指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。一个内核不是一套完整的操作系统。一套基于Linux内核的完整操作系统叫作Linux操作系统,或是GNU/Linux。目录1特性▪ 架构▪
阅读全文
posted @
2014-04-08 12:53
bitbit
阅读(610)
推荐(0) 编辑
VC、OpenGL、ArcGIS Engine开发的二维三维结合的GIS系统
摘要:一、前言 众所周知,二维GIS技术发展了近四十年,伴随着计算机软硬件以及关系型数据库的飞速发展,二维GIS技术已日臻完善。在对地理信息的分析功能上有着无可比拟的优势。一些宏观的地理信息,一维的地理信息,如河流、公路等,以及二维的地理信息,如植被、湖泊、人口数量等,在对这些地理信息的分析和处理上,比较适合采用二维GIS系统。二维GIS始于20世纪60年代的机助制图,今天它已经深入社会的各行各业,如土地管理、电力、电信、水利、消防、交通、规划等,但二维GIS有其自身难以克服的缺陷,它本质上是基于抽象符号的系统,不能真实的再现三维客观世界。随着信息技术的快速发展特别是数字地球(Digital E..
阅读全文
posted @
2014-04-08 11:01
bitbit
阅读(6511)
推荐(2) 编辑
Linux平台Boost的编译方法
摘要:本博客(http://blog.csdn.net/livelylittlefish )贴出作 者(三二一@小鱼)相关研究、学习内容所做的笔记,欢迎广大朋友指正!Linux平台Boost的编译方法Boost的编译使用的不是已经成为公认标准的make,而是专门为Boost开发的工具bjam(boost jam)。本文以boost1.40为例,在Linux平台的编程环境为gcc4.4.1,假设Boost代码在/usr/src/boost_1_40_0目录,步骤如下。1. 获得bjam获得bjam有3种方式,如下:方法1:Boost网站上提供了各种平台上预编译好的bjam可执行程序,可直接下载使用。方
阅读全文
posted @
2014-04-08 10:37
bitbit
阅读(12946)
推荐(0) 编辑
Linux内核结构
摘要:1.5.3 Linux内核的抽象结构Linux内核由5个 主要的子系统组成:如图1.2图1.2 Linux内核子系统及其之间的关系1.进程调度(SCHED)控制着进程对CPU的访问。当需要选择下一个进程运行时,由调度程序选择最值得运行的进程。可运行进程实际是仅等待 CPU资源的进程,如果某个进程在等待其他资源,则该进程是不可运行进程。Linux使用了比较简单的基于优先级的进程调度算法选择新的进程。2.内存管理(MM)允许多个进程安全地共享主内存区域 。Linux的内存管理支持虚拟内存,即在计算机中运行的程序,其代码、数据和堆栈的总量可以超过实际内存的大小,操作系统只将当前使用的程序块保留在内存
阅读全文
posted @
2014-04-08 10:35
bitbit
阅读(7342)
推荐(0) 编辑
Linux makefile 教程 非常详细,且易懂
摘要:最近在学习Linux下的C编程,买了一本叫《Linux环境下的C编程指南》读到makefile就越看越迷糊,可能是我的理解能不行。 于是google到了以下这篇文章。通俗易懂。然后把它贴出来,方便学习。 后记,看完发现这篇文章和《Linux环境下的C编程指南》的makefile一章所讲述的惊人的相似,只是这篇文章从一个实例切入,在有些地方比较好理解。能让人看懂就是好文章。 跟我一起写 Makefile陈皓 (CSDN)概述——什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的
阅读全文
posted @
2014-04-08 10:26
bitbit
阅读(488)
推荐(0) 编辑
Linux操作系统中多线程的同步
摘要:1 互斥锁 互斥锁用来保证一段时间内只有一个线程在执行一段代码。必要性显而易见:假设各个线程向同一个文件顺序写入数据,最后得到的结果一定是灾难性的。 先看下面一段代码。这是一个读/写程序,它们公用一个缓冲区,并且假定一个缓冲区只能保存一条信息。即缓冲区只有两个状态:有信息或没有信息。 void reader_function ( void ); void writer_function ( void ); char buffer; int buffer_has_item=0; pthread_mutex_t mutex; struct timespec delay; void...
阅读全文
posted @
2014-04-08 10:18
bitbit
阅读(1448)
推荐(0) 编辑
Linux环境下的make和makefile详解
摘要:无论是在Linux还是在Unix环境中,make都是一个非常重要的编译命令。不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或make install.利用make工具,我们可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和makefile工具就可以简洁明快地理顺各个源文件之间纷繁复杂的相互关系。而且如此多的源文件,如果每次都要键入gcc命令进行编译的话,那对程序员来说简直就是一场灾难。而make工具则可自动完成编译工作,并且可以只对程序员在上次编译后修改过的部分进行编译。因此,有效的利用make和makefile工具可以大大.
阅读全文
posted @
2014-04-08 10:16
bitbit
阅读(9742)
推荐(0) 编辑
各种音视频编解码学习详解
摘要:编解码学习笔记(一):基本概念媒体业务是网络的主要业务之间。尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析、应用开发、释放license收费等等。最近因为项目的关系,需要理清媒体的codec,比较搞的是,在豆丁网上看运营商的规范 标准,同一运营商同样的业务在不同文档中不同的要求,而且有些要求就我看来应当是历史的延续,也就是现在已经很少采用了。所以豆丁上看不出所以然,从 wiki上查。中文的wiki信息量有限,很短,而wiki的英文内容内多,删减版也减肥得太过。我在网上还看到一个山寨的中文wiki,长得很像,红色的,叫“天下维客”。wiki的
阅读全文
posted @
2014-04-08 09:41
bitbit
阅读(78262)
推荐(13) 编辑
CSerialPort串口类最新修正版(解决关闭死锁问题)2014-01-11
摘要:这是一份优秀的类文件,好多的地方值得我们学习,具体在多线程,事件,自定义消息,类的封装方面等等。Remon提供的串口类网址为: http://codeguru.earthweb.com/network/serialport.shtml,由于已经运行十几年了,原文的问答部分列出来这么多年来的问题,经过网友们的总结,补充和修改原来代码后,整理出一份相对比较完美的代码。此外还附带一份小项目的源代码,它超越了串口助手,给人一种耳目一新的感觉。亮点如下:1. 它解决了串口关闭时出现死锁不响应问题,可以直接用到开发的项目上。2. 并且是扩展了的串口助手,具有通信协议编辑和使用功能,3. 软件升级检测,值得
阅读全文
posted @
2014-04-07 15:39
bitbit
阅读(2825)
推荐(0) 编辑
串口通讯编程一日通4(串口基本操作)
摘要:前几篇大概介绍了串口的相关几个结构,了解后开始进入Windows API的基本操作1.CreateFile创建打开串口用指定的方式打开指定的串口,注意文件在Windows的概念很广泛,包括:文件、通讯设备、命名管道、邮件、磁盘和控制台。我们前面声明了句柄/*串口句柄*/HANDLEm_hComm;那么接下来可以这样创建:m_hCom = CreateFile( "COM1", //串口1 GENERIC_READ | GENERIC_WRITE, //指定可以对串口进行读写操作 0, //表示串口为独占打开 NULL, OPEN_EXISTING, //表示当指定串口不存在
阅读全文
posted @
2014-04-07 15:28
bitbit
阅读(1215)
推荐(0) 编辑
串口通讯编程一日通3(COMMTIMEOUTS DCB整理)
摘要:上一篇看了Overlapped IO模型后,接下来看剩下两个重要结构:2.COMMTIMEOUTS结构 超时设置COMMTIMEOUTS:COMMTIMEOUTS主要用于串口超时参数设置。COMMTIMEOUTS结构如下: typedef struct _COMMTIMEOUTS { DWORD ReadIntervalTimeout; //读间隔超时 DWORD ReadTotalTimeoutMultiplier;//读时间系数 DWORD ReadTotalTimeoutConstant;//读时间常量 DWORD WriteTotalTimeoutMultiplier;//...
阅读全文
posted @
2014-04-07 15:26
bitbit
阅读(1018)
推荐(0) 编辑
串口通讯编程一日通2(Overlapped IO模型)
摘要:第一篇初步了解串口的大致运作,接下来我们看基本操作先看串口操作的数据结构:串口操作有几个比较重要的Struct1.Overlapped I/O 异步I/O模型异步I/O和同步I/O不同,同步I/O时,程序被挂起,一直到I/O处理完,程序才能获得控制。异步I/O,调用一个函数告诉OS,进行I/O操作,不等I/O结束就立即返回,继续程序执行,操作系统完成I/O之后,通知消息给你。Overlapped I/O只是一种模型,它可以由内核对象(hand),事件内核对象(hEvent), 异步过程调用(apcs) 和完成端口(I/O completion)实现。Overlapped数据结构:typedef
阅读全文
posted @
2014-04-07 15:24
bitbit
阅读(4340)
推荐(0) 编辑
串口通讯编程一日通1(整合资料)
摘要:串口是常用的计算机与外部串行设备之间的数据传输通道,由于串行通信方便易行,所以应用广泛。本文以VC++为平台进行串口通信编程串口通讯在VC++下实现方式有很多,控件自然是最简单话的方式了,但由于控件只支持对话框程序,有些场合又不需要对话框,所以用Windows API实现是比较好的方式串行通信的操作方式1.同步方式同步方式中,读串口的函数试图在串口的接收缓冲区中读取规定数目的数据,直到规定数目的数据全部被读出或设定的超时时间已到时才返回[cpp] view plaincopyprint?COMMTIMEOUTStimeOver;//COMMTIMEOUTS结构用于设置读写函数的等待时间。 me
阅读全文
posted @
2014-04-07 15:23
bitbit
阅读(1033)
推荐(0) 编辑
Overlapped I/O模型深入分析(转)
摘要:随笔 - 262 文章 - 0 评论 - 531 博客园首页新随笔联系管理订阅Overlapped I/O模型深入分析(转)简述:Overlapped I/O也称Asynchronous I/O,异步I/O模型。异步I/O和同步I/O不同,同步I/O时,程序被挂起,一直到I/O处理完,程序才能获得控制。异步I/O,调用一个函数告诉 OS,进行I/O操作,不等I/O结束就立即返回,继续程序执行,操作系统完成I/O之后,通知消息给你。Overlapped I/O只是一种模型,它可以由内核对象(hand),事件内核对象(hEvent), 异步过程调用(apcs) 和完成端口(I/O completi
阅读全文
posted @
2014-04-07 14:58
bitbit
阅读(1364)
推荐(0) 编辑
重叠IO overlapped I/O 运用详解
摘要:2009年02月21日 星期六 下午 07:54I/O设备处理必然让主程序停下来干等I/O的完成,对这个问题有方法一:使用另一个线程进行I/O。这个方案可行,但是麻烦。 即 CreateThread(…………);创建一个子线程做其他事情。 Readfile(^…………);阻塞方式读数据。方法二:使用overlapped I/O。overlapped I/O是WIN32的一项技术,你可以要求操作系统为你传送数据,并且在传送完毕时通知你。这项技术使你的程序在I/O进行过程中仍然能够继续处理事务。事实上,操作系统内部正是以线程来I/O完成overlapped I/O。你可以获得线程的所有利益,而不.
阅读全文
posted @
2014-04-07 14:52
bitbit
阅读(11085)
推荐(0) 编辑
Rational Rose 2003 逆向工程转换C++源代码成UML类图
摘要:主要介绍用户如何使用Rose的逆向工程生成UML模型,并用来进行C++代码的结构分析。Rational Rose可以支持标准C++和Visual C++的模型到代码的转换以及逆向工程。下面将详细地说明这两种C++ project的逆向工程的步骤和具体操作。1 ANSI C++(标准C++)逆向工程(Reverse Engineer)使用标准C++逆向工程,需要在组件图(component view)中创建一个组件(component),设置好需要进行转换的组件的信息,也就是该组件的语言、所包含的文件、文件所在的路径、文件后缀等等信息,然后Reverse Engineer就可以根据给定的信息将代
阅读全文
posted @
2014-04-07 11:07
bitbit
阅读(349)
推荐(0) 编辑
More Effective C++:通过引用捕获异常
摘要:当你写一个catch子句时,必须确定让异常通过何种方式传递到catch子句里。你可以有三个选择:与你给函数传递参数一样,通过指针(by pointer),通过传值(by value)或通过引用(by reference)。 我们首先讨论通过指针方式捕捉异常(catch by pointer)。从throw处传递一个异常到catch子句是一个缓慢的过程,在理论上这种方法的实现对于这个过程来说是效率最高的。因为在传递异常信息时,只有采用通过指针抛出异常的方法才能够做到不拷贝对象,例如:class exception { ... }; // 来自标准C++库(STL) // 中的异常类层次 vo..
阅读全文
posted @
2014-04-07 10:47
bitbit
阅读(635)
推荐(0) 编辑
常对象与常成员函数的关系
摘要:(1) 常对象用const修饰的对象叫对象常量,其格式如下:〈类名〉const 〈对象名〉 或者 const 〈类名〉〈对象名〉声明为常对象的同时必须被初始化,并从此不能改写对象的数据成员。例:分析下列错误的地方,说明理由;#includeclass Point{int x, y;public:Point(int a, int b) { x=a; y=b;}Void MovePoint( int a, int b){ x+=a; y+=b;}Void print(){ coutint length(const Point &p1, const Point &p2){int l;
阅读全文
posted @
2014-04-07 10:36
bitbit
阅读(1081)
推荐(0) 编辑
关联更新SQL语句
摘要:update F_A_Info set level=b.level from F_A_Info a,F_A_Info_QUAN b where a.id=b.id
阅读全文
posted @
2014-04-07 10:33
bitbit
阅读(366)
推荐(0) 编辑
VC编译连接选项详解
摘要:大家可能一直在用VC开发软件,但是对于这个编译器却未必很了解。原因是多方面的。大多数情况下,我们只停留在“使用”它,而不会想去“了解”它。因为它只是一个工具,我们宁可把更多的精力放在C++语言和软件设计上。我们习惯于这样一种“模式”:建立一个项目,然后写代码,然后编译,反反复复调试。但是,所谓:“公欲善其事,必先利其器”。如果我们精于VC开发环境,我们是不是能够做得更加游刃有余呢? VC的处理流程,大致分为两步:编译和连接。源文件通过编译生成了.obj文件;所有.obj文件和.lib文件通过连接生成.exe文件或.dll文件。下面,我们分别讨论这两个步骤的一些细节。 编译参数的设置。主要通..
阅读全文
posted @
2014-04-07 10:26
bitbit
阅读(5839)
推荐(0) 编辑
C++ 智能指针详解
摘要:一、简介由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete。程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见。用智能指针便可以有效缓解这类问题,本文主要讲解参见的智能指针的用法。包括:std::auto_ptr、boost::scoped_ptr、boost::shared_ptr、boost::scoped_array、boost::shared_array、boost::weak_ptr、boost:: intrusive_ptr。你可能会想,如此多的智能指针就为了解决n
阅读全文
posted @
2014-04-07 10:00
bitbit
阅读(1963)
推荐(0) 编辑
C++ 智能指针Auto_PTR 分析
摘要:C++的动态内存的分配与释放是个挺折磨人的事情,尤其异常分支复杂时(比如一堆try catch中,各catch里需要做delete 掉相关的堆上分配的内存),极有可能产生内存泄露的情况。C++中提供了智能指针作为可选的解决方案, C++标准库中自带的智能指针是auto_ptr,它在大多数场景下是满足需求的。针对auto_ptr的缺点,boost和loki两套库都扩展出一些智能指针,并且boost中有两位幸运儿入选了tr1中(std::tr1::shared_ptr,std::tr1::weak_ptr)。本文就gcc中auto_ptr的实现做些分析,以飨自己。笔记采用注释源码的方式。/***.
阅读全文
posted @
2014-04-07 09:58
bitbit
阅读(3962)
推荐(0) 编辑
虚函数表解析
摘要:C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这里不做过多的阐述。大家可以看看相关的C++的书籍。在这篇文章中,我只想从虚函数的实现机制上面为大家 一个清晰的剖析。当然,相同的文章在网上也出现过一些了,但我总感觉这些文章不是很容易阅读,大段大段的代码,没有图片,.
阅读全文
posted @
2014-04-07 09:48
bitbit
阅读(258)
推荐(0) 编辑
C++ 关键字 explicit, export, mutable
摘要:explicit如果A类有某个构造函数的单个输入参数,是B类(包括基本数据类型)的对象或引用,则C++的编译器会在需要A类形参的函数调用中,自动调用该构造函数,将B类实参隐式地转换为A类实参。这种自动类型转换的好处是,避免了定义函数的两个重载版本,代价是隐式调用构造函数会增加调用开销,并可能会带来其他问题。在标准C++中,新增加了关键字explicit(显式/清楚/明确),(只能)用在带单个参数的构造函数前,告诉编译器,不能使用该构造函数进行隐式类型转换。如果确实想转换,则必须采用显式的类型转换方式来进行。从而避免了可能出现的问题和额外的调用开销。例如:class One {……};class
阅读全文
posted @
2014-04-07 09:42
bitbit
阅读(820)
推荐(0) 编辑
虚析构函数的作用
摘要:我们知道,用C++开发的时候,用来做基类的类的析构函数一般都是虚函数。可是,为什么要这样做呢?下面用一个小例子来说明:有下面的两个类:class ClxBase{public:ClxBase() {};virtual ~ClxBase() {};virtual void DoSomething() { cout DoSomething();delete pTest;的输出结果是:Do something in class ClxDerived!Output from the destructor of class ClxDerived!这个很简单,非常好理解。但是,如果把类ClxBase析构函
阅读全文
posted @
2014-04-07 09:40
bitbit
阅读(608)
推荐(0) 编辑
图文例解C++类的多重继承与虚拟继承
摘要:文章导读:C++允许为一个派生类指定多个基类,这样的继承结构被称做多重继承。 在过去的学习中,我们始终接触的单个类的继承,但是在现实生活中,一些新事物往往会拥有两个或者两个以上事物的属性,为了解决这个问题,C++引入了多重继承的概念,C++允许为一个派生类指定多个基类,这样的继承结构被称做多重继承。 举个例子,交通工具类可以派生出汽车和船连个子类,但拥有汽车和船共同特性水陆两用汽车就必须继承来自汽车类与船类的共同属性。 由此我们不难想出如下的图例与代码: 当一个派生类要使用多重继承的时候,必须在派生类名和冒号之后列出所有基类的类名,并用逗好分隔。//程序作者:管宁 //站点:www....
阅读全文
posted @
2014-04-07 09:39
bitbit
阅读(564)
推荐(0) 编辑
仅通过崩溃地址找出源代码的出错行
摘要:第一篇:作为程序员,我们平时最担心见到的事情是什么?是内存泄漏?是界面不好看?……错啦!我相信我的看法是不会有人反对的——那就是,程序发生了崩溃!“该程序执行了非法操作,即将关闭。请与你的软件供应商联系。”,呵呵,这句 M$ 的“名言”,恐怕就是程序员最担心见到的东西了。有的时候,自己的程序在自己的机器上运行得好好的,但是到了别人的机器上就崩溃了;有时自己在编写和测试的过程中就莫名其妙地遇到了非法操作,但是却无法确定到底是源代码中的哪行引起的……是不是很痛苦呢?不要紧,本文可以帮助你走出这种困境,甚至你从此之后可以自豪地要求用户把崩溃地址告诉你,然后你就可以精确地定位到源代码中出错的那行了。(
阅读全文
posted @
2014-04-07 09:30
bitbit
阅读(4349)
推荐(0) 编辑
Windows 消息机制浅析
摘要:1.Windows 的历史中国人喜欢以史为鉴,而事实也确实是,如果你能知道一件事情的来龙去脉,往往可以更容易地理解事物为什么会表现为当前这样的现状。所以,我的介绍性开场白通常会以一段历史开始。不过,我不会以精确到年月日的那种方式详细讲述,而是选取几个对我们的编程生涯有重要影响的关键点。Windows 是真正的图形化界面操作系统的普及者,无论任何人,争夺什么第一个实现的GUI、第一个商业化的GUI之类的虚名,都替代不了 Windows 的历史功绩,让最普通的用户能够容易地操纵PC。第一个声名大噪的版本是Windows 3.0(也有人认为应该是它的更加健康强壮的弟弟Windows 3.1),从那个
阅读全文
posted @
2014-04-06 19:56
bitbit
阅读(19262)
推荐(10) 编辑
VC 线程间通信的三种方式
摘要:1.使用全局变量(窗体不适用) 实现线程间通信的方法有很多,常用的主要是通过全局变量、自定义消息和事件对象等来实现的。其中又以对全局变量的使用最为简洁。该方法将全局变量作为线程监视的对象,并通过在主线程对此变量值的改变而实现对子线程的控制。 由于这里的全局变量需要在使用它的线程之外对其值进行改变,这就需要通过volatile关键字对此变量进行说明。使用全局变量进行线程通信的方法非常简单,通过下面给出的示例代码能够对其有一个基本的认识。 // 线程通信用全局变量 volatile bool g_bDo = false; …… //线程处理函数 UINT ThreadProc5(LPVOID pP
阅读全文
posted @
2014-04-06 19:30
bitbit
阅读(2220)
推荐(0) 编辑
volatile的作用
摘要:volatile 修饰符的作用是告诉编译器无需对该变量作任何的优化,即无需将它放到一个寄存器中,并且该值可被外部改变。对于多线程引用的全局变量来说,volatile 是一个非常重要的修饰符.一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子: 1).并行设备的硬件寄存器(如:状态寄存器) 2).一个中断服务子程序中会访问到的非自动变量(Non-automaticvariables) 3).多线程应用
阅读全文
posted @
2014-04-06 19:28
bitbit
阅读(955)
推荐(0) 编辑
STL容器 erase的使用陷井
摘要:http://www.cppblog.com/beautykingdom/archive/2008/07/09/55760.aspx?opt=admin在STL(标准模板库)中经常会碰到要删除容器中部分元素的情况,本人在编程中就经常编写这方面的代码,在编码和测试过程中发现在STL中删除容器有很多陷阱...
阅读全文
posted @
2014-04-06 17:15
bitbit
阅读(4315)
推荐(0) 编辑
转:VC++线程同步-事件对象
摘要:这是整理孙鑫VC得到的关于线程同步方面的笔记.n 事件对象也属于内核对象,包含一个使用计数,一个用于指明该事件是一个自动重置的事件还是一个人工重置的事件的布尔值,另一个用于指明该事件处于已通知状态还是未通知状态的布尔值。n 有两种不同类型的事件对象。一种是人工重置的事件,另一种是自动重置的事件。当人工重置的事件得到通知时,等待该事件的所有线程均变为可调度线程。当一个自动重置的事件得到通知时,等待该事件的线程中只有一个线程变为可调度线程。得到事件对象后,因为是自动重置的事件对象,所以操作系统将该事件对象设置为非信号状态//-------------------------------------
阅读全文
posted @
2014-04-06 10:26
bitbit
阅读(435)
推荐(0) 编辑
VC线程同步方法
摘要:VC MFC中线程同步对象的区别临界区 CCriticalSection,在用户模式工作,适用于保护线程间共享资源,一个线程可以多次Lock不会出错。不支持在多进程之间工作。互斥量 CMutex,在内核模式工作,除了支持临界区的功能,还可以为互斥量命名,以便在多进程中工作。互斥量比临界区耗资源。 事件 CEvent,在内核模式工作,适用于一个线程等待另一个线程完成某任务。信号量 CSemaphore,在内核模式工作,适用于允许特定个数的线程执行某任务。 实例:CwinThread *pThread;1、使用互斥对象 HANDLE hMutex; hMutex = .
阅读全文
posted @
2014-04-06 10:19
bitbit
阅读(939)
推荐(0) 编辑
C/C++四种退出线程的方法
摘要:退出线程可以有四种方法:1.线程函数的return返回(最好这样): 其中用线程函数的return返回, 而终止线程是最安全的, 在线程函数return返回后, 会清理函数内申请的类对象, 即调用这些对象的析构函数. 然后会自动调用 _endthreadex()函数来清理 _beginthreadex(...)函数申请的资源(主要是创建的tiddata对象).2.调用 _endthreadex()函数 或 ExitThread()函数(最好不要): 如果使用这两种方法退出线程, 则不会执行线程函数的return语句, 所以就不会调用线程函数作用域内申请的类对象的析构函数, 会造成内存泄露...
阅读全文
posted @
2014-04-06 10:14
bitbit
阅读(17744)
推荐(0) 编辑
CreateThread、_beginthreadex和AfxBeginThread .
摘要:创建线程好几个函数可以使用,可是它们有什么区别,适用于什么情况呢?参考了一些资料,写得都挺好的,这里做一些摘抄和整合。【参考1】CreateThread, AfxBeginThread,_beginthread, _beginthreadex的区别=====================================================================1、CreateThread——Windows的API函数2、_beginthreadex——MS对C Runtime库的扩展SDK函数3、AfxBeginThread——MFC中线程创建的MFC函数CreateT
阅读全文
posted @
2014-04-06 10:09
bitbit
阅读(434)
推荐(0) 编辑
转:逻辑坐标系 设备坐标系 客户坐标系 屏幕坐标系
摘要:(1)Windows坐标系统Windows坐标系分为逻辑坐标系和设备坐标系两种,GDI支持这两种坐标系。一般而言,GDI的文本和图形输出函数使用逻辑坐标,而在客户区移动或按下鼠标的鼠标位置是采用设备坐标。逻辑坐标系(Logical Coordinate)是面向DC的坐标系,这种坐标不考虑具体的设备类型,在绘图时,Windows会根据当前设置的映射模式将逻辑坐标转换为设备坐标。 设备坐标(Device Coordinate)又称为物理坐标(Physical Coordinate),是指输出设备上的坐标。通常将屏幕上的设备坐标称为屏幕坐标。设备坐标用对象距离窗口左上角的水平距离和垂直距离来指定对象
阅读全文
posted @
2014-04-06 09:49
bitbit
阅读(905)
推荐(0) 编辑
每一个软件开发人员绝对必须掌握的关于 Unicode 和字符集的最基础的知识
摘要:2013-02-05 14:18 48人阅读 评论(0) 收藏 举报关键字:Unicode,CharacterSet,字符集,UTF-8,ANSI,ASCII,UTF-7原文标题:TheAbsoluteMinimumEverySoftwareDeveloperAbsolutely,PositivelyMustKnowAboutUnicodeandCharacterSets(NoExcuses!)原文链接:http://www.joelonsoftware.com/printerFriendly/articles/Unicode.html作者:JoelSpolsky来源:http://blog.
阅读全文
posted @
2014-04-06 09:46
bitbit
阅读(1818)
推荐(0) 编辑
MVC设计模式
摘要:MVC设计模式即MVC框架。MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑和数据显式分离的方法组织代码,将业务逻辑被聚集到一个部件里面,在界面和用户围绕数据的交互能被改进和个性化定制的同时而不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。外文名MVC框架全名Model View Controller产生时间1982年架构内容视图,模型,控制器类别软件构件模式目录1简介2MVC 编程模式3框架内容▪ 视图▪ 模
阅读全文
posted @
2014-04-06 09:35
bitbit
阅读(11742)
推荐(0) 编辑
软件系统架构师必修内容是什么?
摘要:对于任何一个软件开发人员来说,架构师都是一个令人向往的角色。就连世界首富比尔盖茨在2000年卸任公司CEO的同时,也担任了微软公司的荣誉角色“首席软件架构师”,可见“架构师”这一称谓的吸引力。架构师是公司的“金领”,有着非常高的收入,很少需要考虑生存的问题,从而有更多的精力思考关键技术问题,形成“强者愈强”的良性循环。部分优秀的开发人员在工作了一定时间后,就要开始考虑自己的未来到底向哪个方向发展。如果开发人员的沟通能力强过技术能力,在补充一定的项目管理知识后,可以向技术管理的方向转型。如果其对技术一直很感兴趣,而沟通能力也不弱,则可以试着进一步加强技术修养,以期向架构师的方向发展,最终“修成正
阅读全文
posted @
2014-04-06 09:21
bitbit
阅读(469)
推荐(0) 编辑
云计算核心技术剖析
摘要:古人云:“不以规矩,无以成方圆”,也就是说,“方圆”再怎么精彩和美丽,都离不开“规矩”的积淀和约束,这个道理对云计算也同样适用,如果读者对云计算本 身有一定的认知和理解,那么就非常有助于今后对其相关的技术和产品的学习,而本章就是这样专注于云计算本身的章节。在本章的开始,将关注云计算的定义和特 点,接着将从思想和技术这方面来分析云计算的由来,并讲述一下云计算的诞生与成长,最后将重点介绍云计算对整个 IT 产业的影响和主要的使用场景。 1.1 什么是云计算 云计算到底是什么呢? 在这个问题上,可谓众说纷纭。比如,在维基百科上的定义是“云计算是一种基于互联网的计算新方式,通过互联网上...
阅读全文
posted @
2014-04-04 15:22
bitbit
阅读(4363)
推荐(0) 编辑