UNIX系统编程:标准化、限制与基本数据类型

需积分: 11 23 下载量 93 浏览量 更新于2024-08-06 收藏 18.16MB PDF 举报
"这是关于UNIX环境高级编程的资料,主要涵盖了UNIX的基础知识、标准化及其实现、文件I/O等内容。" 在UNIX系统中,基础系统数据类型是编程时必须理解的关键概念。历史上,某些变量与特定的C数据类型绑定,比如主、次设备号曾存储在16位的短整型中。然而,随着系统的扩展,需要更多的值来表示设备号,如SVR4使用32位表示设备号,其中14位用于主设备号,18位用于次设备号。因此,头文件`<sys/types.h>`定义了一些与具体实现相关的数据类型,这些被称为基本系统数据类型,它们随系统的不同而变化,以适应各种需求。 在编程时,为了确保兼容性,有一个重要的概念叫做功能测试宏(feature test macro)。例如,`_POSIX_SOURCE`宏用来指示编译器只使用POSIX定义,排除实现特有的定义。要启用此宏,可以在编译命令行中使用`-D_POSIX_SOURCE`选项,或者在源文件开头直接定义`#define _POSIX_SOURCE 1`。另一个宏`__STDC__`是由符合ANSI C标准的编译器自动定义的,用于编写既能被ANSI C编译器也能被非ANSI C编译器接受的代码。 此外,书中还提到了UNIX标准化的过程,包括ANSI C、IEEE POSIX、X/Open XPG3以及FIPS标准。标准化旨在提供跨平台的互操作性和一致性,但不同的UNIX实现可能存在差异。例如,SVR4和4.3+BSD在一些特性上有所不同,理解这些差异对于编写可移植的代码至关重要。同时,每个实现都有自己的限制,如文件大小、文件描述符的数量等,这些可以通过`sysconf`、`pathconf`和`fpathconf`函数查询。 在实际编程中,文件I/O是核心部分。文件描述符是文件操作的基础,通过`open`函数打开文件,`creat`用于创建新文件,`close`关闭文件,`lseek`改变读写位置,`read`和`write`执行实际的数据传输。为了优化I/O,还需要考虑文件共享、原子操作和fcntl、ioctl函数的使用。此外,`/dev/fd`是一个特殊设备,提供了对文件描述符的访问。 这份资料深入讲解了UNIX环境中的高级编程概念,对于开发者来说,理解和掌握这些知识点对于编写高效、可移植的UNIX应用程序至关重要。