第25章 Linux C编程基础.doc_第1页
第25章 Linux C编程基础.doc_第2页
第25章 Linux C编程基础.doc_第3页
第25章 Linux C编程基础.doc_第4页
第25章 Linux C编程基础.doc_第5页
全文预览已结束

下载本文档

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

文档简介

403 第25章 Linux C编程基础第25章 Linux C编程基础本章的学习目标: 掌握Linux C语言的基本编程思想 明确Linux C程序的基本框架 明确Linux C程序的编译过程25.1 C语言的产生Linux的内核就是用C语言编写的,当然在某些关键部分还用到了汇编语言。为了更好地利用Linux为用户提供的函数接口,以及与Linux内核更好的融合,一般选择C语言。当然在Linux下也可以选择其他语言,不过一般来说,要安装相应的编译器和函数库接口。25.2 C语言的编程思想C语言是一种编译性的第三代过程型语言。“编译性”的含义是:在执行C程序之前,将对C语言的源代码进行分析、解释,然后转换为机器指令。这些步骤是利用C编译器,并根据C语言程序的复杂性,通过make实用程序来实现的。在程序被编译后,该程序在不必重新编译的情况下可以被反复执行。“第三代过程型语言”指的是把程序中所使用的数据与对数据所执行的操作明显区别开来的计算机语言。用第三代语言编写的程序采取一系列显式的处理步骤(或过程),这种方式通过显式地引用内存中的数据存储单元来操纵数据结构的内容,并通过操作计算机的硬件来响应硬件中断。25.2.1 C程序中的函数在C语言中,全部过程采用函数的形式。正如数学函数把一个或多个数值变换为其他的数值一样,C函数是一种典型的处理过程,它可以变换某个值或执行某个操作,并返回其结果。对函数进行引用的操作称为函数调用。数学函数的调用可以嵌套,C语言中的函数调用同样也可以嵌套。当函数被嵌套调用时,最内层函数的结果将作为次内层函数的输入被传递,并依此类推。在其他语言中,非函数的过程经常会对一些共享的数据变量执行操作。例如,每当用户出现键盘错误时,非函数的过程可能会对程序的全局变量COUNT_OF_ERRORS 进行修改。在编写这样的过程时一定要非常小心,它们对于初次创建这些过程的程序来说通常具有特殊的意义,因为它们将对程序中特定的共享数据变量进行引用。当调用函数时,函数将接收所需的全部信息(包括用在每个实例中的数据变量的存储单元),它不知道也无须知道调用它的程序的大环境。函数的功能只是把从输入变量(参数)中所得到的不论何种类型的值进行处理,然后把结果返回给调用它的其他函数。由于用C语言编写的过程是作为函数来实现的,因此它们不需要知道自己是否要被嵌套在其他的函数调用中(或嵌套多少层),这使得用户可以在许多不同的程序中重用C函数而不必修改它们。整个C程序本身就是一个函数,它在执行后将对调用它的程序返回结果。对应用程序来讲,调用它的通常是shell,但也可能是操作系统的其他任一部分,或其他任一个UNIX程序。由于C程序完全由函数构成,所以它们可以被其他程序调用,或嵌套在较大的程序中而不必重新编写。25.2.2 C程序中的数据在C程序中,有两类可供操作的数据:值和变量。值指的是实际的数字或字符,例如,1、4.35或a;变量指的是与内存中用来存放数据值的位置相关联的名称。在C程序中,每个变量都是有类型的,也就是说每个变量只能存放一种类型的值。基本的数据类型包括整数、浮点(实数)、字符和数组。数组指的是同一类型的一组数据元素,这些元素根据它们出现的顺序(元素在序列中的位置)来识别。还可以定义复杂的数据结构。复杂的数据结构用来把一些相关的数据项集合在一个名字下。例如,一个终端通信程序可能具有与进入系统的每个用户相关联的终端控制块(TCB),TCB通常包含标识通信端口的数据元素、活动的应用进程以及与终端对话有关的其他信息。C程序中的所有变量在利用它们之前必须明确的定义。25.3 Linux C程序的框架25.3.1 关于程序的存放目录首先介绍Linux的系统程序和应用程序的存放目录,以及各目录之间的区别如下: 所有用户皆可使用的系统程序存放在/bin中。 超级用户才能使用的系统程序放在/sbin中。 所有用户皆可使用的应用程序存放在/usr/bin中。 超级用户才能使用的应用程序存放在/usr/sbin中。 所有用户皆可使用的与本地计算机有关的程序存放在/usr/local/bin中。 超级用户才能使用的与本地计算机有关的程序存放在/usr/local/sbin中。 与X Window系统有关的程序存放在/usr/X11R6/bin中。因此,在系统的PATH环境变量中,至少应该包含以上这些路径。了解这些信息的目的就是:在开发成功某类软件之后,应该能够根据软件的用途,将其存放在相应的目录里,以便检索。25.3.2 头文件在C语言和很多计算机语言中,需要利用头文件定义结构、常量以及声明函数的原型。几乎所有C语言的头文件都放在/usr/include及其子目录下;可以在这个目录中很容易地见到stdio.h、stdlib.h等文件。用户应该建立这个目录,因为日后肯定需要查找一些诸如结构的细节、常量的定义等信息。25.3.3 函数库函数库是以重复利用为目的,经过编译的函数集合。一般来说总是围绕某一功能来开发函数库的,例如,大家熟知的stdio(STandarD Input Output)库就是输入/输出函数的集合,dbm则是数据库函数的集合。25.3.4 静态函数库这是最简单的函数库形式,通常如果某个程序需要引用这种函数库中的函数,需要先包含此函数原型声明的头文件,然后自编译;连接的时候编译器就会把函数库中的函数,连同程序一起,生成一个二进制可执行文件,而这个可执行文件在没有此函数库的情况下可以照常运行。静态函数库一般也叫做档案(Archives),所以静态函数库以.a结尾,例如,/usr/lib/libc.a是标准的C语言函数库,而/usr/X11/libX11.a是X Window函数库。也可以创建自己的静态函数库,这实际上非常简单,只需要cc-c和ar程序。下面来举例说明。25.3.5 共享函数库静态函数库有一个缺点,当同时运行很多使用同一函数库中函数的程序时,必须为每一个程序都复制一份同样函数,这样占用了大量的内存和磁盘空间。共享函数库克服了这一缺点,很多UNIX系统都对其提供支持,关于共享函数库目录以及在不同系统的实现方法就不在这儿进行介绍。在Linux系统中共享函数库存放于/lib中,在典型的Linux中应该可以找到/lib/libc.so.N,其中N指的是主版本号。如果某个函数使用共享函数库(如libc.so.N),那么此程序被链接到/usr/lib/libc.sa,这是一个特殊类型的函数库,它并不包含实际的函数,只是指向libc.so.N中的相应函数,并且只有在运行状态条用此函数时才将其调入内存。这有两个好处,首先解决了浪费内存与磁盘空间的问题,其次使得函数库可以单独升级而不需要编译、链接应用程序。在Linux下可以用ldd命令查询某个程序使用了哪些动态库。25.4 创建、编译和执行第一个程序C程序的开发是一个不断重复的过程,在以下4个步骤中将用到软件开发人员所熟悉的许多UNIX工具。(1) 利用某个编辑器把程序的源代码编写到一个文本文件中。(2) 编译程序。(3) 运行程序。(4) 调试程序。不断重复执行前两个步骤,直到程序能够成功编译为止,然后对这一程序开始运行和排错。25.4.1 创建一个简单的C程序25.4.2 建立大型的应用程序25.5 本 章 小 结UNIX建立在C语言的基础之上。C语言是与平台无关的、编译

温馨提示

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

评论

0/150

提交评论