C/C++/C#
文章平均质量分 88
阳光岛主
阳光、快乐、创新
展开
-
VC++中四种进程或线程同步互斥的控制方法
现在流行的进程线程同步互斥的控制机制,其实是由最原始最基本的4种方法实现的。由这4种方法组合优化就有了.Net和Java下灵活多变的,编程简便的线程进程控制手段。 这4种方法具体定义如下 在《操作系统教程》ISBN 7-5053-6193-7 一书中可以找到更加详细的解释 1临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。 2互斥量:为协调共同对一个共享资源的单独访问而设计的。 3信号量:为控制一个具有有限数量用户资源而设计。 4事转载 2010-10-26 13:30:00 · 6664 阅读 · 0 评论 -
Linux网络编程一步一步学-异步通讯聊天程序select
<br />Linux网络编程一步一步学-异步通讯聊天程序select<br />Client<br />#include <stdio.h><br />#include <stdlib.h><br />#include <errno.h><br />#include <string.h><br />#include <sys/types.h><br />#include <netinet/in.h><br />#include <sys/socket.h><br />#include <sys/wait.原创 2010-10-25 20:26:00 · 4584 阅读 · 0 评论 -
memcpy、strcpy、snprintf的区别
<br /><br />这些函数的区别在于 实现功能 以及 操作对象 不同。<br />strcpy 函数操作的对象是 字符串,完成 从 源字符串 到 目的字符串 的 拷贝 功能。<br />snprintf 函数操作的对象 不限于字符串:虽然目的对象是字符串,但是源对象可以是字符串、也可以是任意基本类型的数据。这个函数主要用来实现 (字符串或基本数据类型)向 字符串 的转换 功能。如果源对象是字符串,并且指定 %s 格式符,也可实现字符串拷贝功能。<br />memcpy 函数顾名思义就是 内存拷贝,实现转载 2010-12-20 16:37:00 · 5193 阅读 · 0 评论 -
C宏定义的小结
1,防止一个头文件被重复包含 #ifndef BODYDEF_H #define BODYDEF_H //头文件内容 #endif 2,得到指定地址上的一个字节或字 #define MEM_B( x ) ( *( (byte *) (x) ) ) #define MEM_W( x ) ( *( (word *) (x) ) ) 3,得到一个field在结构体(struct)中的偏移量 #define FPOS( type, field ) ( (dword) &(( type *) 0)-> f原创 2010-12-28 17:58:00 · 10332 阅读 · 0 评论 -
C++ list
Source:#include #include #include #include using namespace std; typedef list LISTINT; //创建一个list容器的实例LISTINTtypedef list LISTCHAR; //创建一个list容器的实例LISTCHARint main(void) { LISTINT listOne; //用LISTINT创建一个名为listOne的l原创 2010-11-09 15:08:00 · 4126 阅读 · 0 评论 -
宏中"#"和"##"的用法
一、一般用法 我们使用#把宏参数变为一个字符串,用##把两个宏参数贴合在一起. 用法: #include#includeusing namespace std; #define STR(s) #s #define CONS(a,b) int(a##e##b) int main() { printf(STR(vck)); // 输出字符串"vck" printf("%d ", CONS(2,3)); // 2e3 输出:2000 return 0; } 二、当宏参数是另一原创 2010-11-12 09:43:00 · 4997 阅读 · 0 评论 -
关于SIGPIPE导致的程序退出
服务器关了正在连接的客户端socket_fd,客户端做出的反应过程当服务器close一个连接时,若client端接着发数据。根据TCP协议的规定,会收到一个RST响应,client再往这个服务器发送数据时,系统会发出一个SIGPIPE信号给进程,告诉进程这个连接已经断开了,不要再写了。 根据信号的默认处理规则SIGPIPE信号的默认执行动作是terminate(终止、退出),所以client会退出。若不想客户端退出可以把SIGPIPE设为SIG_IGN 如: signal(SIGPIPE,转载 2010-11-11 17:08:00 · 4659 阅读 · 0 评论 -
fmemopen, open_memstream, open_wmemstream
NAME fmemopen, open_memstream, open_wmemstream - open memory as streamSYNOPSIS #includeFILE*fmemopen(void*buf,size_tsize,constchar*mode);FILE*open_memstream(char**ptr,size_t*sizeloc);#includeFILE*open_wmemstream(wchar_t**ptr,size_t*sizeloc);fm转载 2011-01-06 19:42:00 · 6707 阅读 · 0 评论 -
STL vector list deque区别与实现
1 vector 向量 相当于一个数组 在内存中分配一块连续的内存空间进行存储。支持不指定vector大小的存储。STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capacituy()函数返回的大小,当超过此分配的空间时再整体重新放分配一块内存存储,这给人以vector可以不指定vector即一个连续内存的大小的感觉。通常此默认的内存分配能完成大部分情况下的存储。 优点:(1) 不指定一块内存大小的数组的连续存储,即可以像数组一样操作,但可以对此数组原创 2011-01-07 10:11:00 · 11213 阅读 · 0 评论 -
select,poll,epoll用法
阅读本文前,请先参考: select,poll,epoll区别select用法poll用法epoll用法转载 2011-01-10 13:42:00 · 10876 阅读 · 0 评论 -
正则匹配函数——regcomp和regexec
1.int regcomp(regex_t *compiled, const char *pattern, int cflags)这个函数把指定的规则表达式pattern编译成一种特定的数据格式compiled,这样可以使匹配更有效。函数regexec会使用这个数据在目标文本串中进行模式匹配。执行成功返回0。 regex_t:是一个结构体数据类型,用来存放编译后的规则表达式,它的成员re_nsub用来存储规则表达 式中的子规则表达式的个数,子规则表达式就是用圆括号包起来的部分表达式。 pattern:是指向原创 2011-01-12 11:50:00 · 12823 阅读 · 0 评论 -
C++箴言:理解typename的两个含义
<br />在c++Template中很多地方都用到了typename与class这两个关键字,而且好像可以替换,是不是这两个关键字完全一样呢?<br /><br /> 相信学习C++的人对class这个关键字都非常明白,class用于定义类,在模板引入c++后,最初定义模板的方法为: template<class T>...... <br /><br /> 在这里class关键字表明T是一个类型,后来为了避免class在这两个地方的使用可能给人带来混淆,所以引入了typenam原创 2010-11-23 20:57:00 · 3872 阅读 · 0 评论 -
C++纯虚函数 virtual =0
C++纯虚函数 virtual =0一、定义 纯虚函数是一种特殊的虚函数,它的一般格式如下: class { virtual ()=0; … }; 在许多情况下,在基类中不能对虚函数给出有意义有实现,而把它说明为纯虚函数,它的实现留给该基类的派生类去做。这就是纯虚函数的作用。二、引入原因 1、为了方便使用多态特性,我们常常需要在基类中定义虚拟函数。 2、在很多情况下,基类本身生成对象是不合情理的。例如,动物作为一个基类可以派生出老虎、孔雀等子类,但动物本身生成对象明显不合常理。 为了解原创 2010-11-24 09:51:00 · 52520 阅读 · 12 评论 -
va_start va_arg va_end 的原理与实例
<br /> <br />func( Type para1, Type para2, Type para3, ... ) <br />{ <br /> /****** Step 1 ******/ <br /> va_list ap; <br /> va_start( ap, para3 ); //一定要“...”之前的那个参数**ap指向para后的第一个可变参数。 <br /> <br /> /****** Step 2 ******/ <br原创 2011-02-16 21:23:00 · 5217 阅读 · 1 评论 -
linux线程-sysconf系统变量
了解系统的线程资源限制是使得应用程序恰当地管理它们的关键。前面已经讨论了利用系统资源的示例。当设置线程的栈大小时,最小值为PTHREAD_MIN_STACK。栈大小不应当低于由pthread_attr_getstacksize( )返回的默认栈大小的最小值。每个进程的最大线程数决定了能够为每个进程创建的worker线程的上限。函数sysconf( )用于返回可配置系统限制或选项的当前值。系统中定义了同线程、进程和信号量相关的多个变量和常量。在表6-8中,列出了部分变量和常量。变 量名字值(Name V原创 2011-02-16 21:11:00 · 8892 阅读 · 1 评论 -
globalalloc、malloc和new的区别
<br /> <br />GlobalAlloc<br />是为了与Win16兼容才保留的,在Win32下不要使用。 全局内存对象使用GlobalAlloc函数分配,在Windows 3.X的时代,分配的内存可以有两种,全局的和局部的,例如GlobalAlloc和LocalAlloc。但在Win32的时代这些函数已经被废弃了,现在的内存只有一种就是虚存。在Win32中所有的进程所使用的内存区域是相互隔离的,每个进程都拥有自己的地址空间。而且系统使用了页面交换功能,就是利用磁盘空间来模拟RAM,在RAM中数据原创 2011-02-23 15:10:00 · 5879 阅读 · 0 评论 -
深入分析Windows和Linux动态库应用异同
<br /><br />摘要:动态链接库技术实现和设计程序常用的技术,在Windows和Linux系统中都有动态库的概念,采用动态库可以有效的减少程序大小,节省空间,提高效率,增加程序的可扩展性,便于模块化管理。<br />但不同操作系统的动态库由于格式 不同,在需要不同操作系统调用时需要进行动态库程序移植。本文分析和比较了两种操作系统动态库技术,并给出了将Visual C++编制的动态库移植到Linux上的方法和经验。<br /> <br />1、引言<br />动态库(Dynamic Link Libr转载 2011-03-23 09:36:00 · 5870 阅读 · 0 评论 -
Win Unix Mac 等多种系统平台的宏定义
最近正在学习C++程序从 Windows 平台向 Unix 平台移植,参考了 qt 的宏定义文件Win Unix Mac 各种操作系统的宏定义#ifndef QGLOBAL_H#define QGLOBAL_H#define QT_VERSION_STR "3.1.2"/* QT_VERSION is (major原创 2011-03-24 13:22:00 · 13629 阅读 · 1 评论 -
将 Win32 程序移植到 Linux
对于这个问题,网上已经有很多资料给予了介绍,但是相比于这些信息,本文立足于个人的实践,将内容具体到开发环境和源代码,我觉得还是有很多值得总结和借鉴的。首先声明开发环境。Win32程序的开发环境是VS.Net 2008,编程语言是C;Linux使用的RHEL 5.4,GCC的版本是4.1.2,编程语言也是C。然后依次说明移植的对象:数据类型/字符串处理/系统调用/套接字/进程/进程锁/线程/线程锁/信号量/事件锁/条件锁/系统服务。1. 数据类型:在开发过程中,无论哪种平台,只使用最通用的数据类型char,u转载 2011-03-23 17:01:00 · 8440 阅读 · 0 评论 -
从 Windows 向 Linux 迁移设备控制应用程序
通过认识 Microsoft Windows 和 Linux 操作系统设备控制的工作原理,简化从 Microsoft Windows 向 Linux 迁移设备控制应用程序。作者分析二者的差别,并给出 C/C++ 示例。如果读者开发过不同平台的设备控制应用程序,那么肯定了解 Windows 和 Linux 的设备控制方式的差别,从一个平台向另一个平台迁移应用程序相当复杂。本文分析两种操作系统的设备控制原理,探究从架构到系统调用的各个方面,重点比较二者差别。本文还给出一个迁移示例(用 C/C++ 编写),详细原创 2011-03-23 17:40:00 · 262 阅读 · 0 评论 -
Windows消息机制VC
<br /> <br />在Windows中,用户或系统中所发生的任何活动被当作事件来处理,例如,用户按下了鼠标按钮,就产生一鼠标事件。对于所发生的每一个事件,Windows将其转换成消息的形式放在一个称为消息队列的内存区中,然后由Windows的消息发送程序选择适合的对象,将消息队列中的消息发送到欲接受消息的对象上。Windows的消息可分为四种类型: <br /> (1)输入消息:对键盘和鼠标输入作反应。这类输入消息首先放在系统消息队列中,然后Windows将它们送入应用程序的消息队列,使消息转载 2011-03-31 15:10:00 · 6410 阅读 · 0 评论 -
VC工程中后缀为.cpp,.h,.rc,.dsp,.dsw
<br /> <br />.cpp 是源程序代码c++文件<br />.h 是包含函数声明和变量定义的头文件<br />.rc 是定义资源的资源脚本文件<br />.dsp 是工程文件,记录当前工程的有关信息<br />.dsw 是工作区文件,一个工作区可能包含一个或多个工程<br />...<br />(其它.clw .opt .aps等后缀文件,见下面说明)<br />.opt 工程关于开发环境的参数文件。如工具条位置等信息;<br />.aps (AppStudio File),资源辅助原创 2011-03-31 15:20:00 · 6992 阅读 · 0 评论 -
linux c程序中获取shell脚本输出
1. 前言 Unix界有一句名言:“一行shell脚本胜过万行C程序”,虽然这句话有些夸张,但不可否认的是,借助脚本确实能够极大的简化一些编程工作。比如实现一个ping程序来测试网络的连通性,实现ping函数需要写上200~300行代码,为什么不能直接调用系统的ping命令呢?通常在程序中通过 system函数来调用shell命令。但是,system函数仅返回命令是否执行成功,而我们可能需要获得shell命令在控制台上输出的结果。例如,执行外部命令ping后,如果执行失败,我们希望得到ping的返回信息。原创 2011-04-12 19:17:00 · 11983 阅读 · 1 评论 -
QT 文件读写操作
#include #include 1.打开文件 QFile f( fn );//fn可以是一个相对路径或绝对路径 f.open(IO_);//一般不要IO_ReadWrite,很容易出现赃数据 //如果要在文件的后面添加内容要IO_WriteOnly|IO_Append //如果要清空原来的内容,只要IO_WriteOnly //IO_Translate用来读windows文件,linux下的回车换行是/n,windows下是/r/n 2.写文原创 2011-04-13 10:51:00 · 7971 阅读 · 1 评论 -
简明教程:如何在Solaris操作系统上开发C 应用程序
1,开发C程序的必要工具和设置A,Solaris下的开发工具在solaris下开发C应用程序,缺省开发环境是Sun Studio。目前Sun Studio 11是Sun公司最新的C/C++/Fortran开发工具,这个工具已经安装在Unix体验中心的服务器上,我们可以直接使用。在Sun Studio 中,其中C程序的编译工具名称为cc。还有的就是make这个命令,make命令是Solaris安装后就自带了,不需要我们另外安装。B,设置环境变量在solaris下开发C应用程序,需要把编译器和make的路径加入转载 2011-04-14 17:48:00 · 6426 阅读 · 0 评论 -
sizeof(空类或空结构体)
前天去理想国际某IT公司面试,看到了这样一道题:VC++里,有一个空类,没有任何成员变量或函数,请问其空类占多大字节空间?A、 0 B、 1 C、 4 D、8当时考虑了32bit和64bit机器,并且指针地址是int型原创 2011-07-07 12:19:22 · 12510 阅读 · 1 评论 -
你应当如何学习C++(以及编程)
Javascript是世界上最受误解的语言,其实C++何尝不是。坊间流传的错误的C++学习方法一抓就是一大把。我自己在学习C++的过程中也走了许多弯路,浪费了不少时间。为什么会存在这么多错误认识?原因主要有三个,一是C++语言的细节太多。二是一些著名的C++书籍总在(不管有转载 2010-07-03 12:43:00 · 5487 阅读 · 1 评论 -
面试及总结
今天去百度大厦面试,职位是测试开发工程师(暑期实习),面试官是一位漂亮、友善的JJ 第一道很简单,问程序在内存有几个数据区,堆和栈区有啥区别第二道是两个有序数组(可能升序或降序),要求合并到一个大数组中,使其仍然有序,讲了大体思路,并用C简单写了实现代码第三道是给出int型的x、原创 2010-06-29 17:27:00 · 6835 阅读 · 20 评论 -
Android模拟器无法上网问题
方法一Windows下,配置好Adroid环境变量后(如将d:/android-sdk-windows-1.0_r1/tools加入系统变量Path),在命令行窗口输入:(注:最新版的Android SDK安装,emulator命令一般在tools目录中,adb命令移到了plat原创 2011-04-20 16:49:00 · 17411 阅读 · 3 评论 -
数组中最大和的子数组
题目:输入一个整型数组,数据元素有正数也有负数,求元素组合成连续子数组之和最大的子数组,要求时间复杂度为O(n)。例如:输入的数组为1, -2, 3, 10, -4, 7, 2, -5,最大和的连续子数组为3, 10, -4, 7, 2,其最大和为18。背景:本题最初为2005年浙江大学计算机系考研题的最后一道程序设计题,在2006年里包括google在内的很多知名公司都把本题当作面试题。由于本题原创 2011-12-22 17:51:58 · 15779 阅读 · 14 评论 -
Windows搭建Eclipse+JDK+SDK的Android
一 相关下载(1) java JDK下载:进入该网页: http://java.sun.com/javase/downloads/index.jsp (或者直接点击下载)如下图:选择 Download JDK 只下载JDK,无需下载jre.(2)eclipse下载 进入该网页: http://www.eclipse.org/downloads/ (或者直接点击下载:BT下载 HTTP下载原创 2011-04-20 16:47:00 · 105926 阅读 · 2 评论 -
学习编程技术的成长之路
只要有一本好书,有一个舞台,每一个人都可能成为大牛级的高手,希望大家通过我精心搜集的这些网站找到自己的兴趣爱好,以增强自己的信心。 众里寻他千百度,为了百度,为了梦想,我们一起分享、交流、奋斗! Simple and reliable —— 简单可依赖 C 语言学习 Linux C 编程一站式学习http://learn.akae.cn/media/ Learning GNU Chttp://ww原创 2010-07-01 16:46:00 · 14206 阅读 · 18 评论 -
面试及总结2
众里寻他千百度 今天上完课回实验室后,把昨天面试的三道算法题,完完整整的全部自己重做实现了一遍(多种方法) 以下代码原则上,力争全部都是用C语言实现,但考虑到扩展性和兼容性,算法1使用了模板 测试环境:VS2008 测试结果: 测试通过/**** 欢迎访问杨刚的CSDN技术交流博客:http://blog.csdn.net/Sunboy_2050 ***/ /****************原创 2010-06-29 23:38:00 · 10942 阅读 · 10 评论 -
c语言位域
一、 位域的概念有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一原创 2009-09-30 13:56:00 · 3708 阅读 · 1 评论 -
标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast
一、 强制转型1) C 风格(C-style)强制转型: (T) exdivssion // cast exdivssion to be of type T 2) 函数风格(Function-style)强制转型使用这样的语法: T(exdivssion) // cast exdivssion to be of type T上面两种形式之间没有本质上的不同,它纯粹就是一个把括号放在哪的问题,我原创 2010-11-19 13:24:00 · 3758 阅读 · 0 评论 -
VC++常用数据类型及其操作详解(非常经典,共同分享)
友情提示:为了方便你更好的学习和阅读,也更好的体现尊重原创作者的劳动成果,请您直接查看转载原本链接:http://snailflying.blog.hexun.com/8219350_d.html===================================================================VC++常用数据类型及其操作详解一.VC常用数据类型列表二.常用数据类转载 2009-12-16 16:02:00 · 26043 阅读 · 2 评论 -
C语言编译全过程剖析
一、 摘要 C语言编译的整个过程是非常复杂的,里面涉及到的编译器知识、硬件知识、工具链知识都是非常多的,深入了解整个编译过程对工程师理解应用程序的编写是有很大帮助的,希望大家可以多了解一些,在遇到问题时多思考、多实践。 一般情况下,我们只需要知道分成编译和连接两个阶段,编译阶段将源程序(*.c)转换成为目标代码(一般是obj文件,至于具体过程就是上面说的那些阶段),连接阶段是把源程序转换成的目标代原创 2011-01-18 10:43:00 · 6518 阅读 · 1 评论 -
C++巧用do...while(0)
C++中,有三种类型的循环语句:for、while、do...while在一般应用中作循环时, 我们可能用for和while要多一些,do...while相对不受重视。 但是,最近在读我们项目的代码时,却发现了do...while的一些十分聪明的用法,不是用来做循环,而是用作其他来提高代码的健壮性 1. do...while(0)消除goto语句 通常,如果在一个函数中开始要分配一些资源,然后在中原创 2010-11-23 17:15:00 · 3889 阅读 · 3 评论 -
C语言函数小集合
一、字符操作函数名: fputc功 能: 送一个字符到一个流中用 法: int fputc(int ch, FILE *stream); 函数名: fputs功 能: 送一个字符串到一个流中用 法: int fputs(char *string, FILE *stream); 函数名: sprintf功 能: 输出数据到一字符串中(而printf是输出到屏幕上)函数名: fread用 法: fre原创 2010-06-24 11:04:00 · 7128 阅读 · 0 评论 -
栈与堆的区别及其探讨
一、 堆与栈有什么区别?一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(static)—,全局变原创 2009-12-16 15:51:00 · 3264 阅读 · 0 评论