
Linux下C/C++编程
文章平均质量分 73
gogor
这个作者很懒,什么都没留下…
展开
-
linux线程中的问题-----数据冲突
最近用MiniGui做一个程序,里面用到了线程。该程序的功能是浏览文件夹里的图片。 在一个窗口中,由于用LoadBitmapFromFile加载一幅大图片非常费时,于是就在窗口初始化的时候开辟了一个线程来加载图片,以保证主线程不会阻塞在图片加载这一过程中。 但实际做的时候必须考虑这样一个问题:当我按下右键以要求线程加载下一张图片后,由于加载图片需要一些时间,如果紧接着我原创 2009-05-19 16:08:00 · 1371 阅读 · 0 评论 -
内存共享和Copy-On-Write技术
刚看到一篇文章《 标准C++类std::string的内存共享和Copy-On-Write技术》,觉得很有意思,于是将个人的理解记录于此。该文章的出处为:http://blog.youkuaiyun.com/haoel/archive/2004/06/23/24058.aspx 1.Copy-On-Write技术 Copy-On-Write技术使用了“引用计数”。当第一个类构造时,stri原创 2009-10-14 16:41:00 · 1035 阅读 · 0 评论 -
Linux下网络编程概述
Linux下网络编程概述一.网络知识概述网络程序和普通程序最大的区别是网络程序由两部分组成:客户端和服务器端。客户端:在网络程序中,如果一个程序主动和外面的程序通信,那么我们就把该程序称为客户端程序。服务器端:和客户端对应的程序即为服务器端;被动地等待外面程序来和自己通信的程序即为服务器端程序。TCP:(Transmission Control Protocol 传输控制协原创 2010-01-17 22:25:00 · 2307 阅读 · 1 评论 -
项目开发中遇到的两个问题:数组访问越界和内存泄露
最近测评人员在对项目软件进行测评时发现了两个死机问题:1. 不停地对股票作翻页操作时出现程序挂掉的情况(直接退到提示行#下) 经分析发现是两个线程使用同一个变量而引起的数组访问越界: 程序中有这样一段代码:for (i=0; icur_number); i++){memcpy(&gAppstock.StockList[gAppstock.currgot],ps原创 2010-01-28 11:29:00 · 2798 阅读 · 0 评论 -
Linux下C++类的线程函数
最近在用C++编写一个RTSP的客户端,由于要用到线程,根据C编程的经验,写了如下代码:class LiRtspSession{ public: void* MainThreadFunc(void* pvData); void* AudioProcThreadFunc(void* pvData); void Connect();原创 2010-01-28 15:08:00 · 2263 阅读 · 0 评论 -
字幕基础:字幕介绍、字幕种类及常见格式(转)
字幕基础:字幕介绍、字幕种类及常见格式字幕是指电影、电视,以及戏剧、歌剧等舞台作品中出现的各种用途的文字。如版权标识、片名字幕、演(职)员表、说明字幕、歌词字幕、对白字幕等。这些字幕按照影片放映时出现的先后顺序而分为片头字幕、片间字幕和片尾字幕。一般情况下,片头、片尾字幕叠印在画面上,而对白、歌词等字幕一般出现在屏幕下方,戏剧等舞台伤口则显示于舞台两侧或上方。 字幕的作用,主要是将语音内容以原创 2010-02-23 16:40:00 · 24296 阅读 · 0 评论 -
GCC的基本用法和选项
在使用Gcc编译器的时候,我们必须给出一系列必要的调用参数和文件名称。 Gcc编译器的调用参数大约有100多个,其中多数参数我们可能根本就用不到,这里只介绍其中最基本、最常用的参数。 Gcc最基本的用法是∶gcc [options] [filenames] 其中options就是编译器所需要的参数,filenames给出相关的文件名称原创 2010-04-19 13:16:00 · 3015 阅读 · 0 评论 -
linuxC程序中获取shell脚本输出
<br />1. 前言<br /> Unix界有一句名言:“一行shell脚本胜过万行C程序”,虽然这句话有些夸张,但不可否认的是,借助脚本确实能够极大的简化一些编程工作。比如实现一个ping程序来测试网络的连通性,实现ping函数需要写上200~300行代码,为什么不能直接调用系统的ping命令呢?通常在程序中通过 system函数来调用shell命令。但是,system函数仅返回命令是否执行成功,而我们可能需要获得shell命令在控制台上输出的结果。例如,执行外部命令ping后,如果执行失败,我们希望转载 2010-08-26 11:20:00 · 1770 阅读 · 0 评论 -
Linux源码中的mktime算法解析
该文转载自:http://yuxu9710108.blog.163.com/blog/static/23751534201071111843396/Linux源码中的mktime算法解析 我们知道,从CMOS中读出来的系统时间并不是time_t类型,而是类似于struct tm那样,年月日时分秒是分开存储的。 那么,要把它转化为系统便于处理的time_t类型,就需要算法进行转换。 我们都知道我们的公历还是比较复杂的,有大月小月,有闰年非闰年,处理起来会很麻烦。 但是Linux的源代码转载 2010-09-17 11:23:00 · 1510 阅读 · 1 评论 -
Linux下动态共享库加载时的搜索路径详解
<br />对动态库的实际应用还不太熟悉的读者可能曾经遇到过类似“error while loading shared libraries”这样的错误,这是典型的因为需要的动态库不在动态链接器ld.so的搜索路径设置当中导致的。<br />具体说来,动态链接器ld.so按照下面的顺序来搜索需要的动态共享库:<br />1.ELF可执行文件中动态段中DT_RPATH所指定的路径。这实际上是通过一种不算很常用,却比较实用的方法所设置的:编译目标代码时,可以对gcc加入链接参数“-Wl,-rpath”指定动态库搜转载 2010-09-20 10:51:00 · 1344 阅读 · 0 评论 -
linux进程状态浅析
<br /><br />linux进程状态浅析<br /> 众所周知,现在的分时操作系统能够在一个CPU上运行多个程序,让这些程序表面上看起来是在同时运行的。linux就是这样的一个操作系统。<br /> 在linux系统中,每个被运行的程序实例对应一个或多个进程。linux内核需要对这些进程进行管理,以使它们在系统中“同时”运行。 linux内核对进程的这种管理分两个方面:进程状态管理,和进程调度。本文主要介绍进程状态管理,进程调度见《linux进程调度浅析》。<br /> 进程状态<br /转载 2011-01-18 16:47:00 · 730 阅读 · 0 评论 -
Bind: Address Already in Use
<br />Or How to Avoid this Error when Closing TCP Connections<br />Normal Closure<br />In order for a network connection to close, both ends have to send FIN (final) packets, which indicate they will not send any additional data, and both ends must ACK (ac转载 2011-01-26 20:18:00 · 7701 阅读 · 0 评论 -
Linux中的system函数详细分析
Linux中的system函数详细分析<br />[size=2]system()函数功能强大,很多人用却对它的原理知之甚少,也就有了上面那么多的回帖,我想大家如果知道了system的具体实现就不会对楼主程序在很多编译器中不能表现自己希望的功能感到费解了。我对linux中的实现比较了解,具体分析这个,windows中的类似就不详解了。<br /><br />好了,先看linux版system函数的源码:[code]#include <br />#include <br />#include <br />#i转载 2011-03-28 11:22:00 · 1156 阅读 · 0 评论 -
Linux进程学习总结
<br />转载自:http://www.linuxidc.com/Linux/2011-02/32125.htm<br /> <br />最近一周学习了Linux 进程编程的知识,现对其总结如下。 <br />在第一部分中我们先对进程的基本概念以及在Linux 中是如何来现实进程的进行介绍 <br />Tiger-John说明 : <br />许多人在学习中只注重如何编程,却忘了注重原理,不去深究其基本原理。其实操作系统的原理就好 比金庸武侠小说的内功一样,而所有的具体实现如:Linux操作系统,uc/转载 2011-03-28 15:41:00 · 871 阅读 · 0 评论 -
linux系统中链接的接口——符号
转载自: http://www.embedtrain.org/lecture/doc/linuxcore/2011-05/712.html 链接过程的本质就是要把多个不同的目标文件之间相互“粘”到一起,或者说像玩具积木一样,可以拼装形成一个整体。为了使不同目标文件之间能够相互粘合,这些目标文件之间必须有固定的规则才行,就像积木模块必须有凹凸部分才能够拼合。在链接中,目标文件之间相互拼合转载 2011-06-20 16:59:00 · 2274 阅读 · 1 评论 -
几种linux内核文件的区别
转载自:http://www.embedtrain.org/lecture/doc/linuxcore/2011-06/779.html vmlinux编译出来的最原始的内核文件,未压缩。 zImage是vmlinux经过gzip压缩后的文件。 bzImage bz表示“big zImage”,不是用bzip2压缩的。两者的不同之处在于,zImage解压缩内核到低端内存(第一个转载 2011-06-20 17:01:00 · 795 阅读 · 0 评论 -
Linux下C/C++开发环境的配置
最近打算在虚拟机中装个Linux系统,练习C/C++开发。于是在VMware下安装了fedora11,可安装好了才发现系统中仅有gcc,而没有g++。1. 下载并安装g++ 命令: #yum install gcc-c++ 然后根据提示就可安装上g++了。在Ubuntu等Linux中命令为:apt-get install gcc-c++。2. 编写程序进行测试原创 2009-10-12 20:33:00 · 2550 阅读 · 0 评论 -
gcc编译c++
gcc和g++都是GNU(组织)的一个编译器。 误区一:gcc只能编译c代码,g++只能编译c++代码 两者都可以,但是请注意: 1.后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序;后缀为.cpp的,两者都会认为是c++程序,注意,虽然c++是c的超集,但是两者对语法的要求是有区别的。C++的语法规则更加严谨一些。 2.编译阶段,g++会调用gcc,对于c++代转载 2009-10-10 23:57:00 · 1891 阅读 · 0 评论 -
字符串中汉字字符的判别方法(新)
经常会遇到这样一个问题:要求输出一个字符串(中英文字符都有)中的一个子字符串。这里问题的关键是要判断字符是汉字字符还是英文字符,其方法是:先将字符转换为无符号整形数,如果该数大于128则是汉字字符,反之,如果小于等于128则为英文字符。示例代码如下://如果所在系统汉字字符占2个字节,如Windows系统void GetSubString(const char* intext, char*原创 2009-05-25 17:07:00 · 3601 阅读 · 0 评论 -
格式化字符串函数的一些小技巧
1. %02d 在printf、sprintf等函数中,%d表示输出一个整形数,当需要输出时间等字符串时,可以使用这样的格 式: %02d,它表示输出两位整形数,如果不足两位则从高位补零。其他情况可类推。。。 下面是一个函 数的代码:将一个整型时间转换为字符串格式(00:00:00) 输入输出示例: 输入:60 //(单位是s)原创 2009-05-24 16:45:00 · 1204 阅读 · 0 评论 -
一个简单的双向循环链表的实现
一个简单的双向循环链表的实现的代码:typedef struct Data{ int index; char name[256];}Data_t;typedef struct DList{ void *data; struct DList *prior, *next;}DList;void InitList(D转载 2009-05-24 17:54:00 · 1120 阅读 · 0 评论 -
makefile文件的编写
一个makefile通常包含如下内容:1. 需要由make工具创建的目标体(target),通常是目标文件或可执行文件。2. 要创建的目标体所依赖的文件(dependency_file)。3. 创建每个目标体时需要运行的命令(command)。 makefile文件的简单示例1:#the simplest example#target(1):dependency_f原创 2009-08-12 16:53:00 · 765 阅读 · 0 评论 -
使用autotools工具自动生成makefile文件
1. autosacn 该命令会根据源文件产生一个名为configure.scan的文件2. 改写第一步生成的configure.scan文件,并重命名为configure.in 1 # -*- Autoconf -*- 2 # Process this file with原创 2009-08-20 15:14:00 · 1103 阅读 · 0 评论 -
线程函数的可重入性和线程安全的概念
线程安全:概念比较直观。一般说来,一个函数被称为线程安全的,当且仅当被多个并发线程反复调用时,它 会一直产生正确的结果。 可重入:概念基本没有比较正式的完整解释,但是它比线程安全要求更严格。根据经验,所谓“重入”,常见的情况是,程序执行到某个函数foo()时,收到信号,于是暂停目前正在执行的函数,转到信号处理函数,而这个信号处理函数的执行过程中,又恰恰也会进入到刚刚执行的函数foo(),这样转载 2009-06-22 15:02:00 · 1391 阅读 · 0 评论 -
c/c++程序编译后的内存分布
一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)—> 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap)—> 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(static)—>全局变量和静态变量的存转载 2009-06-22 15:01:00 · 1146 阅读 · 0 评论 -
sscanf函数的用法
文章出处:http://www.limodev.cn/blog作者联系方式:李先静 大家都知道sscanf是一个很好用的函数,利用它可以从字符串中取出整数、浮点数和字符串等等。它的使用方法简单,特别对于整数和浮点数来说。但新手可能并不知道处理字符串时的一些高级用法,这里做个简要说明吧。1. 常见用法。 char str[512] = {0}; sscanf("123转载 2009-09-01 16:01:00 · 973 阅读 · 0 评论 -
strcpy与memcpy以及strncpy
1. strcpy函数 strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。 函数原型及实现:char* strcpy(char* strDst, const char* strSrc) { assert((strDst != NULL) && (strSrc != NULL));原创 2009-09-02 15:06:00 · 7740 阅读 · 0 评论 -
利用mtrace检查内存泄漏
mtrace是linux下检查内存泄漏的工具之一。 它实际上是通过一对函数来检测一段代码是否存在内存泄漏: mtrace()与muntrace()。 它们的原型如下: void mtrace(void); void muntrace(void); 头文件为:mcheck.h 用法: 1. 首先确定需要检测那一段代码原创 2009-09-03 14:09:00 · 395 阅读 · 0 评论 -
malloc与calloc的区别
函数malloc()和calloc()都可以用来动态分配内存空间,但两者稍有区别,主要有两点:1. malloc()函数有一个参数,即要分配的内存空间的大小: void*malloc(size_tsize); calloc()函数有两个参数,分别为元素的数目和每个元素的大小,这两个参数的乘积就是要分配的内存空间的 大小。 void*calloc(si原创 2009-07-02 20:50:00 · 663 阅读 · 0 评论 -
正确处理 Linux 平台下的线程结束问题
在 Linux 平台下,当处理线程结束时需要注意的一个问题就是如何让一个线程善始善终,让其所占资源得到正确释放。在 Linux 平台默认情况下,虽然各个线程之间是相互独立的,一个线程的终止不会去通知或影响其他的线程。但是已经终止的线程的资源并不会随着线程的终止而得到释放,我们需要调用 pthread_join() 来获得另一个线程的终止状态并且释放该线程所占的资源或者将该线程设置为可分原创 2009-07-06 20:14:00 · 2027 阅读 · 0 评论 -
GCC 编译动态库和静态库
我们通常把一些公用函数制作成函数库,供其它程序使用。函数库分为静态库和动态库两种。静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。本文主要通过举例来说明在Linux中如何创建静态库和动态库,以及使用它们。在创建函数库前,我们先来准备举例用的源程序,并将函数库的源程序编译原创 2009-10-10 16:06:00 · 9894 阅读 · 2 评论 -
extern "C"
在C++ 程序中调用被 C编译器编译后的函数,需要在函数声明时(头文件中)加上 extern “C”,如:文件c_test.h与c_test.c分别是函数fun_c的定义与实现文件: c_test.h#ifndef _C_TEST_H_#define _C_TEST_H_#ifdef __cplusplusextern "C" {#endifvoid f原创 2009-10-10 14:42:00 · 822 阅读 · 0 评论 -
Linux动态库、静态库加载基础
Linux动态库、静态库加载基础静态库 在linux环境中, 使用ar命令创建静态库文件.如下是命令的选项: d -----从指定的静态库文件中删除文件 m -----把文件移动到指定的静态库文件中 p -----把静态库文件中指定的文件输出到标准输出 q -----快速地把文件追加到静态库文件中转载 2011-06-20 17:04:00 · 3044 阅读 · 0 评论