欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    Linux编程环境1.ppt

    • 资源ID:70006639       资源大小:266KB        全文页数:102页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Linux编程环境1.ppt

    Linux 环境下的软件开发第一章Linux 编程环境简介 1.0整体思路本讲是编程系列讲座的第一讲,主要讲述 Linux 平台上的 C 语言环境,包括编译器、调试器、Make、Diff、Patch 等。其目的是通过介绍 Linux 上 C 语言编程的基本工具 以及一些新手必须掌握的技巧,迅速引导新手入门,以避免走弯路。首先对 Linux 作一简单介绍,然后通过讲解 Linux 上进行编程的常识以及典型场景的 演示,使大家对 Linux 上的程序开发有一个感性认识。在此基础上,重点讲述 Linux 上 C 语言编程的基本工具,包括编译器和调试器,主要是它们的重要选项和基本用法。接下来讲述在项目组织和开发过程中非常重要的工具,即 GNU make 和 makefile。最后讲述 diff/patch 工具。主要内容主要内容1.1.Unix及Unix哲学2.2.Linux编程常识1.Unix哲学哲学n n1.0 Unix 回顾n n1.1 Unix哲学基础n n1.2 Unix哲学的概括 n n1.3 应用Unix哲学 n n1.4 反对学习Unix文化的理由n n1.5 Uinx之失1.0 Unix回顾回顾n nLinux 的官方定义Linux Linux 是一种是一种 UNIX UNIX 操作系统的克隆,它(的内核)由操作系统的克隆,它(的内核)由 Linus Torvalds Linus Torvalds 以以及网络上组织松散的黑客队伍一起从零开始编写而成。及网络上组织松散的黑客队伍一起从零开始编写而成。Linux Linux 的目标的目标是保持和是保持和 POSIX POSIX 的兼容。的兼容。Linux Linux 具备现代一切功能完整的具备现代一切功能完整的 UNIX UNIX 系统所具备的全部特征,其中包括系统所具备的全部特征,其中包括真正的多任务、虚拟内存、共享库、需求装载、共享的写时复制程序真正的多任务、虚拟内存、共享库、需求装载、共享的写时复制程序执行、优秀的内存管理以及执行、优秀的内存管理以及 TCP/IP TCP/IP 网络支持等。网络支持等。Linux Linux 的发行遵守的发行遵守 GNU GNU 的通用公共许可证。的通用公共许可证。Linux Linux 起初为基于起初为基于 386/486 386/486 的的 PC PC 机开发,但现在,机开发,但现在,Linux Linux 也可以运行在也可以运行在 DEC AlphaDEC Alpha、SUN SparcSUN Sparc、M68000M68000,以及,以及MIPS MIPS 和和 PowerPC PowerPC 等计算机上。等计算机上。1.0 Unix回顾回顾(续续)n n POSIX 及其重要地位n nPOSIX POSIX 表示可移植操作系统接口(表示可移植操作系统接口(Portable Operating System Interface Portable Operating System Interface,缩写为,缩写为 POSIX POSIX 是为了读音更像是为了读音更像 UNIX UNIX)。电气和电子工程师协会)。电气和电子工程师协会(Institute of Electrical and Electronics EngineersInstitute of Electrical and Electronics Engineers,IEEEIEEE)最初开发)最初开发 POSIX POSIX 标准,是为了提高标准,是为了提高 UNIX UNIX 环境下应用程序的可移植性。然而,环境下应用程序的可移植性。然而,POSIX POSIX 并不局限于并不局限于 UNIX UNIX。许多其它的操作系统,例如。许多其它的操作系统,例如 DEC DEC OpenVMS OpenVMS 和和 Microsoft Windows NT Microsoft Windows NT,都支持,都支持 POSIX POSIX 标准,尤其是标准,尤其是 IEEE Std.1003.1-1990IEEE Std.1003.1-1990(1995 1995 年修订)或年修订)或 POSIX.1 POSIX.1,POSIX.1 POSIX.1 提供了源提供了源代码级别的代码级别的 C C 语言应用编程接口(语言应用编程接口(APIAPI)给操作系统的服务程序,例)给操作系统的服务程序,例如读写文件。如读写文件。POSIX.1 POSIX.1 已经被国际标准化组织(已经被国际标准化组织(International Standards International Standards OrganizationOrganization,ISOISO)所接受,被命名为)所接受,被命名为 ISO/IEC 9945-1:1990 ISO/IEC 9945-1:1990 标准。标准。1.0 Unix回顾回顾(续续)n nGNU 和 Linux 的关系GNU GNU 是是 GNU Is Not UNIX GNU Is Not UNIX 的递归缩写,是自由软件基金会的一个项目,该项目的的递归缩写,是自由软件基金会的一个项目,该项目的目标是开发一个自由的目标是开发一个自由的 UNIX UNIX 版本,这一版本,这一 UNIX UNIX 版本称为版本称为 HURD HURD。尽管。尽管 HURD HURD 尚未完成,但尚未完成,但 GNU GNU 项目已经开发了许多高质量的编程工具,包括项目已经开发了许多高质量的编程工具,包括 emacs emacs 编辑器、编辑器、著名的著名的 GNU C GNU C 和和 C+C+编译器(编译器(gcc gcc 和和 g+g+),这些编译器可以在任何计算机系),这些编译器可以在任何计算机系统上运行。所有的统上运行。所有的 GNU GNU 软件和派生工作均适用软件和派生工作均适用 GNU GNU 通用公共许可证,即通用公共许可证,即 GPL GPL。GPL GPL 允许软件作者拥有软件版权,但授予其他任何人以合法复制、发行和修改允许软件作者拥有软件版权,但授予其他任何人以合法复制、发行和修改软件的权利。软件的权利。Linux Linux 的开发使用了许多的开发使用了许多 GNU GNU 工具。工具。Linux Linux 系统上用于实现系统上用于实现 POSIX.2 POSIX.2 标准的工具几标准的工具几乎都是乎都是 GNU GNU 项目开发的,项目开发的,Linux Linux 内核、内核、GNU GNU 工具以及其他一些自由软件组成了工具以及其他一些自由软件组成了人们常说的人们常说的 Linux Linux:*符合符合 POSIX POSIX 标准的操作系统标准的操作系统 Shell Shell 和外围工具。和外围工具。*C *C 语言编译器和其他开发工具及函数库。语言编译器和其他开发工具及函数库。*X Window *X Window 窗口系统。窗口系统。*各种应用软件,包括字处理软件、图象处理软件等。各种应用软件,包括字处理软件、图象处理软件等。*其他各种其他各种 Internet Internet 软件,包括软件,包括 FTP FTP 服务器、服务器、WWW WWW 服务器等。服务器等。*关系数据库管理系统等。关系数据库管理系统等。1.0 Unix回顾回顾(续续)UNIX,GNU,Linux UNIX,GNU,Linux 的关键人物及贡献的关键人物及贡献Ken Thompson,Dennis RitchieKen Thompson,Dennis Ritchie:UNIXUNIX;60 60 年代末年代末Brian Kernighan,Dennis RitchieBrian Kernighan,Dennis Ritchie:The C Programming LanguageThe C Programming Language;70 70 年代末年代末Richard StallmanRichard Stallman:FSFFSF,GNUGNU,GPLGPL,emacsemacs,gccgcc;80 80 年代中年代中Andrew S.TanenbaumAndrew S.Tanenbaum:MINIXMINIX,Operating Systems:Design and ImplementationOperating Systems:Design and Implementation;80 80 年代末,年代末,9090年代初年代初Linus TorvaldsLinus Torvalds:LinuxLinux;90 90 年代年代Eric RaymondEric Raymond:黑客文化简史,如何成为一名黑客,大教堂和市集,开拓智:黑客文化简史,如何成为一名黑客,大教堂和市集,开拓智域,魔法大锅炉域,魔法大锅炉Linux Linux 发展的重要里程碑发展的重要里程碑1990,Linus Torvalds 1990,Linus Torvalds 首次接触首次接触 MINIX MINIX1991 1991 中中,Linus Torvalds,Linus Torvalds 开始在开始在 MINIX MINIX 上编写各种驱动程序等操作系统内核组件上编写各种驱动程序等操作系统内核组件1991 1991 底底,Linus Torvalds,Linus Torvalds 公开了公开了 Linux Linux 内核内核1993,Linux 1.0 1993,Linux 1.0 版发行,版发行,Linux Linux 转向转向 GPL GPL 版权协议版权协议1994,Linux 1994,Linux 的第一个商业发行版的第一个商业发行版 Slackware Slackware 问世问世1996,1996,美国国家标准技术局的计算机系统实验室确认美国国家标准技术局的计算机系统实验室确认 Linux Linux 版本版本 1.2.13 1.2.13符合符合 POSIX POSIX 标准标准1999,Linux 1999,Linux 的简体中文发行版相继问世的简体中文发行版相继问世2000 2000 中中,LinuxWorld China 2000,LinuxWorld China 2000 展览会召开,涌现大量基于展览会召开,涌现大量基于 Linux Linux 的嵌入式系统。的嵌入式系统。1.0 Unix回顾回顾(续续)n nLinux Linux 与主要与主要 UNIX UNIX 系统之间的关系系统之间的关系UNIX UNIX 是七十年代由是七十年代由 AT&T AT&T 的的 Bell Bell 实验室开发的。实验室开发的。Bell Bell 实验室继续进行实验室继续进行 UNIX UNIX 的开发工作,的开发工作,发行了几个版本的发行了几个版本的 UNIX UNIX:System V System V 第一版(第一版(SVR1SVR1)、)、SVR2SVR2、SVR3SVR3、SVR4 SVR4 和后来的和后来的 System IIISystem III。在维护和发展在维护和发展 UNIX UNIX 过程中,过程中,Bell Bell 实验室将实验室将 UNIX UNIX 的源代码向教育界公开。许多学校接受的源代码向教育界公开。许多学校接受了了 UNIX UNIX 的拷贝,并向操作系统增加了许多新特性,的拷贝,并向操作系统增加了许多新特性,California California 大学的大学的 Berkeley Berkeley 分校就是分校就是其中一个。最终,该学校发行了自己的其中一个。最终,该学校发行了自己的 UNIX UNIX 版本,称为版本,称为 Berkeley Software Berkeley Software DistributionDistribution(BSDBSD)UNIXUNIX。BSD UNIX BSD UNIX 使用最广泛的版本是使用最广泛的版本是 4.3 4.3 和和 4.4 4.4(称为(称为 4.4BSD 4.4BSD)。)。到到 4.4BSD UNIX 4.4BSD UNIX 分布时,这个版本中已经很少有最初分布时,这个版本中已经很少有最初 Bell Bell 实验室的实验室的 UNIX UNIX 代码了。不久,代码了。不久,几个小组相继编写了新的代码,替换掉几个小组相继编写了新的代码,替换掉 Bell Bell 实验室代码的剩余那部分,使实验室代码的剩余那部分,使 BSD UNIX BSD UNIX 适合在适合在 Intel 386 Intel 386 处理器上运行。这导致了用于处理器上运行。这导致了用于 Intel PC Intel PC 的免费的的免费的 BSD UNIX BSD UNIX 的的 FreeBSD FreeBSD 和和 NetBSD NetBSD 版本的出现。版本的出现。Linux Linux 不仅符合不仅符合 POSIX POSIX 标准,而且还包括其它标准,而且还包括其它 UNIX UNIX 标准的多种特性,例如,标准的多种特性,例如,UNIX UNIX 的的 System V System V 接口文档(接口文档(System V Interface DocumentSystem V Interface Document,SVIDSVID)和伯克利软件发布()和伯克利软件发布(Berkeley Berkeley Software DistributionSoftware Distribution,BSDBSD)版本。)版本。Linux Linux 采用了折衷的策略,包含了采用了折衷的策略,包含了 UNIX UNIX 几个典型特几个典型特性当中最实用的一些功能:性当中最实用的一些功能:*Linux *Linux 采用了采用了 SVR4 SVR4 的进程间通信(的进程间通信(IPCIPC)机制:共享内存、消息队列、信号灯)机制:共享内存、消息队列、信号灯 *Linux *Linux 支持支持 BSD Socket BSD Socket 网络编程接口网络编程接口 *许多许多 Linux Linux 发行版采用发行版采用 SysV init SysV init 机制,支持运行级别机制,支持运行级别1.0 Unix回顾回顾(续续)n nLinux 与 Windows 操作系统 *开放与封闭 *大视野与小圈子 *创新与跟随1.1 Unix哲学基础哲学基础 n nUnix哲学起源于Ken Thompson早期关于如何设计一个服务接口简洁、小巧精干的操作系统的思考,随着Unix文化在学习如何尽可能发掘Thompson设计思想的过程中不断成长,同时一路上还从其它许多地方博采众长。n nUnix哲学说来不算是一种正规设计方法。它并不打算从计算机科学的理论高度来产生理论上完美的软件。n nUnix哲学(同其它工程领域的民间传统一样)是自下而上的,而不是自上而下的。n nUnix哲学注重实效,立足于丰富的经验。Doug McIlroy 如是如是说说n nUnixUnix管道的发明人、管道的发明人、UnixUnix传统的奠基人之一传统的奠基人之一Doug Doug McIlroyMcIlroy曾经说过:曾经说过:n n1 1、让每个程序就做好一件事。如果有新任务,就重新开始,让每个程序就做好一件事。如果有新任务,就重新开始,不要往原程序中加入新功能而搞得复杂。不要往原程序中加入新功能而搞得复杂。n n2 2、假定每个程序的输出都会成为另一个程序的输入,哪怕那、假定每个程序的输出都会成为另一个程序的输入,哪怕那个程序还是未知的。输出中不要有无关的信息。避免使用严个程序还是未知的。输出中不要有无关的信息。避免使用严格的分栏格式和二进制格式输入。不要坚持使用交互式。格的分栏格式和二进制格式输入。不要坚持使用交互式。n n3 3、尽可能早地将设计和编译的软件投入试用,哪怕是操作系尽可能早地将设计和编译的软件投入试用,哪怕是操作系统也不例外,理想情况下,应该是在几星期内。对拙劣的代统也不例外,理想情况下,应该是在几星期内。对拙劣的代码别犹豫,扔掉重写。码别犹豫,扔掉重写。n n4 4、优先使用工具而不是拙劣的帮助来减轻编程任务的负担。优先使用工具而不是拙劣的帮助来减轻编程任务的负担。工欲善其事,必先利其器。工欲善其事,必先利其器。n n后来他这样总结后来他这样总结道:道:n nUnixUnix哲学是这样的:一个程序只做一件事,并做好。程序要哲学是这样的:一个程序只做一件事,并做好。程序要能协作。程序要能处理文本流,因为这是最通用的接口。能协作。程序要能处理文本流,因为这是最通用的接口。Rob Pike 如是如是说说n nRob PikeRob Pike,最伟大的最伟大的C C语言大师之一,语言大师之一,在在Notes on C Notes on C ProgrammingProgramming中从另一个角度表述了中从另一个角度表述了UnixUnix的哲学:的哲学:n n原则原则1 1:你无法断定程序会在什么地方耗费运行时间。瓶颈经:你无法断定程序会在什么地方耗费运行时间。瓶颈经常出现在想不到的地方,所以别急于胡乱找个地方改代码,常出现在想不到的地方,所以别急于胡乱找个地方改代码,除非你已经证实那儿就是瓶颈所在。除非你已经证实那儿就是瓶颈所在。n n原则原则2 2:估量。在你没对代码进行估量,特别是没找到最耗时:估量。在你没对代码进行估量,特别是没找到最耗时的那部分之前,别去优化速度。的那部分之前,别去优化速度。n n原则原则3 3:花哨的算法在:花哨的算法在n n很小时通常很慢,而很小时通常很慢,而n n通常很小。花哨通常很小。花哨算法的常数复杂度很大。除非你确定算法的常数复杂度很大。除非你确定n n总是很大,否则不要用总是很大,否则不要用花哨算法(即使花哨算法(即使n n很大,也优先考虑原则很大,也优先考虑原则2 2)。)。n n原则原则4 4:花哨的算法比简单算法更容易出:花哨的算法比简单算法更容易出bugbug、更难实现。尽更难实现。尽量使用简单的算法配合简单的数据结构。量使用简单的算法配合简单的数据结构。n n原则原则5 5:数据压倒一切。如果已经选择了正确的数据结构并且:数据压倒一切。如果已经选择了正确的数据结构并且把一切都组织得井井有条,正确的算法也就不言自明。编程把一切都组织得井井有条,正确的算法也就不言自明。编程的核心是数据结构,而不是算法。的核心是数据结构,而不是算法。n n原则原则6 6:没有原则:没有原则6.6.拿不准就穷举拿不准就穷举n nKen ThompsonUnix最初版本的设计者和实现者,对Pike的原则4作了强调:n n拿不准就穷举。拿不准就穷举。1.2 Unix哲学的概括哲学的概括n n1.1.模块原则:使用简洁的接口拼合简单的部件。模块原则:使用简洁的接口拼合简单的部件。n n2.2.清晰原则:清晰胜于机巧。清晰原则:清晰胜于机巧。n n3.3.组合原则:设计时考虑拼接组合。组合原则:设计时考虑拼接组合。n n4.4.分离原则:策略同机制分离,接口同引擎分离。分离原则:策略同机制分离,接口同引擎分离。n n5.5.简洁原则:设计要简洁,复杂度能低则低。简洁原则:设计要简洁,复杂度能低则低。n n6.6.吝啬原则:除非确无它法,不要编写庞大的程序。吝啬原则:除非确无它法,不要编写庞大的程序。n n7.7.透明原则:设计要可见,以便审查和调试。透明原则:设计要可见,以便审查和调试。n n8.8.健壮原则:健壮源于透明与简洁。健壮原则:健壮源于透明与简洁。n n9.9.表示原则:把知识叠入数据以求逻辑质朴而健壮。表示原则:把知识叠入数据以求逻辑质朴而健壮。1.2 Unix哲学的概括(续)哲学的概括(续)n n10.10.通俗原则:接口设计避免标新立异。通俗原则:接口设计避免标新立异。n n11.11.缄默原则:如果一个程序没什么好说的,就沉默。缄默原则:如果一个程序没什么好说的,就沉默。n n12.12.补救原则:出现异常时马上退出并给出足够信息。补救原则:出现异常时马上退出并给出足够信息。n n13.13.经济原则:宁花机器一分,不花程序员一秒。经济原则:宁花机器一分,不花程序员一秒。n n14.14.生成原则:避免手工生成原则:避免手工hackhack,尽量编写程序去生成程尽量编写程序去生成程序。序。n n15.15.优化原则:雕琢前先要有原型,跑之前先学会走。优化原则:雕琢前先要有原型,跑之前先学会走。n n16.16.多样原则:决不相信所谓多样原则:决不相信所谓“不二法门不二法门”的断言。的断言。n n17.17.扩展原则:设计着眼未来,未来总比预想来得快。扩展原则:设计着眼未来,未来总比预想来得快。Unix哲学之一言以蔽之哲学之一言以蔽之 n n所有的Unix哲学浓缩为一条铁律,那就是各地编程大师们奉为圭臬的“KISS”原则:K.I.S.S(Keep it simple,stupid!)n n或者Simple is Beautiful1.3 应用应用Unix哲学哲学 n n在在UnixUnix世界中,这些原则都直接来自于实践。以下列举世界中,这些原则都直接来自于实践。以下列举的只是部分内容:的只是部分内容:n n只要可行,一切都应该做成与来源和目标无关的过滤器。只要可行,一切都应该做成与来源和目标无关的过滤器。n n数据流应尽可能文本化数据流应尽可能文本化(便于使用标准工具来查看和过滤便于使用标准工具来查看和过滤)。n n数据库部署和应用协议应尽可能文本化数据库部署和应用协议应尽可能文本化(便于阅读和编辑便于阅读和编辑)。n n复杂的前端(用户界面)和后端应该泾渭分明。复杂的前端(用户界面)和后端应该泾渭分明。n n如果可能,用如果可能,用C C编写前,先用解释性语言搭建原型。编写前,先用解释性语言搭建原型。n n当且仅当只用一门语言编程会提高程序复杂度时,混用语言当且仅当只用一门语言编程会提高程序复杂度时,混用语言编程才比单一语言编程来得好。编程才比单一语言编程来得好。n n宽收严发(对接收的东西要包容,对输出的东西要严格)。宽收严发(对接收的东西要包容,对输出的东西要严格)。n n过滤时,不需要丢弃的信息决不丢。过滤时,不需要丢弃的信息决不丢。n n小就是美。在确保完成任务的基础上,程序功能尽可能少。小就是美。在确保完成任务的基础上,程序功能尽可能少。1.4 反对学习反对学习Unix文化的理由文化的理由 n nUnixUnix的耐用性及其技术文化对于喜爱的耐用性及其技术文化对于喜爱UnixUnix的人们、以及的人们、以及技术史家来说肯定颇为有趣。但是技术史家来说肯定颇为有趣。但是,UnixUnix的本源用途的本源用途作为大中型计算机的通用分时系统,由于受到个人机、作为大中型计算机的通用分时系统,由于受到个人机、工作站的围剿,工作站的围剿,“正在退出舞台正在退出舞台”。因而。因而UnixUnix究竟能否在究竟能否在目前被目前被MicrosoftMicrosoft主宰的主流商务桌面市场上取得成功,主宰的主流商务桌面市场上取得成功,人们自然也存在着一定的疑问。人们自然也存在着一定的疑问。n n外行常常把外行常常把UnixUnix当作是教学用的玩具或者是黑客的沙盒当作是教学用的玩具或者是黑客的沙盒而不屑一而不屑一顾顾。即使即使在在UnixUnix世界里,世界里,UnixUnix的通用性也一的通用性也一直受到怀疑。在持怀疑态度的外行人眼中,直受到怀疑。在持怀疑态度的外行人眼中,UnixUnix很有用,很有用,不会消亡,但只能是个小众的操作系统。不会消亡,但只能是个小众的操作系统。n n挫挫败这败这些些怀怀疑者的不是疑者的不是别别的,正是的,正是LinuxLinux和其它开源和其它开源UnixUnix的崛起。的崛起。UnixUnix文化是如此的有生命力,即使十几年文化是如此的有生命力,即使十几年的管理不善也的管理不善也丝丝毫未箝制它的勃勃生机。毫未箝制它的勃勃生机。现现在在UnixUnix社区社区自身正快速而有效地解决自身正快速而有效地解决着着UnixUnix的的问题问题。1.5 Unix之失之失 n n对于一个始于1969年的设计来说,在Unix设计中居然很难找到硬伤,这着实令人称奇。n nUnix的遗风:原本是为技术人员设计的操作系统;最终用户永远比操作系统设计人员更清楚他们究竟需要什么。n nUnix文件在字节层次以上再无结构可言。文件删除了就没法恢复。Unix的安全模型公认地太过原始。作业控制有欠精致。命名方式非常混乱。2.Linux编程常识编程常识n n 2.1 标准(ANSI C,POSIX,SVID,XPG,.)n n 2.2 函数库和系统调用n n 2.3 在线文档(man,info,HOW-TO,.)n n 2.4 C 语言编程风格n n 2.5 库和头文件的保存位置n n 2.6 共享库及其相关配置 2.1 标准标准(ANSI C,POSIX,SVID,XPG,.)n nANSI CANSI Cn n这一标准是这一标准是 ANSI ANSI(美国国家标准局)于(美国国家标准局)于 1989 1989 年制定年制定的的 C C 语言标准。语言标准。后来被后来被 ISO ISO(国际标准化组织)接(国际标准化组织)接受为标准,因此也称为受为标准,因此也称为 ISO C ISO C。ANSI C ANSI C 的目标是为的目标是为各种操作系统上的各种操作系统上的 C C 程序提供可移植性保证,而不程序提供可移植性保证,而不仅仅限于仅仅限于 UNIX UNIX。该标准不仅定义了该标准不仅定义了 C C 编程语言的编程语言的语发和语义,而且还定义了一个标准库。这个库可以语发和语义,而且还定义了一个标准库。这个库可以根据根据 头文件划分为头文件划分为 15 15 个部分,其中包括:字符类型个部分,其中包括:字符类型 ()()、错误码、错误码()()、浮点常数浮点常数 ()()、数学常数、数学常数()()、标准定义、标准定义 ()()、标准标准 I/O()I/O()、工具函数、工具函数 ()()、字符串操作、字符串操作()()、时间和日期时间和日期 ()()、可变参数表、可变参数表()()、信号、信号 ()()、非局部跳转非局部跳转()()、本地信息、本地信息 ()()、程序断言、程序断言()()等等。等等。2.1 标准标准(ANSI C,POSIX,SVID,XPG,.)n nPOSIX:n n该标准最初由该标准最初由 IEEE IEEE 开发的标准族,部分已经开发的标准族,部分已经被被 ISO ISO 接受为国际标准。该标准的具体内容接受为国际标准。该标准的具体内容 见见 1.1.31.1.3。POSIX.1 POSIX.1 和和 POSIX.2 POSIX.2 分别定义了分别定义了 POSIX POSIX 兼容操作系统的兼容操作系统的 C C 语言系统接口语言系统接口 以及以及 shell shell 和和工具标准。这两个标准是通常提到的标准。工具标准。这两个标准是通常提到的标准。1.4.1 标准(ANSI C,POSIX,SVID,XPG,.)*ANSI C:这一标准是 ANSI(美国国家标准局)于 1989 年制定的 C 语言标准。后来被 ISO(国际标准化组织)接受为标准,因此也称为 ISO C。ANSI C 的目标是为各种操作系统上的 C 程序提供可移植性保证,而不仅仅限于 UNIX。该标准不仅定义了 C 编程语言的语发和语义,而且还定义了一个标准库。这个库可以根据 头文件划分为 15 个部分,其中包括:字符类型()、错误码()、浮点常数()、数学常数()、标准定义()、标准 I/O()、工具函数()、字符串操作()、时间和日期()、可变参数表()、信号()、非局部跳转()、本地信息()、程序断言()等等。*POSIX:该标准最初由 IEEE 开发的标准族,部分已经被 ISO 接受为国际标准。该标准的具体内容 见 1.1.3。POSIX.1 和 POSIX.2 分别定义了 POSIX 兼容操作系统的 C 语言系统接口 以及 shell 和工具标准。这两个标准是通常提到的标准。*SVID:System V 的接口描述。System V 接口描述(SVID)是描述 AT&T Unix System V 操作 系统的文档,是对 POSIX 标准的扩展超集。*XPG:X/Open 可移植性指南。X/Open 可移植性指南(由 X/Open Company,Ltd.出版),是比 POSIX 更为一般的标准。X/Open 拥有 Unix 的版权,而 XPG 则指定成为 Unix 操作系统必须满足的要求。1.4.2 函数库和系统调用1.glibc众所周知,C 语言并没有为常见的操作,例如输入/输出、内存管理,字符串操作等提供内置的支持。相反,这些功能一般由标准的“函数库”来提供。GNU 的 C 函数库,即 glibc,是 Linux 上最重要的函数库,它定义了 ISO C 标准指定的所有的库函数,以及由 POSIX 或其他 UNIX 操作系统统变种指定的附加特色,还包括有与 GNU 系统相关的扩展。目前,流行的 Linux 系统使用 glibc 2.0 以上的版本。glibc 基于如下标准:*ISO C *POSIX *Berkeley Unix *SVID *XPG1.4.2 函数库和系统调用2.其他重要函数库除 glibc 之外,流行的 Linux 发行版中还包含有一些其他的函数库,这些函数库具有重要地位,例如:*GNU Libtool:GNU Libtool 实际是一个脚本生成工具,它可以为软件包开发者提供一般性 的共享库支持。以前,如果源代码包的开发者要利用共享库的优点,则必须为每个软件包可支持的平台编写 定制的支持代码。并且还需要设计配置接口,以便软件包的安装程序能够正确选择要建立的 库类型。利用 GNU Libtool,则可以简化开发者的这一工作。它在一个单独的脚本中同时封装 了与平台相关的依赖性以及用户界面。GNU Libtool 可使每个宿主类型的完整功能可通过 一般性的接口获得,同时为程序员隐藏了宿主的特殊性。GNU Libtool 一致性接口是可靠的,用户不必阅读那些晦涩的文档,以便在每个平台上建立共享库。他们只需运行软件包的配置 脚本,而由 libtool 完成繁复的工作。*CrackLib:CrackLib 为用户提供了一个 C 语言函数接口,利用这一函数,可避免用户选择 容易破解的密码。该函数库可在类似 passwd 的程序中使用。*LibGTop:LibGTop 是一个能够获取进程信息以及系统运行信息的函数库,这些信息包括:系统的一般信息、SYS V IPC 限制、进程列表、进程信息、进程映射、文件系统使用信息等。*图形文件操作函数库:包括 libungif、libtiff、libpng、Imlib,libjpeg 等,可分别用来操作 GIF、TIFF、PNG、JPEG 以及其他一些格式图形文件。1.4.2 函数库和系统调用3.系统调用系统调用是操作系统提供给外部程序的接口。在 C 语言中,操作系统的系统调用通常通过函数调用的形式完成,这是因为这些函数封装了系统调用的细节,将系统调用的入口、参数以及返回值用 C 语言的函数调用过程实现。在 Linux 系统中,系统调用函数定义在 glibc 中。谈到系统调用时,需要注意如下几点:*系统调用函数通常在成功时返回 0 值,不成功时返回非零值。如果要检查失败原因,则 要判断 errno 这个全局变量的值,errno 中包含有错误代码。*许多系统调用的返回数据通常通过引用参数传递。这时,需要在函数参数中传递一个 缓冲区地址,而返回的数据就保存在该缓冲区中。*不能认为系统调用函数就要比其他函数的执行效率高。要注意,系统调用是一个非常耗时 的过程。有关系统调用我们将在以后详细讲述。1.4.3 在线文档(man,info,HOW-TO.)1.manman,即 manunal,是 UNIX 系统手册的电子版本。根据习惯,UNIX 系统手册通常分为不同的部分(或小节,即 section),每个小节阐述不同的系统内容。目前的小节划分如下:1.命令:普通用户命令 2.系统调用:内核接口 3.函数库调用:普通函数库中的函数 4.特殊文件:/dev 目录中的特殊文件 5.文件格式和约定:/etc/passwd 等文件的格式 6.游戏。7.杂项和约定:标准文件系统布局、手册页结构等杂项内容 8.系统管理命令。9.内核例程:非标准的手册小节。便于 Linux 内核的开发而包含常用命令行:$man open$man 7 man1.4.3 在线文档(man,info,HOW-TO.)2.infoLinux 中的大多数软件开发工具都是来自自由软件基金会的 GNU 项目,这些工具软件件的在线文档都以 info 文件的形式存在。info 程序是 GNU 的超文本帮助系统。info 文档一般保存在/usr/info 目录下,使用 info 命令查看 info 文档。要运行 info,可以在 shell 提示符后输入 info,也可以在 GNU 的 emacs 中键入 Esc-x 后跟 info。info 帮助系统的初始屏幕显示了一个主题目录,你可以将光标移动到带有*的主题菜单上面,然后按回车键进入该主题,也可以键入 m,后跟主题菜单的名称而进入该主题。例如,你可以键入 m,然后再键入 gcc 而进进入 gcc 主题中。如果你要在主题之间跳转,则必须记住如下的几个命令键:*m:指定菜单名而选择另外一个节点;*l:进入该窗口中的最后一个节点;*RET:进入光标处的超文本链接;*u:转到上一级主题;*d:回到 info 的初始节点目录;*h:调出 info 教程;*q:退出 info。#DEMO#1.4.3 在线文档(man,info,HOW-TO.)3.HOW-TO可供用户参考的联机文档的另一种形式是 HOWTO 文件,这些文件位于系统的/usr/share/doc/目录下。HOWTO 文件的文件名都有一个-HOWTO 后缀,并且都是文本文件。每一个 HOWTO 文件包含 Linux 某一方面的信息,例如它支持的硬件或如何建立一个引导盘。http:/www.tldp.org 维护Linux 相关HOWTO的当前最新版本。4.其他Linux 的内核文档一般包含在内核源代码中,目录如下:/usr/src/linux-2.x.x/Documentation1.4.4 C 语言编程风格编写这一小节的目的是提醒大家在编程过程中注意编程风格。如果你只是在编写一些小的练习程序,程序只有一两百行长的话,编程风格可能并不重要。然而,如果你和许多人一起进行开发工作,或者,你希望在过一段时间之后,还能够正确理解自己的程序的话,就必须养成良好的编程习惯。在诸多编程习惯当中,编程风格是最重要的一项内容。良好的编程风格可以在许多方面帮助开发人员。如果你阅读过 Linux 内核源代码的话,可能会对程序的优美编排所倾倒。良好的编程风格可以增加代码的可读性,并帮助你理清头绪。如果程序非常杂乱,大概看一眼就该让你晕头转向了。编程风格最能体现一个程序员的综合素质。许多读者可能对 Windows 所推崇的匈牙利命名法很熟悉。这种方法定义了非常复杂的函数、变量、类型等的命名方法,典型的命名方法是采用大小写混写的方式,对于变量名称,则采用添加前缀的办法来表示其类型,例如:char szBuffer20;int nCount;利用 sz 和 n 分别代表字符串和整数。为了表示一个变量名称,采用如下的变量名称是可能的:int iThisIsAVeryLongVariable;在 Linux 中,我们经常看到的是定义非常简单的函数接口和变量名称。在 Linux 内核的源代码中,可以看到 Li

    注意事项

    本文(Linux编程环境1.ppt)为本站会员(qwe****56)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开