没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/4153070/bg1.jpg)
下载
第1章 U N I X 基础知识
1.1 引言
所有操作系统都向它们运行的程序提供服务。典型的服务有执行新程序、打开文件、读文
件、分配存储区、获得当前时间等等,本书集中阐述了 U N I X操作系统各种版本所提供的服务。
以严格的步进方式、不超前引用尚未说明过的术语的方式来说明 U N I X 几乎是不可能的(可
能也会是令人厌烦的)。本章从程序设计人员的角度快速浏览 U N I X,并对书中引用的一些术语
和概念进行简要的说明并给出实例。在以后各章中,将对这些概念作更详细的说明。本章也对
不熟悉U N I X的程序设计人员简要介绍了U N I X提供的各种服务。
1.2 登录
1.2.1 登录名
登录 U N I X 系统时,先键入登录名,然后键入口令。系统在其口令文件,通常是
/ e t c / p a s s w d 文件中查看登录名。口令文件中的登录项由 7个以冒号分隔的字段组成:登录名,
加密口令,数字用户I D ( 2 2 4 ) ,数字组I D ( 2 0 ),注释字段,起始目录 ( / h o m e / s t e v e n s ) ,以及s h e l l
程序( / b i n / k s h )。
很多比较新的系统已将加密口令移到另一个文件中。第 6章将说明这种文件以及存取它们
的函数。
1.2.2 shell
登录后,系统先显示一些典型的系统信息,然后就可以向 s h e l l程序键入命令。s h e l l是一个
命令行解释器,它读取用户输入,然后执行命令,用户通常用终端,有时则通过文件 (称为
s h e l l脚本)向s h e l l进行输入。常用的s h e l l有:
• Bourne shell, /bin/sh
• C shell, /bin/csh
• KornShell, /bin/ksh
系统从口令文件中登录项的最后一个字段中了解到应该执行哪一个 s h e l l。
自V 7以来,Bourne shell得到了广泛应用,几乎每一个现有的U N I X系统都提供Bourne shell。
C shell是在伯克利开发的,所有 B S D 版本都提供这种s h e l l。另外,AT & T 的系统V/386 R3.2和
S V R 4 也提供C shell(下一章将对这些不同的U N I X版本作更多说明)。K o r n S h e l l是Bourne shell
的后继者,它由S V R 4 提供。K o r n S h e l l 在大多数U N I X系统上运行,但在S V R 4之前,通常它需
要另行购买,所以没有其他两种s h e l l流行。
本书将使用很多s h e l l 实例,以执行已开发的程序,其中将应用 Bourne shell和K o r n S h e l l都
具有的功能。
![](https://csdnimg.cn/release/download_crawler_static/4153070/bg2.jpg)
Bourne shell是Steve Bourne在贝尔实验室中开发的,其控制流结构使人想起
Algol 68。C shell是在伯克利由Bill Joy完成的,其基础是第6版s h e l l(不是B o u r n e
s h e l l)。其控制结构很像C语言,它支持一些Bourne shell没有提供的功能,如作业
控制,历史机制和命令行编辑。 K o r n S h e l l 是David Korn在贝尔实验室中开发的,
它兼容Bourne shell,并且也包含了使C shell非常流行的一些功能,如作业控制、
命令行编译等。
本书将使用这种形式的注释来描述历史,并对不同的 U N I X 实现进行比较。当
我们了解了历史缘由后,采用某种特定实现技术的原因将变得清晰起来。
1.3 文件和目录
1.3.1 文件系统
U N I X 文件系统是目录和文件的一种层次安排,目录的起点称为根 ( r o o t ),其名字是一个
字符/。
目录(d i r e c t o r y)是一个包含目录项的文件,在逻辑上,可以认为每个目录项都包含一个
文件名,同时还包含说明该文件属性的信息。文件属性是:文件类型,文件长度,文件所有者,
文件的许可权(例如,其他用户能否能访问该文件),文件最后的修改时间等。s t a t 和f s t a t函数
返回一个包含所有文件属性的信息结构。第 4章将详细说明文件的各种属性。
1.3.2 文件名
目录中的各个名字称为文件名(f i l e n a m e)。不能出现在文件名中的字符只有两个,斜线 ( / )
和空操作符(n u l l)。斜线分隔构成路径名(在下面说明)的各文件名,空操作符则终止一个路径
名。尽管如此,好的习惯是只使用印刷字符的一个子集作为文件名字符 (只使用子集的理由是:
如果在文件名中使用了某些s h e l l特殊字符,则必须使用s h e l l 的引号机制来引用文件名)。
当创建一个新目录时,自动创建了两个文件名: . ( 称为点)和. . (称为点-点)。点引用当前目
录,点-点则引用父目录。在最高层次的根目录中,点-点与点相同。
某些U N I X 文件系统限制文件名的最大长度为 1 4 个字符,B S D版本则将这种限制扩展为2 5 5
个字符。
1.3.3 路径名
0个或多个以斜线分隔的文件名序列 (可以任选地以斜线开头)构成路径名(p a t h n a m e ),以
斜线开头的路径名称为绝对路径名( absolute pathname),否则称为相对路径名( r e l a t i v e
p a t h n a m e)。
实例
不难列出一个目录中所有文件的名字,程序1 - 1 是l s ( 1 )命令的主要实现部分
程序1-1 列出一个目录中的所有文件
2 U N I X环境高级编程
下载
![](https://csdnimg.cn/release/download_crawler_static/4153070/bg3.jpg)
l s ( 1 )这种表示方法是U N I X的惯用方法,用以引用U N I X手册集中的一个特定项。它引用第
一部分中的l s项,各部分通常用数字 1至8表示,在每个部分中的各项则按字母顺序排列。假定
你有一份所使用的U N I X系统的手册。
早期的U N I X系统把8个部分都集中在一本手册中,现在的趋势是把这些部分
分别安排在不同的手册中:有用户专用手册,程序员专用手册,系统管理员专用
的手册等等。
某些U N I X 系统把一个给定部分中的手册页又用一个大写字母进一步分成若干
小部分,例如,AT & T〔1 9 9 0 e〕中的所有标准I / O 函数都被指明在3 S部分中,例如
f o p e n ( 3 S )。
某些U N I X系统,例如以X e n i x为基础的系统,不是采用数字将手册分成若干
部分,而是用C表示命令(第1部分),S表示服务(通常是第2、3部分)等等。
如果你有联机手册,则可用下面的命令查看l s 命令手册页:
man 1 ls
程序1 - 1只打印一个目录中各个文件的名字,不显示其他信息,如若该源文件名为 m y l s . c ,
则可以用下面的命令对其进行编译,编译的结果送入系统默认名为 a . o u t 的可执行文件名:
cc myls.c
某种样本输出是:
$ a.out /dev
.
. .
M A K E D E V
c o n s o l e
t t y
m e m
k m e m
n u l l
此处略去多行
第 1章 U N I X 基础知识 3
下载
![](https://csdnimg.cn/release/download_crawler_static/4153070/bg4.jpg)
p r i n t e r
$ a.out /var/spool/mqueue
can't open /var/spool/mqueue:Permission denied
$ a.out /dev/tty
can't open /dev/tty:Not a directory
本书将以这种方式表示输入的命令以及其输出:输入的字符以粗体表示,程序输出则以另
一种字体表示。如果欲对输出添加注释,则以中文宋体表示,输入之前的美元符号 ( $ )是s h e l l打
印的提示符,本书将s h e l l提示符显示为$。
注意,列出的目录项不是以字母顺序排列的, l s命令则一般按字母顺序列出目录项。
在这2 0行的程序中,有很多细节需要考虑:
• 首先,其中包含了一个头文件o u r h d r. h。本书中几乎每一个程序都包含此头文件。它包含
了某些标准系统头文件,定义了许多常数及函数原型,这些都将用于本书的各个实例中,附录
B列出了常用头文件。
• main函数的说明使用了ANSI C标准所支持的新风格(下一章将对ANSI C作更多说明)。
• 取命令行的第1个参数a rg v〔1〕作为列出的目录名。第 7章将说明m a i n函数如何被调用,
程序如何存取命令行参数和环境变量。
• 因为各种不同U N I X系统的目录项的实际格式是不一样的,所以使用函数 o p e n d i r, readdir
和c l o s e d i r处理目录。
• opendir函数返回指向D I R 结构的指针,并将该指针传向 r e a d d i r函数。我们并不关心 D I R
结构中包含了什么。然后,在循环中调用 r e a d d i r 来读每个目录项。它返回一个指向 d i r e n t 结
构的指针,而当目录中已无目录项可读时则返回 n u l l 指针。在 d i r e n t结构中取出的只是每个
目录项的名字 ( d _ n a m e ) 。使用该名字,此后就可调用 s t a t函数(见4 . 2 节)以决定该文件的所有
属性。
• 调用了两个自编的函数来对错误进行处理:e r r _ s y s和e r r _ q u i t。从上面的输出中可以看到,
e r r _ s y s 函数打印一条消息(“Permission denied(许可权拒绝)”或“Not a directory(不是一个目
录)”),说明遇到了什么类型的错误。这两个出错处理函数在附录 B中说明,1 . 7节将更多地叙
述出错处理。这两个出错处理函数在附录 B中说明1 . 7节将更详细地叙述出错处理。
• 当程序将结束时,它以参数 0调用函数e x i t 。函数e x i t终止程序。按惯例,参数0的意思是
正常结束,参数值1~2 5 5 则表示出错。8 . 5 节将说明一个程序(例如s h e l l或我们所编写的程序)如
何获得它所执行的另一个程序的e x i t状态。
1.3.4 工作目录
每个进程都有一个工作目录 (working directory,有时称为当前工作目录 (current working
d i r e c t o r y ) )。所有相对路径名都从工作目录开始解释。进程可以用 c h d i r函数更改其工作目录。
例如,相对路径名d o c / m e m o / j o e指的是文件j o e,它在目录m e m o 中,而m e m o又在目录d o c
中,d o c 则应是工作目录中的一个目录项。从该路径名可以看出, d o c 和m e m o 都应当是目录,
但是却不清楚j o e 是文件还是目录。路径名 / u r s / l i b / l i n t 是一个绝对路径名,它指的是文件 (或目
录) lint,而l i n t在目录l i b中,l i b则在目录u s r中,u s r则在根目录中。
1.3.5 起始目录
登录时,工作目录设置为起始目录(home directory),该起始目录从口令文件(见1 . 2节)中
4 U N I X 环境高级编程
下载
剩余15页未读,继续阅读
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![avatar](https://profile-avatar.csdnimg.cn/b68258d01a884fa4aa100a12456cc19a_wufeji.jpg!1)
风清坞
- 粉丝: 3
- 资源: 12
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)
评论0