📄 00000009.htm
字号:
<HTML><HEAD> <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人: Kongming (没日没夜...), 信区: Linux <BR>标 题: Re: 如何学习linux下编程? <BR>发信站: BBS 水木清华站 (Mon Aug 2 11:27:04 1999) <BR> <BR>我为你贴一篇文章吧,简要介绍了 Linux 下的编程工具, <BR>入门是没有问题的。 <BR> <BR>这是我最近编写的书的部分内容。 <BR> <BR>严正声明: <BR>本文由 Kongming 网友享有专有版权。 <BR>版权所有,未经许可,不准随意复制、改编或变相改编、扩散。 <BR> <BR>主要包含如下内容: <BR>? GNU C、C++ 编译器 <BR>? GNU make 工具 <BR>? GNU 的调试器 <BR>? RCS 版本控制系统 <BR>并简单介绍了 Linux 系统上广为流行的 Perl 脚本语言。 <BR>对比了 Linux 和 Windows NT 两种不同的编码风格。 <BR> <BR>在 BBS 上看有些困难,拿回家慢慢看吧。 <BR> <BR> <BR> <BR>第十三章 软件开发 <BR>由于操作系统只是一个工具,对大多数读者来说,学习操作系统的最终目的是利用操 <BR>作系统上的应用软件完成自己的工作,或者利用开发工具开发应用程序。因此,对一个操 <BR>作系统来说,可获得的开发工具,以及这些开发工具是否有效,就成为评价操作系统的一 <BR>个重要因素。 <BR>这一部分的后三章将主要从开发人员的角度比较 Linux 和 Windows NT。本章的主要 <BR>内容如下: <BR>? 介绍操作系统为开发人员提供的各种系统服务; <BR>? 介绍操作系统上的主要开发工具。 <BR>考虑到许多读者可能对 Linux 上的开发工具了解不多,因此,本章将介绍一些 Linux <BR>上常用的开发工具。当然,软件开发并不是区区一章就能够讲得清楚的,更多的需要读者 <BR>自己去实践。 <BR>13.1 POSIX 标准和操作系统接口 <BR>13.1.1 Linux 和 Windows NT 对 POSIX 标准的支持 <BR>从第一章的内容我们知道,POSIX 是一种标准,主要定义了操作系统的系统调用接口, <BR>POSIX 标准最初为提高 UNIX 系统之间的移植性而开发。Linux 是一种 POSIX 兼容系统, <BR>而 Windows NT 中包含了 POSIX 子系统。但这两个操作系统的 POSIX 之间有什么区别呢? <BR>POSIX 是由非常复杂的标准体系组成的,其中广为接受的 POSIX 标准是 POSIX.1 标 <BR>准。POSIX.1 是一个源代码级的兼容性标准,提供了操作系统的 C 语言编程接口,内容 <BR>涉及到POSIX.1a(系统接口扩展),POSIX.1b(实时),POSIX.1c(线程),POSIX.1d(实 <BR>时扩展),POSIX.1e(安全性),POSIX.1f(透明文件访问),POSIX.1g(协议无关服务) <BR>以及POSIX.1h(容错)等。POSIX 的另外一个重要标准是POSIX.2 标准,它定义了操作 <BR>系统的 Shell 和工具标准。通常谈到的 POSIX 标准就是这两个标准。Linux 支持完整的 <BR>POSIX.1 和 POSIX.2 标准;而 Windows NT 只提供对 POSIX.1 的支持,而且是一个不完 <BR>整的系统,许多方面(例如 I/O)需要 Win32 API 来完成。实际上,Windows NT 的许多 <BR>POSIX.1 接口是通过 Win32 API 间接实现的。 <BR>Windows NT 中的 POSIX.1 版本基本上没有什么用处,在 Visual Studio 6.0 中, <BR>甚至取消了对 POSIX.1 的支持。如果读者要在 Windows NT 上进行一些 POSIX 的开发工 <BR>作,建议不要使用 Windows NT POSXI.1。用户可以使用第三方POSIX 系统,或者由 GNU 提 <BR>供的 GNU Win32 工具。这些产品提供了更强大的功能,例如 Software System Inc. 的 <BR>POSIX.2 工具箱(OpenNT)具有如下特征:真正的 UNIX Shell,以及在 Windows NT 中 <BR>运行 X Window 的能力等。这些软件为 Windows NT 的非完整 POSIX.1 系统增加了如下 <BR>特性: <BR>? POSIX.1、POSIX.2 和 ANSI C 接口; <BR>? 可在 Intel 和 Alpha 平台上使用; <BR>? BSD 套接字支持; <BR>? System V 的共享内存和信号灯 IPC 机制; <BR>? X11R5 客户、库和头文件; <BR>? OPENNTIF(OSF/Motif 1.2.4 窗口管理器和开发库); <BR>? Color curses库; <BR>? 完整的 Shell 作业管理; <BR>? 磁带设备支持; <BR>? UNIX 开发工具:make、rcs、yacc、lex、cc、c89、nm、ar、strip 等。 <BR>GNU Win32 是针对 x86 和 PowerPC 的 Windows NT/95 的 GNU 开发工具。使用这些 <BR>开发工具开发的应用程序能够访问 Microsoft Win32 API,也能访问 Cygwin32 API,它 <BR>提供了附加的类似 UNIX 的功能,包括 UNIX 套接字和进程控制等。利用这些工具,可增 <BR>强 Windows NT 上 POSIX 子系统: <BR>? 利用标准的 Microsoft Win32 API 或/和 Cygwin32 API 编写 Win32 控制台或 <BR>GUI应用程序; <BR>? 能够方便地从源代码中配置和建立许多 GNU 工具,包括 GNU Win32 开发工具 <BR>本身; <BR>? 可将许多重要的 UNIX 工具移植到 Windows NT 而不用对源代码进行大规模修 <BR>改; <BR>? 包含有相当完整的 UNIX 环境工具,可使用许多普通的 UNIX 系统工具。 <BR>有关上述这两种软件,读者可访问如下站点: <BR><A HREF="http://www.softway.com/OpenNT/homet.htm">http://www.softway.com/OpenNT/homet.htm</A> <BR>htt://www.cygus.com/misc/gnu.win32 <BR>和 Windows NT 相反的是,Linux 是一个 POSIX.1标准的完全兼容系统。Linux 上 <BR>的 POSIX.2 标准实现是由 GNU 工具和函数库提供的,其中最主要的 C 函数库是 glibc。 <BR>该函数库包含如下内容: <BR>? ISO C:C 编程语言的国际标准。GNU C 函数库与美国国家标准局(ANSI)公布 <BR>的 C 标准兼容。这一标准后来被国际标准化组织所接收(ISO/IEC 9899:1990)。 <BR>? POSIX:操作系统的 ISO/IEC 9945(即 IEEE 1003)标准。GNU C 函数库实现了 <BR>ISO/IEC 9945-1:1996 (POSIX 系统应用程序编程接口,即 POSIX.1)指定的 <BR>所有函数。该标准是对 ISO C 的扩展,包括文件系统接口原语、设备相关的终 <BR>端控制函数以及进程控制函数。同时,GUN C 函数库还支持部分由 ISO/IEC <BR>9945-2:1993(POSIX Shell 和 工具标准,即 POSIX.2)指定的函数,其中包 <BR>括用于处理正则表达式和模式匹配的函数。 <BR>? Berkeley Unix:BSD 和 SunOS。GNU C 函数库定义了某些 UNIX 版本中尚未标 <BR>准化的函数,尤其是 4.2 BSD, 4.3 BSD, 4.4 BSD Unix 系统(即“Berkeley Unix”) <BR>以及“SunOS”(大众化的 4.2 BSD 变种,其中包含有某些Unix System V 的功 <BR>能)。BSD 函数包括符号链接、select 函数、BSD 信号处理函数以及套接字等 <BR>等。 <BR>? SVID:System V 的接口描述。System V 接口描述(SVID)是描述 AT&T Unix System <BR>V 操作系统的文档,它是对 POSIX 标准的扩展超集。GNU C 函数库定义了大多 <BR>数由 SVID 指定而未被 ISO C 和 POSIX 标准指定的函数。来自 System V 的 <BR>支持函数包括进程间通信和共享内存、hsearch 和 drand48 函数族、fmtmsg 以 <BR>及一些数学函数。 <BR>? XPG:X/Open 可移植性指南。X/Open 可移植性指南(由 X/Open Company, Ltd. <BR>出版),是比 POSIX 更为一般的标准。X/Open 拥有 Unix 的版权,而 XPG 则 <BR>指定成为 Unix 操作系统必须满足的需求。GNU C 函数库遵循 X/Open 可移植 <BR>性指南(Issue 4.2)以及所有的 XSI(X/Open 系统接口)兼容系统的扩展, <BR>同时也遵循所有的 X/Open Unix 扩展。 <BR>同时,Linux 也包含有许多字符界面管理、网络协议处理以及图形图象处理的函数库, <BR>这些函数库均作为一般 Linux 商业发行版的一部分而一同发行。有关这些函数库的详细 <BR>介绍,读者可参阅附录 C。 <BR>实际上,Microsoft 并没有打算自己的操作系统做到与 UNIX 完全兼容,如果读者看 <BR>到过由微软(中国)有限公司编著的《Microsoft SQL Server 6.5 技术参考》(科学出版 <BR>社、龙门书局 1997 年出版)一书,就可以明白微软和 UNIX 阵营的激烈竞争。既然 <BR>Microsoft 在该书中说 UNIX 如何如何不好,当然就不会对来自 UNIX 的 POSIX 有什么 <BR>好的支持了。 <BR>那么,Windows NT 的操作系统接口包括哪些内容呢? <BR>13.1.2 Windows NT 的操作系统接口 <BR>Windows NT 的操作系统服务主要体现在 Win32 API 上,大体可分为如下几类: <BR>? 窗口管理。应用程序可用来创建和管理窗口的部分,涉及到窗口、消息、消息 <BR>队列、控件、对话框、鼠标和键盘输入、定时器、菜单、键盘加速键以及其他 <BR>与窗口管理有关的内容。 <BR>? 图形设备接口。应用程序用来实现设备无关图形的部分,涉及到设备描述表、 <BR>坐标转换、元文件、位图、图标、画刷、画笔、区域、直线和曲线、字体、颜 <BR>色、路径、剪切、打印等。 <BR>? 系统服务。应用程序用来实现基本多任务管理的 Win32 API 部分,涉及到进程 <BR>和线程、内存管理、网络、动态链接、安全性以及其他有关系统的内容。 <BR>? 多媒体服务。Win32 API 中多媒体支持,涉及到音频、视频、媒体控制、多媒 <BR>体文件输入和输出以及增强的定时器功能等。 <BR>? 扩展库。为 Win32 API 额外增加的库,涉及到公用对话框、简化动态数据交换 <BR>(DDE)的管理函数、Shell 中增强的拖放操作、文件安装函数以及数据解压缩 <BR>函数。 <BR>可明显看出,POSIX 和 Win32API 是两个完全不同的操作系统接口体系。如果仅比较 <BR>这两个操作系统为用户提供的接口及函数库的话,可明显看到有如下特点: <BR>? 基于 POSIX 的操作系统接口部分比 Win32 的系统服务部分要简洁得多。POSIX 的 <BR>接口函数大概只有二百多个;而 Win32 的系统服务部分的函数约有上千个,而 <BR>且调用接口相对复杂。 <BR>? Linux 上除操作系统接口之外的函数库非常丰富。笔者曾经在 MS-DOS、Windows <BR>3.1、Windows 95/NT 下进行过 C/C++ 的开发工作,当我接触到 Linux 时,发 <BR>现许多原来需要自己编写程序实现的功能,Linux 上已经有的可用的函数库。 <BR>13.2 Visual Studio 和 GNU <BR>在 Windows NT 上进行开发,用户主要使用的通用开发工具有: <BR>? Microsoft Visual Studio。该开发工具包是 Microsoft 最完整的开发工具包, <BR>也是使用最为广泛的开发工具包,其中包含有 Visual C++、Visual Basic、Visual <BR>FoxPro 等开发工具。这些工具一般是集成开发环境,利用这些工具,可在一个 <BR>程序中完成编辑、编译、调试等各项工作,对提高开发效率有帮助。 <BR>? Borland C++。该工具是 Borland 公司的 C/C++ 编译器,和 Visual C++ 类似, <BR>也是一个集成环境。 <BR>? Borland Delphi。该工具是 Borland 公司开发的 Pascal 编译器,Borland 公 <BR>司为了和 Visual Basic 竞争而开发,拥有较为广泛的用户群,也是一个集成 <BR>环境。 <BR>Windows NT 上的开发工具都有一个特点,它们均是一些集成开发工具。作为一个程 <BR>序员,笔者对集成开发环境是否能够真正提高开发效率,或者能够在多大程度上提高开发 <BR>效率保持怀疑态度。因为许多程序员并不使用集成的开发环境,但也同样富有效率。Linux <BR>内核开发小组就是一个例子,在开发操作系统的时候,是无法使用集成开发工具的。使用 <BR>集成开发环境有一个缺点,就是容易让程序员养成懒惰的习惯。笔者就更加愿意在程序出 <BR>问题的时候去认真地分析程序,而不是一味依赖调试工具。 <BR>和 Windows NT 上的集成开发环境不同,Linux 上的开发工具是一些零散的 GNU 工 <BR>具。例如,程序员可能使用 VIM 编写程序,然后用 make 或 gcc 编译程序,如果程序有 <BR>错误,用 gdb 调试程序等。当然,也有一些集成的开发环境可以使用,例如 xwpe(Window <BR>Programming Environment)就是一个集成开发环境。如果使用 Emacs,程序员也可以借 <BR>助 Emacs 的强大配置能力为自己定制一个集成的开发环境。 <BR>Linux 下的程序开发还有一个特点,就是可以借助许多脚本语言构造复杂的程序。例 <BR>如,程序员可借助 Shell 脚本编写处理文件、目录的脚本程序,也可以利用 Perl <BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -