第9章 Linux程序设计基础 本章学习目标 通过对本章的学习,读者应该掌握以 下主要内容 0 Linux编程风格 0 Linux下IDE的使用 0 Linux下使用 GNU cC开发应用程序 o Linux程序的调试 o Linux下使用RCS/CVS来管理源程序 o Linux下软件打包
第9章 Linux程序设计基础 本章学习目标 通过对本章的学习,读者应该掌握以 下主要内容: Ø Linux编程风格 Ø Linux下IDE的使用 Ø Linux下使用GNU cc开发应用程序 Ø Linux程序的调试 Ø Linux下使用RCS/CVS来管理源程序 Ø Linux下软件打包
91概述 9.1.1 Linux编程 Linux软件开发一直在 Internet环境下讲行。这个环境 是全球性的,编程人员来自世界各地。只要能够访问Web 站点,就可以启动一个以 Linux为基础的软件项目。 Linux开发工作经常是在 Linux用户决定共同完成一个项 目时开始的。当开发工作完成后,该软件就被放到 Internet站点上,任何用户都可以访问和下载它。由于 这个活跃的开发环境,新的以 Linux为基础的软件功能日 益强大,而且呈现爆炸式的增长态势。 大多数 Linux软件是经过自由软件基金会(Free Software foundation)提供的GNU(GNU即GNU'snot UNIX)公开认证授权的,因而通常被称作GNU软件。GNU 软件免费提供给用户使用,并被证明是非常可靠和高效 的。许多流行的 Linux实用程序如C编译器、 shelli和编辑 器都是GNU软件应用程序
9.1 概述 9.1.1 Linux编程 Linux软件开发一直在Internet环境下讲行。这个环境 是全球性的,编程人员来自世界各地。只要能够访问Web 站点,就可以启动一个以Linux为基础的软件项目。 Linux开发工作经常是在Linux用户决定共同完成一个项 目时开始的。当开发工作完成 后,该软件就被放 到 Internet站点上,任何用户都可以访问和下载它。由于 这个活跃的开发环境,新的以Linux为基础的软件功能日 益强大,而且呈现爆炸式的增长态势。 大多数Linux软件是经过自由软件基金会(Free Software Foundation)提供的GNU(GNU 即 GNU’s not UNIX)公开认证授权的,因而通常被称作GNU软件。GNU 软件免费提供给用户使用,并被证明是非常可靠和高效 的。许多流行的Linux实用程序如C编译器、shell和编辑 器都是GNU软件应用程序
Linux程序需要首先转化为低级机器语言即所谓的二进 制代码以后,才能被操作系统执行。例如编程时,先用普 通的编程语言生成一系列指令,这些指令可被翻译为适 的可执行应用程序的二进制代码。这个翻译过程可由解释 器一步步来完成,或者也可以立即由编译器明确地完成。 she编程语言如BASH、TCSH、GAWK、Pe、Tcl和πk都利用 自己的解释器。用这些语言编制的程序尽管是应用程序文 件,但可以直接运行。编译器则不同,它将生成一个独 的二进制代码文件然后才可以运行
Linux程序需要首先转化为低级机器语言即所谓的二进 制代码以后,才能被操作系统执行。例如编程时,先用普 通的编程语言生成一系列指令,这些指令可被翻译为适当 的可执行应用程序的二进制代码。这个翻译过程可由解释 器一步步来完成,或者也可以立即由编译器明确地完成。 shell编程语言如BASH、TCSH、GAWK、Perl、Tcl和Tk都利用 自己的解释器。用这些语言编制的程序尽管是应用程序文 件,但可以直接运行。编译器则不同,它将生成一个独立 的二进制代码文件然后才可以运行
9.12 Linux编程风格 1.GNU风格 (1)函数返回类型说明和函数名分两行放置,函数起始字符和函数 开头左花括号放到最左边 2)尽量不要让两个不同优先级的操作符出现在相同的对齐方式中, 应该附加额外的括号使得代码缩进可以表示出嵌套 (3)按照如下方式排版do- while语句: (4)每个程序都应该以一段简短的说明其功能的注释开头 (5)请为每个函数书写注释,说明函数是做什么的,需要哪些入口 参数,参数可能值的含义和用途。如果用了非常见的、非标准的东西, 或者可能导致函数不能工作的任何可能的值,应该进行特殊说明。如 果存在重要的返回值,也需要说明。 6)不要声明多个变量时跨行,每一行都以一个新的声明开头。 (7)当一个中嵌套了另一个ese时,应用花括号把iese括起来 (8)要在同一个声明中同时说明结构标识和变量或者结构标识和类 型定义( typedef)。先定义变量,再使用
9.1.2 Linux编程风格 (1)函数返回类型说明和函数名分两行放置,函数起始字符和函数 开头左花括号放到最左边。 (2)尽量不要让两个不同优先级的操作符出现在相同的对齐方式中, 应该附加额外的括号使得代码缩进可以表示出嵌套。 (3)按照如下方式排版do-while语句: (4)每个程序都应该以一段简短的说明其功能的注释开头。 (5)请为每个函数书写注释,说明函数是做什么的,需要哪些入口 参数,参数可能值的含义和用途。如果用了非常见的、非标准的东西, 或者可能导致函数不能工作的任何可能的值,应该进行特殊说明。如 果存在重要的返回值,也需要说明。 (6)不要声明多个变量时跨行,每一行都以一个新的声明开头。 (7)当一个if中嵌套了另一个if-else时,应用花括号把if-else括起来。 (8)要在同一个声明中同时说明结构标识和变量或者结构标识和类 型定义(typedef)。先定义变量,再使用。 1.GNU风格
(9)尽量避免在if的条件中进行赋值 (10)请在名字中使用下划线以分割单词,尽量使用小写;把大写字 母留给宏和枚举常量,以及根据统一惯例使用的前缀。例如,应该使 用类似 ignore space change flag的名字;不要使用类似 i CantReadThis的名字。 11)用于表明一个命令行选项是否给出的变量应该在选项含义的说 明之后,而不是选项字符之后被命名。 2. Linux内核编程风格 (1)Linx内核缩进风格是8个字符 (2) Linux内核风格采用K&R标准,将开始的大括号放在一行的最后, 而将结束的大括号放在一行的第一位 (3)命名尽量简洁。不应该使用诸如 Thisvariablelsatemporary Counter之类的名字。应该命名为tmp,这 样容易书写,也不难理解。但是命名全局变量,就应该用描述性命名 方式,例如应该命名“ count active users0”,而不是“ catus0”。 本地变量应该避免过长
(9)尽量避免在if的条件中进行赋值。 (10)请在名字中使用下划线以分割单词,尽量使用小写;把大写字 母留给宏和枚举常量,以及根据统一惯例使用的前缀。例如,应该使 用类似ignore_space_change_flag的名字;不要使用类似 iCantReadThis的名字。 (11)用于表明一个命令行选项是否给出的变量应该在选项含义的说 明之后,而不是选项字符之后被命名。 2.Linux 内核编程风格 (1)Linux内核缩进风格是8个字符。 (2)Linux内核风格采用K&R标准,将开始的大括号放在一行的最后, 而将结束的大括号放在一行的第一位。 (3)命名尽量简洁。不应该使用诸如 ThisVariableIsATemporaryCounter之类的名字。应该命名为tmp,这 样容易书写,也不难理解。但是命名全局变量,就应该用描述性命名 方式,例如应该命名“count_active_users()”,而不是“cntusr()”。 本地变量应该避免过长
(4)函数最好短小精悍,一般来说不要让函数的参数多于10个 否则应该尝试分解这个过于复杂的函数 (5)通常情况,注释说明代码的功能,而不是其实现原理。避免把 注释插到函数体内,而写到函数前面,说明其功能,如果这个函数的 确很复杂,其中需要有部分注释,可以写些简短的注释来说明那些重 要的部分,但是不能过多。 92|DE使用 921VM编辑器 1.ⅥM的简介 Ⅵ是 Linux世界里最常用的全屏编辑器,所有的 Linux机器都提供该编 辑器,而 Linux里提供的是Ⅵ的加强版—VM,但同Ⅵ是完全兼容。Ⅵ的 原意是“ visual interface,即可视编辑器,用户键入的内容会立即被显示 出来、而且其强大的编辑功能可以同任何一种最新的编辑器相媲美。它 在inuX上的地位就仿佛Ed程序在DOS上一样。它可以执行输出、删除、 查找、替换、块操作等众多文本操作,而且用户可以根据需要对其进行 定制,这是其他编辑程序所没有的。Ⅵ不是一个排版程序,不象Wo或 WPS那样可以对字体、格式、段落等其他属性进行编排,它只是一个文 本编辑程序
(4)函数最好短小精悍,一般来说不要让函数的参数多于10个, 否则应该尝试分解这个过于复杂的函数。 (5)通常情况,注释说明代码的功能,而不是其实现原理。避免把 注释插到函数体内,而写到函数前面,说明其功能,如果这个函数的 确很复杂,其中需要有部分注释,可以写些简短的注释来说明那些重 要的部分,但是不能过多。 9.2 IDE使用 9.2.1 VIM编辑器 1.VIM的简介 VI是Linux世界里最常用的全屏编辑器,所有的Linux机器都提供该编 辑器,而Linux里提供的是VI的加强版——VIM,但同VI是完全兼容。VI的 原意是“visual interface”,即可视编辑器,用户键入的内容会立即被显示 出来、而且其强大的编辑功能可以同任何一种最新的编辑器相媲美。它 在Linux上的地位就仿佛Edit程序在DOS上一样。它可以执行输出、删除、 查找、替换、块操作等众多文本操作,而且用户可以根据需要对其进行 定制,这是其他编辑程序所没有的。VI不是一个排版程序,不象Word或 WPS那样可以对字体、格式、段落等其他属性进行编排,它只是一个文 本编辑程序
2.VIM的基本观念 VM有三种操作方式,分别是: 命令方式 插入方式 令行方式 3.VM的进入与离开 在系统提示符“$3下键入命令VIM,后面跟上想要编辑(或者建立 的文件名,VIM可以自动载入所要编辑的文件或是开启一个新文件 VIM的退出,可以在命令行方式下使用命令“:w或者“:q!”, 前者的功能是写文件并从VIM中退出,后者的功能是从VIM中退出,但不 保存所作的修改(注意冒号)
2.VIM 的基本观念 VIM有三种操作方式,分别是: •命令方式 •插入方式 •命令行方式 3.VIM的进入与离开 在系统提示符“$”下键入命令VIM,后面跟上想要编辑(或者建立) 的文件名,VIM 可以自动载入所要编辑的文件或是开启一个新文件。 VIM的退出,可以在命令行方式下使用命令“:wq”或者“:q!” , 前者的功能是写文件并从VIM中退出,后者的功能是从VIM中退出,但不 保存所作的修改(注意冒号)
4.VIM的命令方式 (1)光标移动 要对正文内容进行修改,必须先把光标移动到要修改的内容所 在的位置,用户除了通过按键盘的 左、右箭头键来移动光 标,还可以利用ⅥM提供的众多字符组合键,在正文中移动光标, 迅速达到指定的行或列,实现定位,常用的快捷键有:表91 (2)替换和删除 将光标定位于文档中指定位置后,可以用其他字符替换光标所 指向的字符,或从当前光标位置删除一个或多个字符,常用命令有: 表9-2 (3)粘贴和复制 在VIM编辑器中,与 Windows系统不同的是从正文中删除的内容 如字符、字段或行)并没有真正丢失,而是被剪贴并复制到 个内存缓冲区中,用户可将其粘贴到正文中的任意位置,完成这 操作的命令是:表9-3
4.VIM的命令方式 (1)光标移动 要对正文内容进行修改,必须先把光标移动到要修改的内容所 在的位置,用户除了通过按键盘的上、下、左、右箭头键来移动光 标,还可以利用VIM提供的众多字符组合键,在正文中移动光标, 迅速达到指定的行或列,实现定位,常用的快捷键有:表9-1 (2)替换和删除 将光标定位于文档中指定位置后,可以用其他字符替换光标所 指向的字符,或从当前光标位置删除一个或多个字符,常用命令有: 表9-2 (3)粘贴和复制 在VIM编辑器中,与Windows系统不同的是从正文中删除的内容 (如字符、字段或行)并没有真正丢失,而是被剪贴并复制到了一 个内存缓冲区中,用户可将其粘贴到正文中的任意位置,完成这一 操作的命令是:表9-3
(4)查找字符串 为了方便文档的编辑,ⅥIM提供了强大的字符串査找功能,要査 找文件中指定字符或字段出现的位置,可以用该功能直接进行搜索 搜索方法是:在命令行键入字符“/,后面加上要搜索的字符串 然后按回车键,编辑程序将执行正向搜索(从光标所在的位置向文 件末尾方向),并在找到指定字符串后,将光标停在该字符串的开 头;键入n命令可以继续执行搜索,找出这一字符串下次出现的位置, 用字符“?取代“/",可以实现反向搜索(从光标所在的位置向文 件开头方向),举例说明如下:表9-5 (5)撤销和重复 在编辑文档的过程中,可以取消错误的编辑命令造成的后果, 另外,如果用户希望在新的光标位置再次执行先前的编辑命令,可 用重复命令。表9-6
(4)查找字符串 为了方便文档的编辑,VIM提供了强大的字符串查找功能,要查 找文件中指定字符或字段出现的位置,可以用该功能直接进行搜索, 搜索方法是:在命令行键入字符“/”,后面加上要搜索的字符串, 然后按回车键,编辑程序将执行正向搜索(从光标所在的位置向文 件末尾方向),并在找到指定字符串后,将光标停在该字符串的开 头;键入n命令可以继续执行搜索,找出这一字符串下次出现的位置, 用字符“?”取代“/”,可以实现反向搜索(从光标所在的位置向文 件开头方向),举例说明如下:表9-5 (5)撤销和重复 在编辑文档的过程中,可以取消错误的编辑命令造成的后果, 另外,如果用户希望在新的光标位置再次执行先前的编辑命令,可 用重复命令。表9-6
5.VIM的插入方式 1)进入插入方式 在命令方式下正确定位光标之后,可用一下命令切换到插入方 式:表9-7 如果用户想利用已有的文件内容,可以使用命令“: filename”,则VM将指定文件的内容输入当前光标的下一行,且 VIM仍处于命令方式。 (2)退出插入方式 退出插入方式的方法是,按ESC键或组合键Ctrl+I (3)正文替换 除了几种简单的切换到插入方式的方法外,还有一些命令允许 用户在插入模式之前首先删去一段文字,从而实现正文的替换,这 些命令包括:表9-8 6.ⅥIM的命令方式 (1)行号与文件 编辑中文档的每一行正文都有隐藏的行号,用下列命令可以移 动光标到指定行:表9-9
5.VIM的插入方式 (1)进入插入方式 在命令方式下正确定位光标之后,可用一下命令切换到插入方 式:表9-7 如果用户想利用已有的文件内容,可以使用命令“ :i filename”,则VIM将指定文件的内容输入当前光标的下一行,且 VIM仍处于命令方式。 (2)退出插入方式 退出插入方式的方法是,按ESC键或组合键Ctrl+I (3)正文替换 除了几种简单的切换到插入方式的方法外,还有一些命令允许 用户在插入模式之前首先删去一段文字,从而实现正文的替换,这 些命令包括:表9-8 6.VIM的命令方式 (1)行号与文件 编辑中文档的每一行正文都有隐藏的行号,用下列命令可以移 动光标到指定行:表9-9