第7章 vi与C编程.pdf
《第7章 vi与C编程.pdf》由会员分享,可在线阅读,更多相关《第7章 vi与C编程.pdf(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1信息科学与技术学院信息科学与技术学院网络通信技术实验室网络通信技术实验室 张新有张新有Email:Phone:66365978嵌入式嵌入式Linux系统系统zhangxyCH7:vi与c编程22014/3/16第第7章章 vi与与C编程编程7 7.1 1 文本编辑器文本编辑器VimVim7 7.2 2 GccGcc的使用的使用7 7.3 3 LinuxLinux下函数库下函数库7 7.4 4 MakeMake工程管理器工程管理器7 7.5 5 符号调试器符号调试器gdbgdb7 7.6 6 文件系统程序实例文件系统程序实例(对应教材第对应教材第3 3章章)本章要点本章要点:p53p53zha
2、ngxyCH7:vi与c编程32014/3/16Linux系统下文本编辑器的使用情况:zhangxyCH7:vi与c编程42014/3/167.1 vi编辑器编辑器用户在使用计算机时,往往需要建立自己的文件,无论是一般文本文件、数据文件,还是编写的源程序文件,这些工作都离不开编辑器编辑器。Linux系统提供了一个完整的文本编辑器家族系列,如Ed、Ex、vi 和 Emacs等,按功能可以分为两大类:行编行编辑器辑器(Ed、Ex)和全屏幕编辑器和全屏幕编辑器(vi、Emacs)。行编辑器行编辑器每次只能对一行进行操作,使用起来很不方便。而全屏幕编辑器全屏幕编辑器可以对整个屏幕进行编辑,用户编辑的文
3、件直接显示在屏幕上,修改的结果可以立即看出来,便于用户学习和使用。zhangxyCH7:vi与c编程52014/3/16vi是Linux系统的第一个全屏幕交互式编辑程序,它从诞生至今一直得到广大用户的青睐,历经数十年仍然是人们主要使用的文本编辑工具,其强大的生命力是其强大的功能及高效率强大的功能及高效率带来的。1、vim简介简介vi是“visual interface”的简称。可执行输出、删除、查找、替换、块操作等众多文本操作。且用户可根据自己的需要对其进行定制,这是其他编辑程序所没有的。vi不是排版程序,它不象Word或WPS可以对字体、格式、段落等其他属性进行编排,不能“所见即所得所见即所
4、得”。它只是一个文本编辑程序文本编辑程序。zhangxyCH7:vi与c编程62014/3/16vi没有菜单,只有命令,且命令繁多。vi有三种基本工作模式:命令模式命令模式、文本输入模式文本输入模式和和末行模式末行模式。1)命令模式命令模式任何时候,只要按一下键,即可使vi进入命命令模式令模式;进入vi编辑器时,默认处于该模式下默认处于该模式下。在该模式下,用户可以输入各种合法的vi命令,用于管理自己的文档。此时从键盘上输入的任何字符都被当做编辑命令来解释。若输入的字符是合法的vi命令,则vi在接受用户命令之后完成相应的动作。但需注意的是,所输入的命令并不在屏幕上显示出来。若输入的字符不是不是
5、vi的合法命令的合法命令,vi会响铃报警。2zhangxyCH7:vi与c编程72014/3/162)文本输入模式文本输入模式在命令模式下输入插入命令i、附加命令a、打开命令 o、修改命令c、取代命令r 或替换命令s 都可以进入文本输入模式。在该模式下,用户可以输入文件的内容。用户输入的任何字符都被vi当做文件内容保存起来,并将其显示在屏幕上。在文本输入过程中,若想回到命令模式回到命令模式下,按键即可。zhangxyCH7:vi与c编程82014/3/163)末行模式末行模式在vi中,命令通常是单个键,如i。在命令模式命令模式下,用户按按“:”键即可进入末行模式键即可进入末行模式下,此时vi会
6、在屏幕的最后一行显示一个“:”作为末行模式的提示符,等待用户输入命令。多数文件管理命令都是在此模式下执行的(如把编辑缓冲区的内容写到文件中等)。末行命令执行完后,vi自动回到命令模式。可按键,或用退格键将输入的命令全部删除之后,再按一下退格键,即可使vi回到命令模式下。zhangxyCH7:vi与c编程92014/3/16Vi编辑器的三种工作模式之间的转换如下编辑器的三种工作模式之间的转换如下:若要从命令模式转换到编辑模式,键入命令a、o或i;若需要从文本模式返回,按Esc键即可。在命令模式下输入“:”即可切换到末行模式,然后输入命令。zhangxyCH7:vi与c编程102014/3/162
7、、vi的启动和退出的启动和退出1)vi的启动的启动vivi file1vi+file1 定位在最后一行vi+N file1vi+/string file12)vi的退出的退出(即可切换到末行模式即可切换到末行模式):w 或:w filename:wq:x 或:ZZ:q!或:quitzhangxyCH7:vi与c编程112014/3/163、vi命令模式命令模式的基本命令的基本命令(不回显)2)移动光标移动光标h,j,k,l-左、下、上、右Ctrl+b-往前一页Ctrl+f-往后一页G-移到文件最后w-移到下个 word 的开头b-跳至上个 wore 的开头1)插入插入i-光标前插入a-光标后插
8、入o-行下新增一空行I-插于行首A-插于行尾O-行上新增一空行zhangxyCH7:vi与c编程122014/3/163)删除删除x-删除所在位置的一个字符#x-5x 表示删除5 个字符dd-删除光标所在之行#dd-例,5dd 表删除自光标算起之5 行:1,#d-删除行1至行#的文字X-删除所在前面一个字符D-删除至行尾4)更改更改cw-更改光标处之字到此一单字之字尾处c#w-例,c3w表更改 3 个字cc-修改行C-替换到行尾5)取代取代r-取代光标处之字符R-取代字符直到按ESC 为止3zhangxyCH7:vi与c编程132014/3/166)复制复制yw-拷贝光标处之字到字尾至缓冲区P
9、-把缓冲区之资料贴在所在行的后p-把缓冲区之资料贴在所在行的前yy-拷贝光标所在之行至缓冲区#yy-5yy,拷贝光标所在之处以下5行至缓冲区7)复原复原u-undo,复原至上一动作8)跳至指定之行跳至指定之行g-列出行号,及相关信息9)重复上一个命令重复上一个命令zhangxyCH7:vi与c编程142014/3/164、vi的末行模式基本命令的末行模式基本命令使用前请先按ESC 键确定在命令模式下按:或/或?叁键即可进入末行模式。1)列出行号列出行号:set nu2)寻找字串寻找字串/word(由首至尾寻找),按n 可往下继续找?word(由尾至首寻找),按N 可往前继续找3)跳行跳行:10
10、0-可跳至第100 行zhangxyCH7:vi与c编程152014/3/164)替换字符串替换字符串:1,$s/pattern1/pattern2/g例例1:从文件第一行至文件尾将大写A全部替换成小写:1,$s/A/a/g为精确查找和替换字符串可加入如下:-匹配行首$-匹配行尾-匹配词尾.-匹配任意字符zhangxyCH7:vi与c编程162014/3/165、编辑多个文件编辑多个文件1)将一个文件插入另一个文件将一个文件插入另一个文件:r filename2)编辑多个文件编辑多个文件vi file1 file2 file3通过:n 文件名 切换本小节实验本小节实验:p86:vi使用练习1.
11、实验目的:2.实验内容:(1)在自己的主目录下建一个名为”vi“的目录。.zhangxyCH7:vi与c编程172014/3/16注注:文本编辑器文本编辑器emacsemacs是是GUN推出的功能强大的文本编辑器推出的功能强大的文本编辑器。它允许同时打开多个文件。键入emacs即可进入,可以直接加上文件名启动该文件编辑。若没有指定文件名emacs会启动一个空文档。进入进入emacs后后,emacs根据终端的大小(一般是80*24)自动调整,分成叁个区域:主窗口主窗口(Window),系统模式系统模式(mode line)及回应区回应区(echo area),后两者将会固定在画面的最底下两行。在
12、每个工作状态emacs都会开一个缓冲区来执行这个工作。Emacs每多开一个文件,多启动一种功能模式(读news、email等)便会多开一个buffer,用户可在各buffer之间自由切换。zhangxyCH7:vi与c编程182014/3/16退出emacs,再按即可。Emacs会询问修改过的文件是否保存,已启动的buffer是否中止。也可用Ctrl-z暂时离开emacs,键入fg再回来。学学emacs推荐使用推荐使用emacs在线上在线上tutorial。下载地址下载地址:http:/ftp.gnu.org/pub/gnu/emacs/emacs-21.3.tar.gzftp:/ftp.gn
13、u.org/pub/gnu/emacs/emacs-21.3.tar.gz下载的emacs包除了含有emacs文本编辑器外,还有其它许多工具,如:b2m-将邮件从RMAIL格式转成UNIX的mbox格式,Ebrowse-使emacs可调用C+的类的层级结构,4zhangxyCH7:vi与c编程192014/3/167.2 Linux下的下的C编程编程gccC是在是在类类UNIX操作系统操作系统中广泛使用的通用编程语言中广泛使用的通用编程语言。主要原因有:它是一种非常通用的语言。在任何一种计算机上都有至少一种能用的C编译器。并且它的语法和函数库在不同的平台上都是统一的。有简洁、灵活,表达能力强、
14、目标代码质量高等特点。C是所有版本的UNIX上的系统语言。89年美国国家标准协会发布了ANSI C的C语言标准。目标是为各种操作系统上的C程序提供可移植性保证。在80年代出现了一种C的面向对象面向对象的扩展:C+。zhangxyCH7:vi与c编程202014/3/161、gcc简介简介Vi是最常用的Linuc下C程序编辑工具。Linux中最重要的软件开发工具是gcc。gcc也是GNU的C和C+编译器。gcc能够编译三种语言:C、C+和和Object C(C语言的一种面向对象扩展,1986由Brad Cox开发,它带有一个丰富的类库,已经被成功用于大型系统的开发)。利用gcc命令可同时编译并连
15、接C和C+源程序。也可对几个C源文件利用gcc编译、连接并生成可执行文件。zhangxyCH7:vi与c编程212014/3/16实例实例有7-1main.c 和和7-1factorial.c两个源文件,现在要编译生成一个计算阶乘计算阶乘的程序(上机作业上机作业,不要不要改变文件名改变文件名)。/*-清单7-1factorial.c-*/#include#include int factorial(int n)if(n=1)return 1;else return factorial(n-1)*n;zhangxyCH7:vi与c编程222014/3/16/*-7-1 main.c-*/#inc
16、lude#include int factorial(int n);int main(int argc,char*argv)int n;if(argc 2)printf(Usage:%s nn,argv 0);return-1;else n=atoi(argv1);printf(Factorial of%d is%d.n,n,factorial(n);return 0;zhangxyCH7:vi与c编程232014/3/16利用如下命令可编译生成可执行文件及执行程序:$gcc-o 7-1factorial 7-1main.c 7-1factorial.c$./7-1factorial 5 Fa
17、ctorial of 5 is 120.gcc编译器能将C、C+语言源程序、汇编序序和目标程序编译、连接成可执行文件,若没有给出可执行文件的名字,gcc将生成一个名为a.out的文件。gcc通过后缀来区别输入文件的类别,下面列出了gcc所遵循的部分约定规则:.c为后缀的文件,C语言源代码文件;zhangxyCH7:vi与c编程242014/3/16.a为后缀的文件,是由目标文件构成的档案库文件;.C,.cc或.cxx为后缀的文件,是C+源代码文件;.h为后缀的文件,是程序所包含的头文件;.i 为后缀的文件,是已经预处理过的C源代码文件;.ii为后缀的文件,是已经预处理过的C+源代码文件;.m为
18、后缀的文件,是Objective-C源代码文件;.o为后缀的文件,是编译后的目标文件;.s为后缀的文件,是汇编语言源代码文件;.S为后缀的文件,是经过预编译的汇编语言源代码文件。5zhangxyCH7:vi与c编程252014/3/16gcc只编译C+源文件,不能自动和C+程序使用的库连接。因此,通常使用使用g+命令来完成命令来完成C+程序的程序的编译和连接编译和连接。该程序会自动调用gcc实现编译。/hello.C#include void main(void)cout Hello,world!endl;调用 g+命令编译、连接并生成可执行文件:$g+-o hello hello.C$./h
19、ello Hello,world!zhangxyCH7:vi与c编程262014/3/162、gcc的执行过程的执行过程虽然称gcc是C语言的编译器,使用gcc由C语言源代码文件生成可执行文件的过程不仅仅是编译的过程,而是要经历四个相互关联的步骤预处理预处理(也称预编译也称预编译,Preprocessing)编译编译(Compilation)汇编汇编(Assembly)连接连接(Linking)gcc首先调用首先调用cpp进行预处理进行预处理。在预处理过程中,对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析。zhangxyCH7:vi与c编程272014
20、/3/16 接着调用接着调用cc1进行编译进行编译,这个阶段根据输入文件生成以.o为后缀的目标文件。汇编过程是针对汇编语言的处理步骤汇编过程是针对汇编语言的处理步骤,调用调用as进进行工作行工作,一般来讲,.S或.s为后缀的汇编语言源代码文件汇编之后都生成以.o为后缀的目标文件。当所有的目标文件都生成之后,gcc就调用就调用ld来完来完成最后的关键性工作成最后的关键性工作:连接连接。在连接阶段,所有的目标文件被安排在可执行程序中的恰当的位置,同时,该程序所调用到的库函数也从各自所在的函数库中连到合适的地方。zhangxyCH7:vi与c编程282014/3/163、gcc的基本用法和选项的基本
21、用法和选项gcc最基本的语法最基本的语法gcc options filenames参数options:-c 只编译,不连接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。-o output_filename,确定输出文件名为output_filename,该名称不能和源文件同名。若不给出这个选项,gcc就生成预设的可执行文件a.out。-g 产生调试工具(GNU的gdb)所必要的调试符号信息,要想对源代码进行调试,必须加入这个选项。zhangxyCH7:vi与c编程292014/3/16-O 对程序进行优化编译、连接,采用该选项
22、,整个源代码会在编译、连接过程中进行优化处理。这样产生的可执行文件的执行效率可以提高。但是,编译、连接的速度就相应地要慢一些。-O2 比-O更好的优化编译、连接。当然整个编译、连接过程会更慢。-O3 比-O2更进一步优化。-I dirname 将dirname所指出的目录加入到程序头文件目录列表中,是在预编译过程中使用的参数。-L dirname 将dirname所指出的目录加入到程序函数库文件的目录列表中,是在连接过程中使用的参数。zhangxyCH7:vi与c编程302014/3/16-l name 在连接连接时,装载名字为“libname.a”的函数库,该函数库位于系统预设目录或者由-L
23、选项确定的目录下。例如,-l m表示连接名为“libm.a”的数学函数库。-ansi 只支持ANSI标准的C语法。这一选项将禁止GNU C 的某些特色。-D MACRO以字符串“1”定义MACRO宏。-D MACRO=DEFN以字符串“DEFN”定义MACRO宏。-E只运行C预编译器。-m486 针对486进行代码优化。-O0 不进行优化处理。6zhangxyCH7:vi与c编程312014/3/16-shared 生成共享目标文件。通常用在建立共享库时。-static 禁止使用共享连接。-U MACRO 取消对MACRO宏的定义。-w 不生成任何警告信息。-Wall 生成所有警告信息。-S
24、编译选项告诉gcc在为C代码产生了汇编语言文件后停止编译。例例1:一个程序名为hello.c源代码文件,要生成一个可执行文件,最简单的办法就是$gcc hello.c 预编译、编译连接一次完成,生成a.out可执行文件。zhangxyCH7:vi与c编程322014/3/16还可以加还可以加-c,-o;直接直接-o;-O;-O2等参数等参数;例例2:源程序由两个文件testmain.c 和testsub.c组成,程序中使用了系统提供的数学库数学库,同时希望给出的可执行文件为test,这时的编译命令可以是$gcc testmain.c testsub.c lm-o test 其中,-l m表示连
25、接系统的数学库数学库libm.a。除了gcc 编译器之外,目前还有一个egcs编译器。egcs不是一个全新设计的编译器,而是基于gcc之上,它具有更先进的最优化特性,同时对c+的支持较好。zhangxyCH7:vi与c编程332014/3/167.3 Linux下函数库下函数库一个“程序函数库程序函数库”就是一个文件包含了一些编译好的代码和数据,这些编译好的代码和数据可在事后供其它的程序使用。程序函数库可使整个程序更加模块化更加模块化,更更容易重新编译容易重新编译,而且更方便升级而且更方便升级。可分为两种类型:静态函数库和共享函数库静态函数库和共享函数库。1.静态函数库静态函数库(static
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第7章 vi与C编程 vi 编程
限制150内