Linux程序设计2课程主要内容Linux程序设计基础Shell程序设计文件操作终端数据管理开发工具调试用GTK+进行GNOME编程(选)3教材NeilMatthew,RichardStones著,陈健、宋健建译,Linux程序设计(第4版),人民邮电出版社4成绩构成实验成绩考勤、课堂练习期末考试第1章Linux程序设计基础61.1简介Linux程序员可用的部分编程语言:Ada,C,C++,Fortran,Java,Javascript,Pascal,Perl,Python,PHP……7Linux程序Linux程序表现为两种特殊类型的文件:可执行文件:相当于Windows中的.exe文件脚本文件:一组指令的集合,这些指令将由另一个程序(即解释器)来执行。相当于Windows中的.bat,.cmd文件Linux并不要求可执行文件或脚本文件具有特殊的文件名或扩展名。通过文件属性来指明一个文件是否为可执行的程序。8PATH变量当登录进Linux时,用户与一个shell程序(通常是bash)进行交互,它在一组指定的目录路径下按照用户给出的程序名搜索与之同名的文件。搜索的目录路径存储在shell变量PATH里。PATH变量的例子:/usr/local/bin:/bin:/usr/bin:.:/home/neil/bin用冒号分隔PATH变量里的条目9文本编辑器ViemacsC语言编译器在Linux系统中,C语言编译器通常是gcc。101.2开发系统导引对Linux开发人员来说,了解软件工具和开发资源在系统中存放的位置是非常重要的。本节主要介绍一些重要的文件和目录:应用程序头文件库文件111.应用程序系统为正常使用提供的程序,包括用于程序开发的工具,都可在/usr/bin中找到;系统管理员为某个特定的主机或本地网络添加的程序通常可在目录/usr/local/bin或/opt中找到。122.头文件对于C语言来说,头文件几乎总是位于/usr/include目录及其子目录中。那些依赖于特定Linux版本的头文件通常可在目录/usr/include/sys和/usr/include/linux中找到。在调用C语言编译器时,可以使用-I标志来包含保存在子目录或非标准位置中的头文件。例:gcc–I/usr/openwin/includefred.c它指示编译器不仅在标准位置,也在/usr/openwin/include目录中查找程序fred.c中包含的头文件。133.库文件库是一组预先编译好的函数的集合,这些函数都是按照可重用的原则编写的。标准库文件一般存储在/lib和/usr/lib目录中。库文件的名字总是以lib开头,随后的部分指明这是什么库,文件名的最后部分以.开始,然后给出库文件的类型:.a代表传统的静态函数库;.so代表共享函数库。例:libm.alibc.so14库文件的使用例:$gcc–ofredfred.c/usr/lib/libm.a该命令要求编译器编译文件fred.c,产生可执行文件fred,并且除了搜索标准的C语言函数库外,还搜索数学库libm.a以解决函数调用的问题。以上命令也可写成:$gcc–ofredfred.c-lm其中的-lm是简写方式,它代表的是标准库目录(/usr/lib)中名为libm.a的函数库。-lm标志的另一个好处是,如果有共享库,编译器会自动选择共享库。15静态库静态库,也称作归档文件(archive),按惯例,它们的文件名都以.a结尾。例:标准C语言函数库/usr/lib/libc.aX11函数库/usr/lib/libX11.aP9实验16静态库静态库的缺点:当你同时运行许多应用程序并且它们都使用来自同一个函数库的函数时,内存中就会有同一函数的多份副本,而且在程序文件自身中也有多份同样的副本。这将浪费大量的内存和磁盘空间。17共享库共享库的保存位置与静态库相同,但其扩展名不同。共享库的扩展名为.so。当一个程序使用共享库时,它的链接方式是:程序本身不再包含函数代码,而是引用运行时可访问的共享代码。当编译好的程序被装载到内存中执行时,函数引用被解析并产生对共享库的调用,如有必要,共享库才被加载到内存中。通过这种方法,系统可以只保留共享库的一份副本供许多应用程序同时使用,并且在磁盘上也仅保存一份。18共享库的优点当多个进程使用同一共享库时,Linux将共享库中存放可执行代码的内存进行共享。因此,无论有多少个程序要使用某段相同代码,只需要把这段代码放到共享内存中即可,而不像静态库,需要在所有地方都将其直接加载到可执行文件,增加可执行文件的大小。共享库在很大程度上节约了系统内存,它们可以使整个系统工作更快,特别是在内存不足的情况下。当共享库发现一个错误时,只需要简单地用修改版本替换当前共享库,而不需要重新编译每个使用该库德程序。19共享库对Linux系统来说,负责装载共享库并解析客户程序函数引用的程序是ld.so,也可能是ld-linux.so.2,ls-lsb.so.2或ld-lsb.so.3。可以通过ldd工具来查看一个程序需要的共享库。