-
在Windows Server 2008 R2 x64系统环境下,关于Oracle 11g R2 RAC与ASM环境的搭建及配置指南
资源介绍
18.1 系统调用
从 shell(批处理)编程转到 Perl 编程的程序员往往希望 Perl 与 shell 一样只是由一组 UNIX(或
MS-DOS/NT)命令组成的序列。然而,Perl 并不像 shell 那样直接访问系统实用程序。当然,为了
实现其功能,Perl 必须通过某种途径与操作系统进行交互(interface)。事实上,Perl 提供了一组专
门负责与操作系统交互的函数。这些函数与 UNIX 系统调用直接相关,因此读者经常可以在 C 中找
到它们。Windows 也支持很多 UNIX 系统调用。本书后面还将列出一些在通常情况下不支持的系统
调用。
系统调用(system call)负责向操作系统(内核)请求某些服务,譬如获得当前时间,删除文
件,创建新进程,终止进程,等等。最重要的一组系统调用涉及进程的创建与终止,内存的分配和
释放,以及向进程发送信息(譬如信号)。其他的系统调用还与文件系统相关,包括:创建文件、读
写文件、创建和删除目录、创建链接等 。
UNIX 系统调用在 UNIX 手册页的第二部分中已有说明。Perl 的系统函数不论在语法上还是
在实现上都几乎与它们相同。如果系统调用失败,它会返回 -1,并将系统全局变量 errno 设置为表
明错误原因的值。C 程序可使用 perror 函数获取保存在 errno 中的系统错误信息;而 Perl 程序则使
用特殊变量 $!(详见“错误处理”一节)。
当需要获取或处理有关文件或进程的信息时,可使用下面介绍的 Perl 函数执行各种系统调用。
如果 Perl 没有提供所需系统调用,则可使用 Perl 的 syscall 函数,该函数以 UNIX 系统调用作为参
数(详见“syscall 函数和 h2ph 脚本”一节)。
除了内建的函数外,标准 Perl 库还捆绑有 200 个各类模块,可用于对文件、目录、进程、网络
等执行可移植的操作。如果已经安装了 ActiveState 的话,在标准 Perl 库 c:\Perl\site\lib\win32 中还
提供了一组 Win32 模块库集合。
读者如需从标准 Perl 库中读取任何模块(其文件名中带有 .pm 扩展名)的相关文档,可使用
Perl 内建的 perldoc 函数或 UNIX 的 man 命令。此外,ActiveState(Win32)提供了在线文档,读
系统调用能够直接进入内核,而库调用则是调用系统调用的函数。Perl 的系统接口函数是根据其对应的
UNIX 系统调用的名字而命名的。
从现在开始,本书提到 UNIX 的地方也同样适用于 Linux。