手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网站运营>建站经验>列表

unix环境高级编程--第1章 UNIX基础知识

来源:互联网 作者:west263.com 时间:2008-04-16
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!


整数)并不

使用任何系统调用。

从实施者的角度,系统调用和库函数之间有重大区别,但从用户角度其区别并不非

常重要。

从本书的目的出发,系统调用和库函数在本书中都以正常的C函数的形式出现。两

者都对应

用程式提供服务,但是,我们应当理解,假如希望的话,我们能够代换库函数,但

是通常我

们却不能代换系统服务。

以存储器分配函数malloc为例。有多种方法能够进行存储器分配及和其相关的无用

区收集操

作(最好适应,首次适应等),并不存在对任何程式都最好的一种技术。Unix系统调

用中处理

存储器分配的是sbrk(2),他不是个通用的存储器管理器。他增加或减少指定字

节数的进

程地址空间。如何管理该地址空间却取决于进程。存储器分配函数malloc(3)实现

一种特定

类型的分配。假如我们不喜欢其操作方式,则我们能够定义自己的malloc函数,极

其可能,

他还是要调用sbrk系统调用。事实上,有很多软件包,他们实现自己的存储器分配

算法,但

仍使用sbrk系统调用。图11显示了应用程式、malloc函数连同sbrk系统调用之间

的关系。



图11〓malloc函数和sbrk系统调用

从中可见,两者职责不同,相互分开,要核中的系统调用分配另外一块空间给进程

,而库函

数malloc则管理这种空间。

另一个可说明系统调用和库函数之间的差别的例子是,Unix提供决定当前时间和日

期的界面

。某些操作系统提供一个系统调用以返回时间,而另一个则返回日期。任何特别的

处理,例

如正常时制和日光节约时制之间的转换,由系统核处理或需要人的干予。Unix则不

同,他只

提供一条系统调用,该系统调用返回国际标准时公元一九七年一月一日午夜以来

所经过的

秒数。对该值的任何解释,例如将其变换成人们可读的,使用本地时区的时间和日

期,都留

给用户进程运行。在标准C库中,提供了若干例程以处理大多数情况。这些库函数

处理各种

细节,例如各种日光节约时算法。

应用程式能够或调用系统调用,或库函数,而很多库函数则会调用系统调用。

这在图1

2中显示。

图12〓C库函数和系统调用之间的差别

另一个系统调用和库函数之间的差别是:系统调用通常提供一种最小界面,而库函

数通常提

供比较复杂的功能。我们从sbrk系统调用和malloc库函数之间的差别中看到了这一

点,在以

后当比较不带缓存的I/O库数(第3章)连同标准I/O标准(在第5章)时,我们还将看到

这种差别

。

进程控制系统调用(fork,exec和wait)通常由用户的应用程式直接调用。(请回忆程

序15中

的基本shell)但是为了简化某些常见的情况,UNIX系统也提供了一些库函数;例如

system和

popen。在812节中,我们将说明system函数的一种实现,他使用基本的进程控制

系统调用

。在1018中,我们还将强化这一实例以正确地处理信号。

为使读者了解大多数程式员应用的Unix系统界面,我们不得不既说明系统调用,只

介绍某些

库函数。例如若我们只说明sbrk系统调用,那么就会忽略很多应用程式使用的mal

loc库函数

。

在本书中,除了一定要将两者相区分时,我们都将使用术语"函数"来涉及系统调用

和库函

数两者。

112〓摘要

本章旋风式地周游了Unix。我们已说明了某些以后会多次用到的基本术语,介绍了

一些小的

Unix程式的实例,从中可想到本书的其余部分将会进一步介绍的内容。

下一章是关于Unix的标准化,连同这方面的工作对当前系统的影响。标准,特别是

ANSI C标

准和POSIX1标准将影响本书的余下部分。

习题

11〓在您的系统上查证,除根目录中外,目录·和··是不同的。

12〓分析程式14的输出,说明进程ID为852和853的进程可能是什么?

13〓在17节中,perror的参数是用ANSI C的属性const定义的,而rerror的整

型参数则

没有用此属性定义,为什么?

14〓附录B包含了出错处理函数err[CD#*2]sys,当调用该函数时,保存了errno

的值,为

什么?

15〓若日历时间存放在带符号的32位(32-bit)整型数中,那么到哪一年他将溢出

?

16〓若进程时间存放在带符号的32位(32-bit)整型数中,而且每秒为100滴答,

那么经过

多少天后该时间值将会溢出?〖LM〗

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!