第3章 Linux下的C编程基础《嵌入式Linux应用程序开发详.pdf
《第3章 Linux下的C编程基础《嵌入式Linux应用程序开发详.pdf》由会员分享,可在线阅读,更多相关《第3章 Linux下的C编程基础《嵌入式Linux应用程序开发详.pdf(39页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 嵌入式 LINUX 应用程序开发详解 作者:华清远见 第第 3 章章 Linux 下的下的 C 编程基础编程基础 本章目标 在熟悉了 Linux 常见命令,能够在 Linux 中熟练操作之后,本章将带领读者学习在 Linux 中进行 C 语言编程的基本技能。学习了本章后,读者能够掌握如下内容。熟悉 Linux 系统下的开发环境 熟悉 Vi 的基本操作 熟练 Emacs 的基本操作 熟悉 Gcc 编译器的基本原理 熟练使用 Gcc 编译器的常用选项 熟练使用 Gdb 调试技术 熟悉 Makefile 基本原理及语法规范 熟练使用 autoconf 和 automake 来生成 Makefile
2、 专业始于专注 卓识源于远见 2 3.1 Linux 下下 C 语言编程概述语言编程概述 3.1.1 C 语言简单回顾语言简单回顾 C 语言最早是由贝尔实验室的 Dennis Ritchie 为了 UNIX 的辅助开发而编写的,它是在 B 语言的基础上开发出来的。尽管语言不是专门针对 UNIX 操作系统或机器编写的,但它与 UNIX 系统的关系十分紧密。由于它的硬件无关性和可移植性,使 C 语言逐渐成为世界上使用最广泛计算机语言。为了进一步规范 C 语言的硬件无关性,1987 年,美国国家标准协会(ANSI)根据 C 语言问世以来各种版本对 C 语言的发展和扩充,制定了新的标准,称为 ANSI
3、 C。ANSI C 语言比原来的标准 C 语言有了很大的发展。目前流行的 C 语言编译系统都是以它为基础的。C 语言的成功并不是偶然的,它强大的功能和它的可移植性让它能在各种硬件平台上游刃自如。总体而言,C 语言有如下特点。C 语言是“中级语言”。它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。C 语言是结构化的语言。C 语言采用代码及数据分隔,使程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C 语言是以函数形式提供给用户的,这些函数可方便地调用,
4、并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。C 语言功能齐全。C 语言具有各种各样的数据类型,并引入了指针概念,可使程序效率更高。另外,C语言也具有强大的图形功能,支持多种显示器和驱动器,而且计算功能、逻辑判断功能也比较强大,可以实现决策目的。C 语言可移植性强。C 语言适合多种操作系统,如 DOS、Windows、Linux,也适合多种体系结构,因此尤其适合在嵌入式领域的开发。3.1.2 Linux 下下 C 语言编程环境概述语言编程环境概述 Linux 下的 C 语言程序设计与在其他环境中的 C 程序设计一样,主要涉及到编辑器、编译链接器、调试器及项目管理工具。现在我们先对
5、这 4 种工具进行简单介绍,后面会对其一一进行讲解。(1)编辑器 Linux 下的编辑器就如 Windows 下的 word、记事本等一样,完成对所录入文字的编辑功能。Linux 中最常用的编辑器有 Vi(Vim)和 Emacs,图 3.1 编译过程 专业始于专注 卓识源于远见 3 它们功能强大,使用方便,广受编程爱好者的喜爱。在本书中,着重介绍 Vi 和 Emacs。(2)编译链接器 编译是指源代码转化生成可执行代码的过程,它所完成工作主要如图 3.1 所示。可见,在编译过程是非常复杂的,它包括词法、语法和语义的分析、中间代码的生成和优化、符号表的管理和出错处理等。在 Linux 中,最常用
6、的编译器是 Gcc 编译器。它是 GNU 推出的功能强大、性能优越的多平台编译器,其执行效率与一般的编译器相比平均效率要高 20%30%,堪称为 GNU 的代表作品之一。(3)调试器 调试器并不是代码执行的必备工具,而是专为程序员方便调试程序而用的。有编程经验的读者都知道,在编程的过程当中,往往调试所消耗的时间远远大于编写代码的时间。因此,有一个功能强大、使用方便的调试器是必不可少的。Gdb 是绝大多数 Linux 开发人员所使用的调试器,它可以方便地设置断点、单步跟踪等,足以满足开发人员的需要。(4)项目管理器 Linux 中的项目管理器“make”有些类似于 Windows 中 Visua
7、l C+里的“工程”,它是一种控制编译或者重复编译软件的工具,另外,它还能自动管理软件编译的内容、方式和时机,使程序员能够把精力集中在代码的编写上而不是在源代码的组织上。3.2 进入进入 Vi Linux 系统提供了一个完整的编辑器家族系列,如 Ed、Ex、Vi 和 Emacs 等。按功能它们可以分为两大类:行编辑器(Ed、Ex)和全屏幕编辑器(Vi、Emacs)。行编辑器每次只能对一行进行操作,使用起来很不方便。而全屏幕编辑器可以对整个屏幕进行编辑,用户编辑的文件直接显示在屏幕上,从而克服了行编辑的那种不直观的操作方式,便于用户学习和使用,具有强大的功能。Vi 是 Linux 系统的第一个全
8、屏幕交互式编辑程序,它从诞生至今一直得到广大用户的青睐,历经数十年仍然是人们主要使用的文本编辑工具,足以见其生命力之强,而强大的生命力是其强大的功能带来的。由于大多数读者在此之前都已经用惯了 Windows 的 word 等编辑器,因此,在刚刚接触时总会或多或少不适应,但只要习惯之后,就能感受到它的方便与快捷。3.2.1 Vi 的模式的模式 Vi 有 3 种模式,分别为命令行模式、插入模式及命令行模式各模式的功能,下面具体进行介绍。(1)命令行模式 用户在用 Vi 编辑文件时,最初进入的为一般模式。在该模式中可以通过上下移动光标进行“删除字符”或“整行删除”等操作,也可以进行“复制”、“粘贴”
9、等操作,但无法编辑文字。(2)插入模式 只有在该模式下,用户才能进行文字编辑输入,用户课按ESC键回到命令行模式。(3)底行模式 在该模式下,光标位于屏幕的底行。用户可以进行文件保存或退出操作,也可以设置编辑环境,如寻找字符串、列出行号等。3.2.2 Vi 的基本流程的基本流程(1)进入 Vi,即在命令行下键入 Vi hello(文件名)。此时进入的是命令行模式,光标位于屏幕的上方,如图 3.2 所示。专业始于专注 卓识源于远见 4 (2)在命令行模式下键入 i 进入到插入模式,如图 3.3 所示。可以看出,在屏幕底部显示有“插入”表示插入模式,在该模式下可以输入文字信息。图 3.2 进入 V
10、i 命令行模式 图 3.3 进入 Vi 插入模式(3)最后,在插入模式中,输入“Esc”,则当前模式转入命令行模式,并在底行行中输入“:wq”(存盘退出)进入底行模式,如图 3.4 所示。这样,就完成了一个简单的 Vi 操作流程:命令行模式插入模式底行模式。由于 Vi 在不同的模式下有不同的操作功能,因此,读者一定要时刻注意屏幕最下方的提示,分清所在的模式。专业始于专注 卓识源于远见 5 图 3.4 进入 Vi 底行模式 3.2.3 Vi 的各模式功能键的各模式功能键(1)命令行模式常见功能键如表 3.1 所示。表 3.1 Vi 命令行模式功能键 目 录 目 录 内 容 I 切换到插入模式,此
11、时光标当于开始输入文件处 A 切换到插入模式,并从目前光标所在位置的下一个位置开始输入文字 O 切换到插入模式,且从行首开始插入新的一行 ctrl+b 屏幕往“后”翻动一页 ctrl+f 屏幕往“前”翻动一页 ctrl+u 屏幕往“后”翻动半页 ctrl+d 屏幕往“前”翻动半页 0(数字 0)光标移到本行的开头 G 光标移动到文章的最后 nG 光标移动到第 n 行$移动到光标所在行的“行尾”n 光标向下移动 n 行/name 在光标之后查找一个名为 name 的字符串?name 在光标之前查找一个名为 name 的字符串 X 删除光标所在位置的“后面”一个字符 X 删除光标所在位置的“前面”
12、一个字符 专业始于专注 卓识源于远见 6 dd 删除光标所在行 ndd 从光标所在行开始向下删除 n 行 yy 复制光标所在行 nyy 复制光标所在行开始的向下 n 行 p 将缓冲区内的字符粘贴到光标所在位置(与 yy 搭配)U 恢复前一个动作 (2)插入模式的功能键只有一个,也就是 Esc 退出到命令行模式。(3)底行模式常见功能键如表 3.2 所示。表 3.2 Vi 底行模式功能键 目 录 目 录 内 容:w 将编辑的文件保存到磁盘中:q 退出 Vi(系统对做过修改的文件会给出提示):q!强制退出 Vi(对修改过的文件不作保存):wq 存盘后退出:w filename 另存一个命为 fil
13、ename 的文件:set nu 显示行号,设定之后,会在每一行的前面显示对应行号:set nonu 取消行号显示 注意 Vi 的升级版 Vim 已经问世了,功能相当强大,且保持与 Vi 的 90%相兼容,因此,感兴趣的读者可以查看相关资料进行学习。3.3 初探初探 Emacs 正如前面所述,Vi 是一款功能非常强大的编辑器,它能够方便、快捷、高效地完成用户的任务,那么,在此再次向读者介绍另一款编辑器是否多此一举呢?答案是否定的。因为 Emacs 不仅仅是一款功能强大的编译器,而且是一款融合编辑、编译、调试于一体的开发环境。虽然,它没有 Visual Sdiao一样绚丽的界面,但是它可以在没有
14、图形显示的终端环境下出色的工作,相信追求强大功能和工作效率的任务并不会介意它朴素的界面的。Emacs 的使用和 Vi 截然不同。在 Emacs 里,没有类似于 Vi 的 3 种“模式”。Emacs 只有一种模式,也就是编辑模式,而且它的命令全靠功能键完成。因此,功能键也就相当重要了。但 Emacs 却还使用一个不同 Vi 的“模式”,它的“模式”是指各种辅助环境。比如,当编辑普通文本时,使用的是“文本模式(Txt Mode)”,而当他们写程序时,使用的则是如“c 模式”、“Shell 模式”等。下面,首先来介绍一下 Emacs 中作为编辑器的使用方法,以帮助读者熟悉 Emacs 的环境。注释
15、Emacs 缩写注释:C-表示按住 Ctrl 键的同时键入字符。因此,C-f 就表示按住 Ctrl 键同时键入 f。M-表示当键入字符时同时按住 Meta 或 Edit 或 Alt 键(通常为 Alt 键)。3.3.1 Emacs 的基本操作的基本操作 1Emacs 安装安装 专业始于专注 卓识源于远见 7 现在较新版本的 Linux(如本书中所用的 Red Hat Enterprise 4 AS)的安装光盘中一般都自带有 Emacs 的安装包,用户可以通过安装光盘进行安装(一般在第 2 张光盘中)。2启动启动 Emacs安装完 Emacs 之后,只需在命令行键入“emacs 文件名”(若缺省
16、文件名,也可在 emacs 编辑文件后另存时指定),也可从“编程”“emacs”打开,3.5 图中所示的就是从“编程”“emacs”打开的 Emacs 欢迎界面。图 3.5 Emacs 欢迎界面 接着可单击任意键进入 Emacs 的工作窗口,如图 3.6 所示。从图中可见,Emacs 的工作窗口分为上下两个部分,上部为编辑窗口,底部为命令显示窗口,用户执行功能键的功能都会在底部有相应的显示,有时也需要用户在底部窗口输入相应的命令,如查找字符串等。图 3.6 Emacs 的工作窗口 3进入进入 Emacs 专业始于专注 卓识源于远见 8 在进入 Emacs 后,即可进行文件的编辑。由于 Emac
17、s 只有一种编辑模式,因此用户无需进行模式间的切换。下面介绍 Emacs 中基本编辑功能键。(1)移动光标 虽然在 Emacs 中可以使用“上”、“下”、“左”、“右”方向键来移动单个字符,但笔者还是建议读者学习其对应功能键,因为它们不仅能在所有类型的终端上工作,而且读者将会发现在熟练使用之后,输入这些Ctrl 加字符会比按方向键快很多。下表 3.3 列举了 Emacs 中光标移动的常见功能键。表 3.3 Emacs 光标移动功能键 目 录 目 录 内 容 目 录 目 录 内 容 C-f 向前移动一个字符 M-b 向后移动一个单词 C-b 向后移动一个字符 C-a 移动到行首 C-p 移动到上
18、一行 C-e 移动到行尾 C-n 移动到下一行 M-(M 加“大于号”)移动光标到整个文本的末尾 (2)剪切和粘贴 在 Emacs 中可以使用“Delete”和“BackSpace”删除光标前后的字符,这和用户之前的习惯一致,在此就不赘述。以词和行为单位的剪切和粘贴功能键如表 3.4 所示。表 3.4 Emacs 剪切和粘贴 目 录 目 录 内 容 目 录目 录 内 容 M-Delete 剪切光标前面的单词 M-k 剪切从光标位置到句尾的内容 M-d 剪切光标前面的单词 C-y 将缓冲区中的内容粘贴到光标所在的位置 C-k 剪切从光标位置到行尾的内容 C-x u 撤销操作(先操作 C-x,接着
19、再单击 u)注意 在 Emacs 中对单个字符的操作是“删除”,而对词和句的操作是“剪切”,即保存在缓冲区中,以备后面的“粘贴”所用。(3)复制文本 在 Emacs 中的复制文本包括两步:选择复制区域和粘贴文本。选择复制区域的方法是:首先在复制起始点(A)按下“C-Spase”或“C-(C-Shift-2)”使它成为一个表示点,再将光标移至复制结束电(B),再按下“M-w”,就可将 A 与 B 之间的文本复制到系统的缓冲区中。在使用功能键 C-y 将其粘贴到指定位置。(4)查找文本 查找文本的功能键如表 3.5 所示。表 3.5 Emacs 查找文本功能键 目 录 目 录 内 容 C-s 查找
20、光标以后的内容,并在对话框的“I-search:”后输入查找字符串 C-r 查找光标以前的内容,并在对话框的“I-search backward:”后输入查找字符串 (5)保存文档 在 Emacs 中保存文档的功能键为“C-x C-s”(即先操作 C-x,接着再操作 C-s),这时,屏幕底下的对话框会出现如“Wrote/root/workplace/editor/why”字样,如图 3.7 所示。专业始于专注 卓识源于远见 9 图 3.7 Emacs 中保存文档 另外,Emacs 在编辑时会为每个文件提供“自动保存(auto save)”的机制,而且自动保存的文件的文件名前后都有一个“#”,例
21、如,编辑名为“hello.c”的文件,其自动保存的文件的文件名就叫“#hello.c#”。当用户正常的保存了文件后,Emacs 就会删除这个自动保存的文件。这个机制当系统发生异常时非常有用。(6)退出文档 在 Emacs 中退出文档的功能键为“C-x C-c”。3.3.2 Emacs 的编译概述的编译概述 正如本节前面所提到的,Emacs 不仅仅是个强大的编译器,它还是一个集编译、调试等于一体的工作环境。在这里,读者将会了解到Emacs作为编译器的最基本的概念,感兴趣的读者可以参考 Learning GNU Emacs,Second Edition一书进一步深入学习 Emacs。1Emacs
22、中的模式中的模式正如本节前面提到的,在 Emacs 中并没有像 Vi 中那样的“命令行”、“编辑”模式,只有一种编辑模式。这里所说的“模式”,是指 Emacs 里的各种辅助环境。下面就着重了解一下 C 模式。当我们启动某一文件时,Emacs 会判断文件的类型,从而自动选择相应的模式。当然,用户也可以手动启动各种模式,用功能键“M-x”,然后再输入模式的名称,如图所示 3.8 所示就启动了“C 模式”。图 3.8 Emacs 中选择模式 专业始于专注 卓识源于远见 10 在强大的 C 模式下,用户拥有“自动缩进”、“注释”、“预处理扩展”、“自动状态”等强大功能。在“C 模式”下编辑代码时,可以
23、用“Tab”键自动的将当前行的代码产生适当的缩进,使代码结构清晰、美观,它也可以指定缩进的规则。源代码要有良好可读性,必须要有良好的注释。在 Emacs 中,用“M-”可以产生一条右缩进的注释。C 模式下是“/*comments*/”形式的注释,C+模式下是“/comments”形式的注释。当用户高亮选定某段文本,然后操作“C-c C-c”,就可以注释该段文字。Emacs 还可以使用 C 预处理其运行代码的一部分,以便让程序员检测宏、条件编译以及 include 语句的效果。2Emacs 编译调试程序编译调试程序Emacs 可以让程序员在Emacs 环境里编译自己的软件。此时,编辑器把编译器的
24、输出和程序代码连接起来。程序员可以像在Windows 的其他开发工具一样,将出错位置和代码定位联系起来。Emacs默认的编辑命令是对一个make(在本章3.6节中会详细介绍)的调用。用户可以打开“tool”下的“Compile”进行查看。Emacs 可以支持大量的工程项目,以方便程序员的开发。另外,Emacs 为 Gdb 调试器提供了一个功能齐全的接口。在 Emacs 中使用 Gdb 的时候,程序员不仅能够获得 Gdb 用其他任何方式运行时所具有的全部标准特性,还可以通过接口增强而获得的其他性能。3.4 Gcc 编译器编译器 GNU CC(简称为 Gcc)是 GNU 项目中符合 ANSI C
25、标准的编译系统,能够编译用 C、C+和 Object C 等语言编写的程序。Gcc 不仅功能强大,而且可以编译如 C、C+、Object C、Java、Fortran、Pascal、Modula-3和 Ada 等多种语言,而且 Gcc 又是一个交叉平台编译器,它能够在当前 CPU 平台上为多种不同体系结构的硬件平台开发软件,因此尤其适合在嵌入式领域的开发编译。本章中的示例,除非特别注明,否则均采用 Gcc 版本为 4.0.0。下表 3.6 是 Gcc 支持编译源文件的后缀及其解释。表 3.6 Gcc 所支持后缀名解释 后 缀 名 所对应的语言 后 缀 名 所对应的语言.c C 原始程序.s/.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第3章 Linux下的C编程基础嵌入式Linux应用程序开发详 Linux 编程 基础 嵌入式 应用程序 开发
限制150内