Linux平台C及C++软件开发入门_第1页
Linux平台C及C++软件开发入门_第2页
Linux平台C及C++软件开发入门_第3页
Linux平台C及C++软件开发入门_第4页
Linux平台C及C++软件开发入门_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Linux平台C及C+软件开发入门邢延超2009年秋季学期主要内容 Linux操作系统的安装及使用 gcc、gdb及makefile文件 内存分配与函数调用 文件和目录操作 网络编程基础 多线程编程 进程间通信Linux操作系统 操作系统属性 基本的系统软件,是硬件的第一级扩充 基本特征 多任务并行:分时服务 资源共享 使用用户可以充分地利用系统资源 用户可忽略硬件设备控制细节,只需提出要求 操作系统负责操纵设备以完成所希望的工作 资源分配策略(如根据优先级) 通过控制、调度、分配、管理计算机系统资源,达到对计算机的自动控制操作系统主要功能 存贮管理 为每个程序分配足够的存贮空间 CPU管理

2、为程序分配优先级 采用一定调度方法,以时间片轮转方式轮流占用CPU 设备管理 控制外部设备的操作 在多个作业间分配设备 独占设备,如打印机 按一定策略轮流分配给用户使用 共享设备:磁盘阵列 文件管理 文件的建立、删除、读取、或写入等方面的服务 进程与线程管理、调度等Linux的发展 1991年8月,核心由25岁的芬兰大学生Linus Torvalds发布 Linux=Linus+Minix(Linux编写的类似Minix的系统) MinixMini UNIX,约300MB(还有Idris,Coherent,Uniflex等) 都是重新发展的,并没有使用任何AT&T的程序码 发布到Int

3、ernet上后不断修改和完善,几年后在全球普及 应用平台 最初针对的是Intel构架的个人计算机 在服务器领域:Sun公司的Sparc工作站、DEC公司的Alpha工作站等 嵌入式开发方面具有无可比拟的优势 特色 源代码是自由分发的,完全公开,完全免费 涵盖了Unix的所有特诊,融合了其它OS的东西 真正的多任务、虚拟存储、快速的TCP/IP实现、共享库、多用户、支持32位和64位多任务 Linux应用逐渐普及 服务器 家庭机Linux操作系统的特点 内核特点:短小精悍,具有更高的灵活性和适应性 最大特点:源代码完全公开(核心、驱动,应用程序等) 主要特点 (1)多用户、多任务的操作系统 多个

4、用户可以同时在相同计算机上操作(通过终端或虚拟控制台) 可同时执行多个进程,提供了进程间通信方式,使各进程能协同工作 具有进程间内存地址保护(当某个进程出错时,不会波及整个系统) (2)支持多种文件系统 Ext2FS、ISOFS、Minix、Xenix、FAT16、FAT32、NTFS等 自己还有一个先进的文件系统(4TB) KiloByte MegaByte GigaByte TeraByte (万亿) (3)符合POSIX 1003.1标准 能够使用Unix等OS上丰富的应用程序 (4)较好的可移植性 只有小于10的源代码采用汇编语言编写,其余均采用C (5)支持多平台和多处理器 (6)全

5、面支持TCP/IP网络协议 TCP、IPv4、IPX、DDP、AX.25等Linux 与 Windows 的不同 Linux 的应用目标是网络而不是打印 纯文本易于跨网络工作,Linux 配置文件和数据都以文本为基础 Linux开发更多关注的是其内在功能而非表面的东西 图形环境并没有集成到 Linux 中 是运行于系统之上的单独一层,可选择 Linux不使用文件名扩展来识别文件的类型 Linux通过文件访问权限来判断文件是否为可执行文件 一旦开始运行将保持运行状态,直到受到外来因素的影响 除了Linux内核之外,其他软件的安装、启动、停止和重新配置都不用重新引导系统 可以远程地完成Linux中

6、的很多工作 如果系统中一个特定的服务出现了问题,可以在进行故障诊断的同时让其他服务继续运行 命令区分大小写 用户操作没有Windows系列方便Linux系统的安装 一般安装 分配单独的硬盘分区;设置为Linux支持的硬盘格式 虚拟机安装 定义:软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统 可以在一台物理计算机上模拟出一台或多台虚拟的计算机 完全就像真正的计算机那样进行工作 安装操作系统、安装应用程序、访问网络资源等 对用户,虚拟机只是运行在物理计算机上的一个应用程序 对虚拟机中运行的应用程序,它就像是一个真正的计算机 虚拟机中发生的系统崩溃只是虚拟机上的操作系统

7、不是物理计算机上的操作系统 使用 “Undo” 功能,可以马上恢复虚拟机到安装软件前的状态 当前主流虚拟机 VMware(VMWare ACE) 在多操作系统支持和执行效率上都明显高出一筹 Virtual PCLinux的使用1 图形化界面 Mozilla、文本编辑器、目录管理器、CD播放器 控制台控制台 文本界面 高效 开发 系统管理 目录结构 惟一根目录 权限设置 文件 PATH变量Linux的使用2 部分Linux命令的简单介绍 man pwd ls cp mv chmod cd echo mkdir rm su netstatLinux的使用3 系统管理员 构建各种服务器 用户管理 系

8、统运行情况监测 服务器被攻击 开发人员 图形化开发工具(如Qt) 非图形化开发工具(gcc) 一般用户 很多时候利用图形化界面完成工作 娱乐 文档编辑 上网gcc及其使用 GNU之父Stallman开发的Linux下的编译器 GCCGNU Compiler Collection 目前可以编译的语言 C, C+, Objective-C, Fortran, Java, and Ada 从源文件到可执行文件 gcc -E 完成预处理,输出域名(展开) #include; #define; etc gcc -s 不进行汇编,只生成汇编语言 某些代码直接就是用汇编写的 gcc -c 将原文件编程.o文

9、件(即二进制文件) 仍然不可执行,为什么? gcc -o 指定输出文件的名字,重新命名 不加-o,输出a.outmakefile - 1 “自动化编译”,提高效率 写好后,只需调用make,整个工程完全自动编译 大多数的IDE都有这个命令 Delphi的make Visual C+的nmake Linux下GNU的make Make工具最主要也是最基本的功能 通过makefile文件来描述源程序之间的相互关系 自动维护编译工作 makefile 文件需要按照某种语法进行编写 说明如何编译各个源文件并连接生成可执行文件 定义源文件之间的依赖关系 -f选项 缺省文件名为Makefile或makef

10、ile make f MyMakefilemakefile - 2 #It is a example for describing makefile prog : filea.o fileb.o filec.o cc filea.o fileb.o filec.o -LS -o prog filea.o : filea.c a.h defs cc -c filea.c fileb.o : fileb.c b.h defs cc -c fileb.c filec.o : filec.c c.h cc -c filec.c 注1:一定要用Tab键 注2:目标vs依赖关系(最小重建)makefile

11、 - 3 Makefile中的宏定义 OBJECTS= filea.o fileb.o filec.o LIBES= -LS prog: $(OBJECTS) cc $(OBJECTS) $(LIBES) -o prog GNU make 的主要预定义变量 $*:不包含扩展名的目标文件名称 $+:所有依赖文件(可重复),空格分开,以出现先后为序 $:第一个依赖文件的名称 $?:所有依赖文件,空格分开,修改日期比目标创建日期晚 $:目标的完整名称 $:所有依赖文件,以空格分开,不包含重复的依赖文件 $%:若目标是归档成员,则该变量表示目标的归档成员名称makefile - 4 Makefile中

12、定义模式规则 使用模式规则来定义一个隐含规则 把所有的.c文件都编译成.o文件 %.o : %.c $(CC) -c $(CFLAGS) $(CPPFLAGS) $ -o $ 取消内建的隐含规则,只要不在后面写命令就行 %.o : %.s -l(小L)参数 添加库文件 -I(大i)参数 添加include文件路径gdb的使用1 GDB主要完成下面四个方面的功能 启动程序,按照自定义的要求随心所欲地运行程序 设置断点(断点可以是条件表达式) 程序停住时,可以检查此时程序中所发生的事 动态改变程序的执行环境(变量值等) 使用条件 编译时要设置-g参数 编译结果包含调试信息 使用方式 利用gdb启动

13、程序 指定进程ID,gdb自动attach上去并调试 同时调试一个运行程序和core文件gdb的使用2 1、使用gdb启动程序 gdb myprogram 2、设置断点(breakpointb) (gdb) b filename:line-number (gdb) b filename:function-name (gdb) b 46 if testsize=100 (当前文件的46行) 3、开始执行(runr) 4、变量的检查和赋值 whatis:识别数组或变量的类型 ptype:比whatis的功能更强,可以提供一个结构的定义 set variable:将值赋予变量 print :显示一个

14、变量的值外;还可以用来赋值gdb的使用3 5、继续执行(continuec) 6、单步执行 next(n):不进入的单步执行 step (s):进入的单步执行 finish:想退出该函数返回到它的调用函数中 7、函数的调用 (gdb) call gen_and_sork( 1234,1,0 ) 8、显示数据 (gdb) print p (p为变量名) (gdb) print find_entry(1,0) 9、程序参数 (gdb)set args b x (gdb) show args 10、断点管理 (gdb) info break (gdb) delete breakpoint 1 (gd

15、b) disable/enable breakpoint 1变量的作用域与内存分配 全局变量 临时变量 类成员(C+) namespace 内存分配原则 全局变量存放在数据区 局部变量存放在栈区 动态变量存放在堆区 栈 是系统提供并管理,快速高效,无须释放(自动释放) 对进程/线程是惟一的 普通的栈数据结构,LIFO 局部变量安排在那里,可以在一个函数结束后平衡堆栈 缺点是有限制,数据不灵活变量的作用域与内存分配 堆(动态区) 函数库提供,灵活方便,数据适应面广泛程序员管理 对进程/线程不一定唯一 程序编译时产生的一块用于产生动态内存分配使用的块 操作比栈麻烦,分配和回收时的效率比栈低 分配时

16、要判断最优地址:防止产生无用的内存碎片内存碎片 需要精确的申请内存/ 释放内存匹配 分静态分配 编译器完成的,比如自动变量(auto)的分配 动态分配 由alloc函数完成 栈的动态分配无需释放(是自动的) 静态变量(static) 作用域可以是局部的 静态区的一次存取(具有记忆性)堆栈区别的小结 使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小 使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大 虽然堆栈、堆栈的说法是连起来叫,但是他们还是有很大区

17、别的,连着叫只是由于历史的原因函数调用的过程 压入参数压入参数 将调用者给出的参数一一压入堆栈将调用者给出的参数一一压入堆栈 压入断点压入断点 程序执行到程序执行到Call指令时,当前语句地址作为断点地址压入堆栈指令时,当前语句地址作为断点地址压入堆栈 跳转跳转 当前指令下一条指令的地址被重设为被调函数的起始地址当前指令下一条指令的地址被重设为被调函数的起始地址 堆栈中已分配给局部变量的内存空间的初始化堆栈中已分配给局部变量的内存空间的初始化 顺序执行函数内语句顺序执行函数内语句 此时此时函数的堆栈位于所有局部变量的内存空间之后函数的堆栈位于所有局部变量的内存空间之后 返回返回 为保障调用的正常返回,函数内应当保证规范使用堆栈为保障调用的正常返回,函数内应当保证规范使用堆栈 使即将返回的时候使即将返回的时候“下一条指令地址下一条指令地址” 值恢复为执行第一条语句前值恢复为执行第一条语句前的状态的状态 每一条每一条push都要有相应的都要有相应的pop 为什么值参的修改不起作用?为什么值参的修改不起作用?编程辅助工具 版本管理 CVS:Concurrent Version System VSS:Visual Source

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论