LinuxC编程(http:///bookfiles/54)Linux下C语言编程简介本章将简略介绍一下哪些是Linux,C语言的特性,程序开发的预备知识,Linux下C语言开发的环境,程序设计的特性和原则以及编码风格等。通过本章的学习,可以对在Linux下使用C语言编程有一个基本的了解。1.1LinuxLinux是能否自由传播并承继了UNIX内核的操作系统,是对UNIX的简化和改进,它既保留了UNIX系统的高安全性,同时也使其操作愈发简单便捷,进而使单机用户也可以使用。UNIX内核指的是操作系统底层的核心程序代码。由于Linux本身脱胎于UNIX系统,所以Linux程序与UNIX程序是非常相像的。事实上,UNIX下编撰的各类程序基本上都可以在Linux下编译和运行。据悉,许多在UNIX操作系统下创建的一些商业化应用软件,其一补码方式几乎可以在不作任何更改的情况下直接运行在Linux系统上。Linux是由德国的法兰克福学院(Helsinki)中学生LinusTorvalds把Minix系统向x86移植的结果。当时Linus手边有个Minix系统(UNIX的一个分支),他对这个操作系统相当有兴趣,因为当时他刚好有一台个人计算机,他想把这个系统移植到该计算机(x86构架)上来使用。
因为受惠于Stallman倡导的开放源代码(OpenSource)思想,他得以接触到UNIX操作系统的一些源代码,并仔细通读了UNIX的核心,之后除去较为繁复的核心程序,将它改写成才能适用于通常个人计算机的一种操作系统,即Linux系统的雏型。1992年1月,大约只有100人开始使用Linux,但她们为Linux的发展壮大做出了巨大贡献。她们对一些不合理的代码进行了改进,修复了代码错误并上传补丁。Linux的腾飞最关键的诱因是获得了自由软件基金(FSF)的支持,她们拟定了一个GNU计划,该计划的目标就是要编撰一个完全免费的UNIX版本——包括内核及所有相关的组件,可以让用户自由共享而且改写软件,而Linux刚好符合她们的意愿。她们将Linux与其现有的GNU应用软件挺好地结合上去,使Linux拥有了图形用户界面。提示:Linux实际上只是提供了操作系统的内核;它实现了多任务和多用户功能,管理硬件linux web服务器,分配显存,激活应用程序的运行。对初学者来说,最重要的是要明白质数的内核版本(例如2.3、2.5、2.7)是实验用的、正在开发的内核。稳定的、正式发行的内核版本号则是质数的(例如2.2、2.4、2.6)。
1994年3月,Linux1.0即将版发布,它的出现无异于网路的“自由宣言”。自此Linux用户迅速降低,Linux的核心开发小组也逐渐强悍。在Linux所包含的数千个文件中,有一个名为Credits的文件,上面列举了100多名对Linux有过重要贡献的黑客,包括她们的名子、地址以及所做的工作。其中的软件都是经过“优胜劣汰”的达尔文式的选择方法保存出来的。Linux的发展方式看上去很简单:所有黑客都可为其添加额外功能并建立其性能。所谓的β测试也除了是修复漏洞,而是进行集成并进行更多的改进、创新。Linux发展过程中的这些随便性,导致了发展过程中出现了各类各样的Linux版本。提示:β测试是由软件的多个用户在一个或多个用户的实际使用环境下进行的测试。这种用户是与公司签订了支持产品预发行协议的外部顾客,她们要求使用该产品,并乐意返回有关错误信息给开发者。开发者一般不在测试现场,因此,β测试是在开发者难以控制的环境下进行的软件现场应用。在β测试中,由用户记下遇见的所有问题,包括真实的以及主观认定的,定期向开发者报告,开发者在综合用户的报告以后,做出更改,最终将软件产品交付给全体用户使用。因为它处在整个测试的最后阶段,因而不能指望这时发觉主要问题。
同时,产品的所有指南文本也应当在此阶段完全初稿。Linux操作系统在短短的几年之内得到了特别迅猛的发展,这与Linux具有的良好特点是分不开的。Linux几乎包含了UNIX的全部功能和特点,同时又有自己的一些特性。概括地讲,Linux具有以下主要特点:开放性开放性是指系统遵守世界标准规范linux c程序,非常是遵照开放系统互联(OSI)国际标准。凡遵守国际标准所开发的硬件和软件,都能彼此兼容,可便捷地实现互联。多用户多用户是指系统资源可以被不同用户各自拥有和使用,即每位用户对自己的资源(比如:文件、设备)有特定的权限,互不影响。Linux承继了UNIX的多用户特点。多任务多任务是现代计算机的最主要的一个特性。它是指计算机同时执行多个程序,但是各个程序的运行相互独立。Linux系统调度每一个进程,平等地访问微处理器。因为CPU的处理速率十分快,其结果是,启动的应用程序看上去似乎在并行运行。事实上,从处理器执行一个应用程序中的一组指令到Linux调度微处理器再度运行这个程序之间只有很短的时间延后,用户是觉得不下来的。良好的用户界面Linux向用户提供了3种界面:传统操作界面、系统调用界面和图形用户界面。
Linux的传统操作界面是基于文本的命令行界面,即Shell,它既可以联机使用,又可在文件上脱机使用。Shell有很强的程序设计能力,用户可便捷地用它编制程序,因而为用户扩展系统功能提供了更中级的手段。可编程Shell是指将多条命令组合在一起,产生一个Shell程序,这个程序可以单独运行,也可以与其他程序同时运行。系统调用界面是为用户提供编程时使用的界面。用户可以在编程时直接使用系统提供的系统调用命令。系统通过这个界面为用户程序提供低级、高效率的服务。Linux还为用户提供了图形用户界面。它借助键盘、菜单、窗口、滚动条等设施,给用户呈现一个直观、易操作、交互性强的友好的图形化界面。设备独立性Linux是具有设备独立性的操作系统,它的内核具有高度的适应能力。随着越来越多的程序员开发Linux系统,将会有更多的硬件设备加入到各类Linux内核和发行版本中。另外,因为用户可以免费得到Linux的内核源代码,因而,用户可以按照须要更改内核源代码,便于适应新降低的外部设备。设备独立性是指操作系统把所有外部设备统一当成文件来看待,只要安装它们的驱动程序,任何用户都可以像使用文件一样,操纵、使用这种设备,而毋须晓得它们的具体存在方式。
具有设备独立性的操作系统,通过把每一个外围设备看作一个独立文件来简化降低新设备的工作。当须要降低新设备时,系统管理员就在内核中降低必要的联接。这些联接(也叫做设备驱动程序)能保证每次调用设备提供的服务时,内核能以相同的方法来处理它们。当新的或更好的外设被开发并交付给用户时,系统容许在这种设备联接到内核后,能不受限制地立刻访问它们。设备独立性的关键在于内核的适应能力。其他操作系统只容许一定数目或一定种类的外部设备联接。而设备独立性的操作系统却还能容纳任意种类及任意数目的设备linux常用命令,由于每一个设备都是通过其与内核的专用联接进行独立访问的。提供了丰富的网路功能健全的外置网路是Linux的一大特征。Linux在通讯和网路功能方面优于其他操作系统。其他操作系统不包含这么紧密地和内核结合在一起的联接网路的能力,也没有外置这种联网特点的灵活性。而Linux为用户提供了建立的、强大的网路功能。支持Internet是其网路功能之一。Linux免费提供了大量支持Internet的软件,通过Internet,用户能用Linux与世界上各个地区的人便捷地通讯。它内建了http、ftp、dns等功能,支持所有常见的网路服务,包括ftp、telnet、NFS、TCP、IP等,加上强悍的稳定性,因而好多ISP(InternetServiceProviders)都是采用Linux来架设电邮服务器、FTP服务器及Web服务器等各类服务器的。
Linux在最新发展的内核中还包含了一些通用的网路合同,例如IPv4、IPv6、AX.25、X.25、IPX、DDP(Appletalk)、NetBEUI、Netrom等。用户能通过一些Linux命令完成内部信息或文件的传输。Linux除了容许进行文件和程序的传输,它还为系统管理员和技术人员提供了访问其他系统的插口。另外,还可以进行远程访问。通过这些远程访问的功能,一位技术人员才能有效地为多个系统服务,虽然这些系统坐落相距很远的地方。稳定的核心中目前包含的网路合同有TCP、IPv4、IPX、DDP、AX等。另外还提供Netware的顾客机和服务器,以及现今最热门的Samba(让用户共享MircosoftNetwork资源)。可靠的系统安全Linux采取了许多安全技术举措,包括对读/写进行权限控制、带保护的子系统、审计跟踪、核心授权等,这为网路多用户环境中的用户提供了必要的安全保障。良好的可移植性可移植性是指将操作系统从一个平台转移到另一个平台上,并使它一直能按其自身的形式运行的能力。Linux是一种可移植的操作系统,才能在从微型计算机到小型计算机的任何环境中运行。可移植性为运行Linux的不同计算机平台与其他任何计算机进行确切而有效的通讯提供了手段,不须要另外降低特殊的和高昂的通讯插口。
1.2C语言的简介和特征C语言是贝尔实验室的DennisRitchie在B语言的基础上开发下来的,1972年在一台DECPDP-11计算机上实现了最初的C语言。C语言是与硬件无关的,用C语言编撰的程序能移植到大多数计算机上。C语言在各类计算机上的快速推广造成了许多C语言版本。这种版本其实是类似的,但一般是不兼容的。为了明晰定义与机器无关的C语言,1989年日本国家标准商会制订了C语言的标准(ANSIC)。在ANSI标准化后,C语言的标准在相当长的一段时间内都基本保持不变,虽然C++进行了改进(实际上,NormativeAmendment1在1995年早已开发了一个新的C语言版本,并且这个版本极少为人所知)。ANSI标准在20世纪90年代又经历了一次比较大的改进,这就是ISO9899:1999(1999年出版)。这个版本就是一般提到的C99。它被ANSI于2000年2月采用。都是由C语言编撰的。用C语言加上一些汇编语言子程序,就更能显示C语言的优势,像PC-DOS、WORDSTAR等就是用这些技巧编撰的。归纳上去,C语言具有下述特征:高级语言。它把中级语言的基本结构和句子与低级语言的实用性结合上去。
C语言可以像汇编语言一样对位、字节和地址进行操作,而这两者是计算机最基本的工作单元。结构式语言。结构式语言的明显特征是代码及数据的模块化,即程序的各个部份不仅必要的信息交流外彼此独立。这些结构化方法可使程序层次清晰,易于使用、维护以及调试。C语言是以函数方式提供给用户的,这种函数可便捷地调用,并采用多种循环、条件句子控制程序流向linux c程序,因而使程序完全结构化。功能齐全。C语言具有各类各样的数据类型,并引入了表针概念,可使程序效率更高。另外,C语言也具有强悍的图形功能,支持多种显示器和驱动器。并且估算功能、逻辑判定功能也比较强悍,可以实现决策目的。可与Linux无缝结合。Linux本身是使用C语言开发的,在Linux上用C语言作开发,效率很高。1.3Linux程序设计基础知识对一个Linux开发人员来说,在使用一种编程语言编撰程序曾经,对操作系统中程序的保存位置有一个透彻的了解是很重要的。例如,应晓得软件工具和开发资源保存在哪些位置是很重要的。下边首先简单介绍Linux的几个重要的子目录和文件。这部份内容其实是针对Linux的,但同样也适用于其他类UNIX系统。1.3.1程序安装目录Linux下的程序一般都保存在专门的目录里。系统软件可以在/usr/bin子目录里找到。系统管理员为某个特定的主机系统或本地网路添加的程序可以在/usr/local/bin子目录里找到。