随笔分类 - Linux编程

摘要:简介: 如何定位应用程序开发中的内存问题,一直是 Linux 应用程序开发中的瓶颈所在。有一款非常优秀的 linux 下开源的内存问题检测工具:valgrind,能够极大的帮助你解决上述问题。掌握 valgrind 的使用以及工作原理,能够有效地定位进而避免应用开发中的内存问题。Valgrind 概述体系结构Valgrind是一套Linux下,开放源代码(GPL V2)的仿真调试工具的集合。Valgrind由内核(core)以及基于内核的其他调试工具组成。内核类似于一个框架(framework),它模拟了一个CPU环境,并提供服务给其他工具;而其他工具则类似于插件 (plug-in),利用内核 阅读全文
posted @ 2012-11-16 23:07 Mr.Rico 阅读 (80) | 评论 (0) 编辑
摘要:简介: 本文针对 linux 下的 C++ 程序的内存泄漏的检测方法及其实现进行探讨。其中包括 C++ 中的 new 和 delete 的基本原理,内存检测子系统的实现原理和具体方法,以及内存泄漏检测的高级话题。作为内存检测子系统实现的一部分,提供了一个具有更好的使用特性的互斥体(Mutex)类。1.开发背景在 windows 下使用 VC 编程时,我们通常需要 DEBUG 模式下运行程序,而后调试器将在退出程序时,打印出程序运行过程中在堆上分配而没有释放的内存信息,其中包括代码文件名、行号以及内存大小。该功能是 MFC Framework 提供的内置机制,封装在其类结构体系内部。在 linu 阅读全文
posted @ 2012-11-16 22:43 Mr.Rico 阅读 (111) | 评论 (0) 编辑
摘要:——本文一个例子展开,介绍Linux下面线程的操作、多线程的同步和互斥。前言线程?为什么有了进程还需要线程呢,他们有什么区别?使用线程有什么优势呢?还有多线程编程的一些细节问题,如线程之间怎样同步、互斥,这些东西将在本文中介绍。我在某QQ群里见到这样一道面试题:是否熟悉POSIX多线程编程技术?如熟悉,编写程序完成如下功能:1)有一int型全局变量g_Flag初始值为0;2) 在主线称中起动线程1,打印"this is thread1",并将g_Flag设置为13) 在主线称中启动线程2,打印"this is thread2",并将g_Flag设置为24 阅读全文
posted @ 2012-08-27 10:22 Mr.Rico 阅读 (106) | 评论 (0) 编辑
摘要:"一切皆Socket!"话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket。——有感于实际编程和开源项目研究。我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web 服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型 有哪些?还有socket的基本函数,这些都是本文想介绍的。本文的主要内容如下:1、网络中进程之间如何通信?2、Socket是什么?3、socket的基本操作3.1、socket()函数3.2、bind 阅读全文
posted @ 2012-08-27 10:06 Mr.Rico 阅读 (146) | 评论 (0) 编辑
摘要:在bash命令行工作中,为常用的操作编写一个脚本或外部命令是很容易的。事实上自己添加一条内置命令(built-in)也并不难。内置命令比脚本和外部命令的执行效率更高,还可以访问脚本和外部命令无法深入的bash内部,只是可移植性下降了。 GNU bash的源代码结构较为清晰。源代码目录(记为$(srcdir))下的builtins目录存储的是各个内置命令的源代码预定义文件(*.def)。 在make的过程中,由mkbuiltins工具将它们预编译为源程序(*.c),进而编译为目标文件(*.o)。mkbuiltins工具是由同一目录 ... 阅读全文
posted @ 2012-06-27 22:26 Mr.Rico 阅读 (696) | 评论 (0) 编辑
摘要:linux常用的makefile模版编写 在linux下面,我们不得不自己写makefile,makefile的确博大精深,但是实际上对于日常的使用来说,无非就是 1:编译可执行程序。2:编译lib库 3:编译so库 本博针对上面三种目的各自写出了makefile模版,希望对大家有所帮助。 一.编译可执行程序 当前目录下制定文件编译成可执行文件(连接外部库的话只需要更改INC和LIB即可) CXX =g++ TARGET ... 阅读全文
posted @ 2012-06-27 22:23 Mr.Rico 阅读 (426) | 评论 (0) 编辑
摘要:说说计算机中的异常 开篇 异常这个名词应该大家都不陌生,很多人都听说过。系统调用知道吧?其实系统调用也是一种异常。但是具体的什么是异常呢?他在计算机中有什么作用?他是如何工作,如何被我们利用的?我想很多人都还不都是很清楚。、 了解异常有诸多好处,可以让你更好的理解操作系统和应用程序的交互,更好的理解并发等。 所以今天就简单的来说一下异常。 注:本博文图片来源《Computer system-A Programmer's Perspective》 什么是异常 为了便于理解,我就不按照书本来了啊,异常可以这样理解: 计算机执行一个连续的指令序列,如:a1,a2,a3... 阅读全文
posted @ 2012-05-17 12:32 Mr.Rico 阅读 (108) | 评论 (0) 编辑
摘要:平时在Linux下写代码,直接用"gcc -o out in.c"就把代码编译好了,但是这后面到底做了什么事情呢?如果学习过编译原理则不难理解,一般高级语言程序编译的过程莫过于:预处理、编译、汇编、链 接。gcc在后台实际上也经历了这几个过程,我们可以通过-v参数查看它的编译细节,如果想看某个具体的编译过程,则可以分别使用-E,-S,-c和 -O,对应的后台工具则分别为cpp,cc1,as,ld。下面我们将逐步分析这几个过程以及相关的内容,诸如语法检查、代码调试、汇编语言等。1、预处理 开篇简述:预处理是C语言程序从源代码变成可执行程序的第一步,主要是C语言编译器对各种预处 阅读全文
posted @ 2012-02-27 22:42 Mr.Rico 阅读 (166) | 评论 (0) 编辑
摘要:摘要:《Linux内核修炼之道》第5章讲解系统调用,它是应用程序和内核间的桥梁,学习并理解它是我们走向内核的一个很好的过渡。本节为大家介绍系统调用、POSIX、C库、系统命令和内核函数。 5.1.1 系统调用、POSIX、C库、系统命令和内核函数(1)系统调用和POSIX。系统调用虽然是内核和用户应用程序之间的沟通桥梁,是用户应用程序访问内核的入口点,但通常情况下,应用程序是通过操作系统提供的应用编程接口(API)而不是直接通过系统调用来编程。操作系统API的主要作用是把操作系统的功能完全展示出来,提供给应用程序,基于该操作系统,与文件、内存、时钟、网络、图形、各种外设等互操作的能力。此外,操 阅读全文
posted @ 2011-08-13 12:36 Mr.Rico 阅读 (2439) | 评论 (0) 编辑