活学Linux下C语言编程基础知识Word文档格式.docx
《活学Linux下C语言编程基础知识Word文档格式.docx》由会员分享,可在线阅读,更多相关《活学Linux下C语言编程基础知识Word文档格式.docx(32页珍藏版)》请在冰豆网上搜索。
而Linux又在Minux之上增加和完善了UNIX系统的各种特性。
后来LinusTorvald通过新闻组(USENET)宣布这是一个免费的系统,主要在x86电脑上使用,希望大家一起来将它完善,并将源代码放到了芬兰的FTP站点上供人免费下载。
本来他想把这个系统称为freax,可是FTP的工作人员认为这是Linus的Minux,就用Linux这个子目录来存放,于是它就成了Linux。
这时的Linux只有核心程序,还不能称作是完整的系统,不过由于许多专业用户(主要是程序员)自愿地开发它的应用程序,并借助Internet拿出来让大家一起修改,所以它的周边程序越来越多,Linux本身也逐渐发展壮大起来。
近些年来,Linux操作系统得到了迅猛的发展,这与Linux具有的良好特性是分不开的。
Linux包含了UNIX的全部功能和特性,在中高端服务器上得到了广泛的应用,国际上很多有名的硬、软件厂商都与之结盟、捆绑,将其用作产品的操作系统。
Linux操作系统的特点可总结为以下几点。
1.自由软件Linux项目从一开始就与GNU项目紧密结合起来,它的许多重要组成部分直接来自GNU项目。
Linux可以说是作为开放源码的自由软件的代表,便于定制和再开发。
在遵从GPL版权协议的条件下,各部门、企业、单位或个人就可以免费得到Linux源程序,并根据实际需要和使用环境对Linux系统进行裁剪、扩充、修改,再开发和发布程序的源码,并公布在Internet上。
这样就激发了世界范围内热衷于计算机事业的人们的创造力。
通过Internet,这一软件的传播和使用迅速蔓延。
Linux操作系统可以从互联网上很方便地免费下载,且由于可以得到Linux的源码,因而操作系统的内部逻辑可见,这样就可以准确地查明故障原因,及时采取相应对策。
2.开放性开放性是指系统遵循世界标准规范,特别是遵循开放系统互连(OSI)国际标准。
凡遵循国际标准所开发的硬件和软件,都能彼此兼容,可方便地实现互连。
3.多用户系统资源可以被不同用户各自拥有使用,即每个用户对自己的资源(例如:
文件、设备)有特定的权限,互不影响,允许多个用户从相同或不同终端上同时使用同一台计算机。
4.多任务是指计算机允许多个程序同时执行,而且各个程序的运行互相独立。
Linux系统调度每一个进程,平等地访问微处理器。
由于CPU的处理速度非常快,启动的应用程序看起来好像在并行运行,※1※
oko
et.n
okbocnw.w
事实上,从处理器执行一个应用程序中的一组指令到Linux调度微处理器再次运行这个程序之间只有很短的时间延迟,用户是感觉不出来的。
Linux充分利用了x86CPU的任务切换机制,实现了真正多任务、多用户环境,允许多个用户同时执行不同的程序,并且可以给紧急任务以较高的优先级。
5.与UNIX有良好的兼容性Linux是从一个比较成熟的操作系统UNIX发展而来的,UNIX上的绝大多数命令都可以在Linux里找到并有所加强。
可以认为它是UNIX系统的一个变种,因而UNIX的优良特点如可靠性、稳定性以及强大的网络功能,强大的数据库支持能力以及良好的开放性等都在Linux上一一体现出来。
且在Linux的发展过程中,Linux的用户能很好地从UNIX团体贡献中获利,它能直接获得UNIX相关的支持和帮助。
现在,Linux已成为具有全部UNIX特征、完全符合POSIX标准的操作系统。
POSIX是基于UNIX的第一个操作系统簇国际标准,该标准最初由IEEE开发,部分已经被ISO接受为国际标准。
POSIX.1和POSIX.2分别定义了POSIX兼容操作系统的C语言系统接口以及shell和工具标准。
这两个标准是通常提到的标准。
Linux遵循这一标准,这使UNIX下许多应用程序可以很容易地移植到Linux下,相反也是这样,所有UNIX的主要功能都有相应的Linux工具和实用程序。
对于UNIXSystemV来说,其软件程序源码在Linux上重新编译之后就可以运行;
而对于BSDUNIX,它的可执行文件可以直接在Linux环境下运行。
所以,Linux实际上就是一个完整的UNIX类操作系统。
Linux系统上使用的命令多数都与UNIX命令在名称、格式、功能上相同。
6.性能和稳定性好在相同的硬件环境下,Linux可以像其他优秀的操作系统那样运行,提供各种高性能的服务,可以作为中小型ISP或Web服务器工作平台。
Linux可以运行在386以上及各种RISC体系结构机器上。
Linux最早诞生于微机环境,一系列版本都充分利用了x86CPU的任务切换能力,使x86CPU的效能发挥得淋漓尽致,而这一点连Windows都没有做到。
Linux能运行在笔记本电脑、PC、工作站,甚至巨型机上,而且几乎能在所有主要CPU芯片搭建的体系结构上运行(包括Intel、AMD、HP-PA、MIPS、PowerPC、UltraSPARC、ALPHA等RISC芯片),其性能远远超过了WindowsNT操作系统目前所能达到的水平。
7.可靠的系统安全Linux上包含了大量网络管理、网络服务等方面的工具,用户可利用它建立起高效和稳定的防火墙、路由器、工作站、Intranet服务器及WWW服务器。
Linux还包含了大量系统管理软件、网络分析软件、网络安全软件等。
由于Linux源码是公开的,所以可消除系统中是否有后门的疑惑。
这对于关键部门、关键应用来说是至关重要的。
Linux采取了许多安全技术措施,包括对读、写进行权限控制、带保护的子系统、审计跟踪、核心授权等,这为网络多用户环境中的用户提供了必要的安全保障。
8.可移植性好可移植性是指代码从一种体系结构移植到另外一种不同的体系结构上的方便程度。
Linux是一个可移植性非常好的操作系统,它广泛支持了许多不同体系结构的计算机,能够在从微型计算机到大型计算机的任何环境中和任何平台上运行,包括Intel、AMD、ARM、Mips等。
可移植性为运行Linux的不同计算机平台与其他机器进行准确而有效的通信提供了便利,不需要另外增加特殊的和昂贵的通信接口。
9.多种用户界面主要有命令接口、系统调用和图形界面。
Linux的传统用户界面是基于文本的命令行界面,即shell,它既可以联机使用,也可存在文件上脱机使用。
shell有很强的程序设计能力,用户可方便地用它编制程序,从而为扩充系统功能提供了更高级的手段。
可编程Shell是指将多条命令组合在一起,形成一个shell程序,这个程序可以单独运行,也可以与其他程序同时运行。
系统调用给用户提供编程时使用的界面,用户可以在编程时直接使用系统提供的系统调用命令。
系统通过这个界面为用户程序提供低级、高效率的服务。
Linux还为用户提供了丰富的图形用户界面,如GNOME、KDE等。
它利用鼠标、菜单、窗口、滚动条等设施,给用户呈现一个直观、易操作、交互性强的友好的图形化界面。
Linux的XWindow可以做Windows下的所有事情,而且更有趣、更丰富,用户甚至
ww
okboet.nk
w
.cww
oonb
cnw.ww
et.nokbo
nb.cwww
.cwww
.nokbon
※
2
可以在几种不同风格的窗口之间来回切换。
10.支持多种文件系统Linux可以支持十多种文件系统类型:
JFS、ReiserFS、ext、ext2、ext3、ISO9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC等。
在Linux系统中,每个分区都是一个文件系统,都有自己的目录层次结构,Linux可以将这些文件系统直接挂载为系统的一个目录。
Linux支持多种文件系统,这样使得它更加灵活,并可以和许多其他种操作系统共存。
virtualFileSystem(虚拟文件系统)使得Linux可以支持多个不同的文件系统。
由于系统已将Linux文件系统的所有细节进行了转换,所以Linux核心的其他部分及系统中运行的程序将看到统一的文件系统。
Linux的虚拟文件系统允许用户能同时透明地安装许多不同的文件系统。
虚拟文件系统是为Linux用户提供快速且高效的文件访问服务而设计的。
随着Linux的不断发展,它所支持的文件格式系统也会越来越多。
11.开发功能强Linux支持一系列的UNIX开发,Linux已经具有全部UNIX特征,它是一个完整的UNIX开发平台,几乎所有的主流程序设计语言都已移植到Linux上并可免费得到,如C、C++、Fortran77、ADA、PASCAL、Modual2和3、Tcl/TkScheme、SmallTalk/X等。
12.具有强大的网络功能支持Internet。
Linux免费提供了大量支持Internet的软件,Internet是在UNIX领域中建立并繁荣起来的,在这方面使用Linux是相当方便的,用户能用Linux与其他人通过Internet网络进行通信。
支持文件传输。
用户能通过一些Linux命令完成内部信息或文件的传输。
支持远程访问。
Linux不仅允许进行文件和程序的传输,它还为系统管理员和技术人员提供了访问其他系统的窗口。
通过这种远程访问的功能,一位技术人员能够有效地为多个系统服务。
实际上,Linux就是依靠互联网才迅速发展了起来。
它可以轻松地与TCP/IP、LANManager、WindowsforWorkgroups、NovellNetware或WindowsNT网络集成在一起。
Linux不仅能够作为网络工作站使用,还可以胜任各类服务器,如X应用服务器、文件服务器、打印服务器、邮件服务器、新闻服务器等等。
13.设备独立性设备独立性是指操作系统把所有外部设备统一当成文件来看待,只要安装它们的驱动程序,任何用户都可以像使用文件一样,操纵、使用这些设备,而不必知道它们的具体存在形式。
具有设备独立性的操作系统,通过把每一个外围设备看作一个独立文件来简化增加新设备的工作。
Linux是具有设备独立性的操作系统,它的内核具有高度适应能力,随着更多的程序员加入Linux编程,会有更多硬件设备加入到各种Linux内核和发行的版本中来。
14.虚拟内存虚拟内存技术,即拿出一部分硬盘空间来充当内存使用,当内存占用完时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。
当物理内存满时(实际上,在内存满之前),虚拟内存就在硬盘上创建了。
当物理内存用完后,虚拟内存管理器选择最近没有用过的,低优先级的内存部分写到交换文件上。
这个过程对应用程序是隐藏的,应用程序把虚拟内存和物理内存看作是一样的,这样就提高了系统的效率。
15.动态链接共享库每个应用程序共享一个公用的、运行时可调用的子程序库,而不是保留各自的软件备份,这样可以为系统节省大量空间。
在/lib目录下,有许多以.so作后缀的文件,这就是Linux系统应用的动态链接库,以so结尾,即SharedObject,共享对象(在Linux下,静态函数库是以.a作后缀的)。
XWindow作为Linux下的标准图形窗口界面,它本身就采用了很多的动态链接库(在/usr/X11R6/lib目录下),以方便程序间的共享,节省占用空间。
著名的Apache网页服务器,也采用了动态链接库,以便扩充程序功能。
这就是动态链接的好处。
LinuxC简介
Linux作为一个优秀的操作系统,一项非常重要的功能就是支持系统调用。
C语言具有高速、※3※
3
灵活、简洁、可移植性好等特点,从而很快成为了世界上最受欢迎的编程语言之一。
因而它和Linux很快形成了完美的结合,Linux为C语言提供了很好的支持,为用户提供了一个强大的编程环境。
事实上,Linux操作系统本身是用C语言写的,Linux下的很多软件也是用C语言写的,特别是一些著名的服务软件,比如MySQL、Apache、Oracle等。
C语言的简介和特点
1963年,剑桥大学将ALGOL60语言发展成为CPL(CombinedProgrammingLanguage)语言。
1967年,剑桥大学的MatinRichards对CPL语言进行了简化,于是产生了BCPL语言。
1970年,AT&
T贝尔实验室的KenThompson将BCPL进行了修改,设计出较先进的并取名为B语言。
并且他用B语言写了第一个UNIX操作系统。
1973年,AT&
T贝尔实验室的D.M.RITCHIE在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。
随着C语言在各种计算机上的快速推广,从而出了许多C语言版本。
这些版本虽然是类似的,但并不兼容。
为了明确定义与机器无关的C语言,1989年美国国家标准协会制定了C语言的标准(ANSIC)。
在ANSI标准化后,C语言的标准在相当长的一段时间内都基本保持不变,NormativeAmendment1在1995年开发了一个新的C语言版本,但是这个版本很少为人所知。
ANSI标准在20世纪90年代又经历了一次比较大的改进,这就是ISO9899:
1999(1999年出版)。
这个版本就是现在所说的C99,成为现行的C语言标准。
C语言之所以发展迅速,并且成为最受欢迎的语言之一,主要是因为它具有强大的功能。
许多著名的系统软件,如UNIX/Linux、Windows都是由C语言编写的。
用C语言加上一些汇编语言子程序,就更能显示语言的优势,像PC-DOS、WORDSTAR等就是用这种方法编写的。
总而言之,C语言具有以下特点:
1.C语言是中级语言C语言被程序员广泛使用的另一个原因是可以用它代替汇编语言。
汇编语言使用的汇编指令,是能够在计算机上直接执行的二进制机器码的符号表示。
汇编语言的每个操作都对应为计算机执行的单一指令。
虽然汇编语言有给予程序员达到最大灵活性和最高效率的潜力,但开发和调试汇编语言程序的困难是难以忍受的。
非结构性使得汇编语言程序难于阅读、改进和维护。
也许更重要的是,汇编语言程序不能在使用不同CPU的机器间移植。
C语言同时具有汇编语言和高级语言的优势,它把高级语言的基本结构和语句与低级语言的实用性结合起来。
C语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。
2.C语言是结构式语言结构式语言比非结构式语言更易于程序设计,用结构式语言编写的程序的清晰性使得它们更易于维护。
结构式语言的显著特点是代码及数据的模块化,即程序的各个部分除了必要的信息交流外彼此独立。
这种结构式方式可使程序层次清晰,便于使用、维护以及调试。
语言是以函数形式提供给用户的,这些函数可方便地调用,并采用多种循环、条件语句控制程序流向,从而使程序完全结构化。
在C语言中,除实现顺序、选择和循环三种基本结构的9条控制语句外,输入输出操作均由标准库函数(不是C语言的组成部分)来实现。
所以学习C语言,不仅要学习这9条控制语句和各种运算符,而且要学习并掌握常用标准库函数的使用。
3.C语言简洁、灵活,运算符和数据结构类型极其丰富所有的高级语言都支持数据类型的概念。
一个数据类型定义了一个变量的取值范围和可在其上操作的一组运算。
常见的数据类型是整型、字符型和实数型。
虽然C语言有五种基本数据类型,但与Pascal或Ada相比,它却不是强类型语言。
C程序允许几乎所有的类型转换。
例如,字符型和整型数据能够自由地混合在大多数表达式中进行运算。
这在强类型高级语言中是不允许的。
C语言的另一个重要特点是它仅有32个关键字,这些关键字就是构成C语言的命令。
和IBMPC的BASIC相比,后者包含的关键字达159个之多。
4.C语言可移植性好C语言程序非常容易移植,可移植性表示为某种计算机写的软件可以用到另一种机器上去。
举
4
例来说,如果为苹果机写的一个程序能够方便地改为可以在IBMPC上运行的程序,则称为是可移植的。
几乎所有的计算机上都有C语言编译程序,这使用户可以很少改动甚至不加改动地将为一种机器写的C语言源程序在另一种机器上编译执行。
可移植性节省了时间和财力。
5.C语言生成的目标代码质量高,程序执行效率高C语言具有各种各样的数据类型,并引入了指针概念,可以直接操纵硬件,使程序执行效率更高,但这也使得初学者难于掌握它。
用C语言编程,可以获得高效机器代码,其效率几乎接近汇编语言代码。
6.C语言适用范围大C语言最初被用于系统程序设计。
一个系统程序是一大类程序的一部分,这一大类构成了计算机操作系统及应用程序。
通常被称为系统程序的有操作系统、翻译程序、编辑程序、汇编程序、编译程序、数据库管理程序。
随着C语言的普及,加之其可移植性和高效率,许多程序员用它设计各类程序。
而且C语言计算功能、逻辑判断功能也强大,可以实现决策目的。
C语言也有强大的图形处理功能,支持多种显示器和驱动器。
4.1
Linux程序设计基础知识
头文件
glibc_header是Linux下的系统头文件。
缺少了系统头文件的话,很多用到系统功能的C程序将无法编译。
假如用户在安装过程中少装了这些包,就会无法编译C源程序。
在使用C语言和其他语言进行程序设计的时候,需要头文件来提供对常数的定义和对系统函数及库函数调用的声明。
对C语言来说,这些头文件几乎永远保存在/usr/include及其下级子目录里。
那些依赖于所运行的UNIX或Linux操作系统特定版本的头文件一般可以在/usr/include/sys或/usr/include/Linux子目录里找到。
其他的程序设计软件也可以有一些预先定义好的声明文件,它们的保存位置可以被相应的编译器自动查找到。
比如,窗口系统的/usr/include/X1R6子目录和GNUC++编译器的/usr/include/g++-2子目录等。
X在调用C语言编译器的时候,可以通过-I编译命令标志来引用保存在下级子目录或者非标准位置的头文件。
用grep命令来查找含有某些特定定义与函数声明的头文件是很方便的。
头文件的保存位置如下:
/usr/include:
系统头文件/usr/local/include:
本地头文件
4.2
函数库是一些预先编译好的函数的集合,那些函数都是按照可再使用的原则编写的。
它们通常由一组互相关联的用来完成某项常见工作的函数构成。
比如用来处理屏幕显示情况的函数(curses库)等。
标准的系统库文件一般保存在/lib或者/usr/lib子目录里。
编译时要告诉C语言编译器(更确切地说是链接程序)应去查找哪些库文件。
默认情况下,它只会查找C语言的标准库文件。
库文件必须遵守一定的命名规则,还必须在命令行上明确地给出来。
库文件的名字永远以lib这几个字母打头,随后是说明函数库情况的部分(比如用c表示这是一个C语言库;
而m表示这是一个数学运算库等),文件名的最后部分以一个句点(.)开始,然后给出这个库文件的类型,如下所示:
.a:
传统的静态型函数库。
.so和.sa:
共享型函数库。
函数库一般分为静态和共享两种格式,用ls/usr/lib