Linux编程环境1.ppt
《Linux编程环境1.ppt》由会员分享,可在线阅读,更多相关《Linux编程环境1.ppt(102页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Linux 环境下的软件开发第一章Linux 编程环境简介 1.0整体思路本讲是编程系列讲座的第一讲,主要讲述 Linux 平台上的 C 语言环境,包括编译器、调试器、Make、Diff、Patch 等。其目的是通过介绍 Linux 上 C 语言编程的基本工具 以及一些新手必须掌握的技巧,迅速引导新手入门,以避免走弯路。首先对 Linux 作一简单介绍,然后通过讲解 Linux 上进行编程的常识以及典型场景的 演示,使大家对 Linux 上的程序开发有一个感性认识。在此基础上,重点讲述 Linux 上 C 语言编程的基本工具,包括编译器和调试器,主要是它们的重要选项和基本用法。接下来讲述在项目
2、组织和开发过程中非常重要的工具,即 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 L
3、inus Torvalds 以以及网络上组织松散的黑客队伍一起从零开始编写而成。及网络上组织松散的黑客队伍一起从零开始编写而成。Linux Linux 的目标的目标是保持和是保持和 POSIX POSIX 的兼容。的兼容。Linux Linux 具备现代一切功能完整的具备现代一切功能完整的 UNIX UNIX 系统所具备的全部特征,其中包括系统所具备的全部特征,其中包括真正的多任务、虚拟内存、共享库、需求装载、共享的写时复制程序真正的多任务、虚拟内存、共享库、需求装载、共享的写时复制程序执行、优秀的内存管理以及执行、优秀的内存管理以及 TCP/IP TCP/IP 网络支持等。网络支持等。Lin
4、ux 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 表示可移植操作系统接口(表示可移植操作系统
5、接口(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
6、 环境下应用程序的可移植性。然而,环境下应用程序的可移植性。然而,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 提供了源提供了源代码级别
7、的代码级别的 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 是是
8、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+),
9、这些编译器可以在任何计算机系),这些编译器可以在任何计算机系统上运行。所有的统上运行。所有的 GNU GNU 软件和派生工作均适用软件和派生工作均适用 GNU GNU 通用公共许可证,即通用公共许可证,即 GPL GPL。GPL GPL 允许软件作者拥有软件版权,但授予其他任何人以合法复制、发行和修改允许软件作者拥有软件版权,但授予其他任何人以合法复制、发行和修改软件的权利。软件的权利。Linux Linux 的开发使用了许多的开发使用了许多 GNU GNU 工具。工具。Linux Linux 系统上用于实现系统上用于实现 POSIX.2 POSIX.2 标准的工具几标准的工具几乎都是乎都是
10、GNU GNU 项目开发的,项目开发的,Linux Linux 内核、内核、GNU GNU 工具以及其他一些自由软件组成了工具以及其他一些自由软件组成了人们常说的人们常说的 Linux Linux:*符合符合 POSIX POSIX 标准的操作系统标准的操作系统 Shell Shell 和外围工具。和外围工具。*C *C 语言编译器和其他开发工具及函数库。语言编译器和其他开发工具及函数库。*X Window *X Window 窗口系统。窗口系统。*各种应用软件,包括字处理软件、图象处理软件等。各种应用软件,包括字处理软件、图象处理软件等。*其他各种其他各种 Internet Internet
11、 软件,包括软件,包括 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
12、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 Torv
13、alds:LinuxLinux;90 90 年代年代Eric RaymondEric Raymond:黑客文化简史,如何成为一名黑客,大教堂和市集,开拓智:黑客文化简史,如何成为一名黑客,大教堂和市集,开拓智域,魔法大锅炉域,魔法大锅炉Linux Linux 发展的重要里程碑发展的重要里程碑1990,Linus Torvalds 1990,Linus Torvalds 首次接触首次接触 MINIX MINIX1991 1991 中中,Linus Torvalds,Linus Torvalds 开始在开始在 MINIX MINIX 上编写各种驱动程序等操作系统内核组件上编写各种驱动程序等操作系统
14、内核组件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 PO
15、SIX 标准标准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 实验室继续进
16、行实验室继续进行 UNIX UNIX 的开发工作,的开发工作,发行了几个版本的发行了几个版本的 UNIX UNIX:System V System V 第一版(第一版(SVR1SVR1)、)、SVR2SVR2、SVR3SVR3、SVR4 SVR4 和后来的和后来的 System IIISystem III。在维护和发展在维护和发展 UNIX UNIX 过程中,过程中,Bell Bell 实验室将实验室将 UNIX UNIX 的源代码向教育界公开。许多学校接受的源代码向教育界公开。许多学校接受了了 UNIX UNIX 的拷贝,并向操作系统增加了许多新特性,的拷贝,并向操作系统增加了许多新特性,C
17、alifornia 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 分布时,这个版
18、本中已经很少有最初分布时,这个版本中已经很少有最初 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 版本的出现。
19、版本的出现。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 Lin
20、ux 采用了折衷的策略,包含了采用了折衷的策略,包含了 UNIX UNIX 几个典型特几个典型特性当中最实用的一些功能:性当中最实用的一些功能:*Linux *Linux 采用了采用了 SVR4 SVR4 的进程间通信(的进程间通信(IPCIPC)机制:共享内存、消息队列、信号灯)机制:共享内存、消息队列、信号灯 *Linux *Linux 支持支持 BSD Socket BSD Socket 网络编程接口网络编程接口 *许多许多 Linux Linux 发行版采用发行版采用 SysV init SysV init 机制,支持运行级别机制,支持运行级别1.0 Unix回顾回顾(续续)n nLi
21、nux 与 Windows 操作系统 *开放与封闭 *大视野与小圈子 *创新与跟随1.1 Unix哲学基础哲学基础 n nUnix哲学起源于Ken Thompson早期关于如何设计一个服务接口简洁、小巧精干的操作系统的思考,随着Unix文化在学习如何尽可能发掘Thompson设计思想的过程中不断成长,同时一路上还从其它许多地方博采众长。n nUnix哲学说来不算是一种正规设计方法。它并不打算从计算机科学的理论高度来产生理论上完美的软件。n nUnix哲学(同其它工程领域的民间传统一样)是自下而上的,而不是自上而下的。n nUnix哲学注重实效,立足于丰富的经验。Doug McIlroy 如是如
22、是说说n nUnixUnix管道的发明人、管道的发明人、UnixUnix传统的奠基人之一传统的奠基人之一Doug Doug McIlroyMcIlroy曾经说过:曾经说过:n n1 1、让每个程序就做好一件事。如果有新任务,就重新开始,让每个程序就做好一件事。如果有新任务,就重新开始,不要往原程序中加入新功能而搞得复杂。不要往原程序中加入新功能而搞得复杂。n n2 2、假定每个程序的输出都会成为另一个程序的输入,哪怕那、假定每个程序的输出都会成为另一个程序的输入,哪怕那个程序还是未知的。输出中不要有无关的信息。避免使用严个程序还是未知的。输出中不要有无关的信息。避免使用严格的分栏格式和二进制格
23、式输入。不要坚持使用交互式。格的分栏格式和二进制格式输入。不要坚持使用交互式。n n3 3、尽可能早地将设计和编译的软件投入试用,哪怕是操作系尽可能早地将设计和编译的软件投入试用,哪怕是操作系统也不例外,理想情况下,应该是在几星期内。对拙劣的代统也不例外,理想情况下,应该是在几星期内。对拙劣的代码别犹豫,扔掉重写。码别犹豫,扔掉重写。n n4 4、优先使用工具而不是拙劣的帮助来减轻编程任务的负担。优先使用工具而不是拙劣的帮助来减轻编程任务的负担。工欲善其事,必先利其器。工欲善其事,必先利其器。n n后来他这样总结后来他这样总结道:道:n nUnixUnix哲学是这样的:一个程序只做一件事,并做
24、好。程序要哲学是这样的:一个程序只做一件事,并做好。程序要能协作。程序要能处理文本流,因为这是最通用的接口。能协作。程序要能处理文本流,因为这是最通用的接口。Rob Pike 如是如是说说n nRob PikeRob Pike,最伟大的最伟大的C C语言大师之一,语言大师之一,在在Notes on C Notes on C ProgrammingProgramming中从另一个角度表述了中从另一个角度表述了UnixUnix的哲学:的哲学:n n原则原则1 1:你无法断定程序会在什么地方耗费运行时间。瓶颈经:你无法断定程序会在什么地方耗费运行时间。瓶颈经常出现在想不到的地方,所以别急于胡乱找个地
25、方改代码,常出现在想不到的地方,所以别急于胡乱找个地方改代码,除非你已经证实那儿就是瓶颈所在。除非你已经证实那儿就是瓶颈所在。n n原则原则2 2:估量。在你没对代码进行估量,特别是没找到最耗时:估量。在你没对代码进行估量,特别是没找到最耗时的那部分之前,别去优化速度。的那部分之前,别去优化速度。n n原则原则3 3:花哨的算法在:花哨的算法在n n很小时通常很慢,而很小时通常很慢,而n n通常很小。花哨通常很小。花哨算法的常数复杂度很大。除非你确定算法的常数复杂度很大。除非你确定n n总是很大,否则不要用总是很大,否则不要用花哨算法(即使花哨算法(即使n n很大,也优先考虑原则很大,也优先考
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux 编程 环境
限制150内