"这篇文档是关于UNIX环境高级编程的,主要涵盖了文件截短操作,以及相关的函数`truncate`和`ftruncate`。这些函数用于缩短文件长度,将文件尾部的数据截去,使得文件大小不超过指定长度。在某些系统如SVR4中,文件可以被扩展或截短,而在4.3+BSD中只能截短。文件截短并不是UNIX的标准操作,完全兼容的程序可能需要通过复制文件来实现截短效果。文档还提及了UNIX的基础知识,包括登录、文件和目录、输入输出、进程、C语言标准、错误处理、用户标识、信号、时间值、系统调用和库函数等。此外,文档讨论了UNIX的标准化过程(如ANSI C、POSIX、X/Open XPG3、FIPS),以及不同UNIX实现(如SVR4和4.3+BSD)的特点和限制。"
详细知识点:
1. **文件截短**:文件截短是指从文件尾部删除部分数据,使其长度变短。`truncate`和`ftruncate`是两个用于文件截短的函数,它们接受一个文件路径或描述符和新的文件长度作为参数。成功执行返回0,失败返回-1。
2. **函数`truncate`**:此函数根据提供的路径名`pathname`截断指定文件,使其长度变为`length`。如果文件原来长度大于`length`,超出的部分将不可访问。如果`length`小于原长度,具体效果取决于系统实现,可能会在文件中创建一个“空洞”。
3. **函数`ftruncate`**:这个函数通过文件描述符`filedes`截断已打开的文件,作用与`truncate`类似。这两个函数在SVR4和4.3+BSD中有所不同,SVR4支持扩展和截短,而4.3+BSD仅支持截短。
4. **UNIX基础知识**:包括登录、文件和目录(文件系统、文件名、路径名、工作目录、起始目录)、输入输出(文件描述符、标准输入输出、缓存I/O、标准I/O)、程序和进程(程序概念、进程及ID、进程控制)、C语言标准(函数原型、类属指针、原始系统数据类型)、出错处理、用户标识(用户ID、组ID、附加组ID)、信号、时间值、系统调用和库函数。
5. **UNIX标准化**:涉及ANSI C、IEEE POSIX、X/Open XPG3和FIPS等标准,以及它们之间的关系和限制。不同UNIX实现如SVR4和4.3+BSD有各自的特性,并且这些标准在不同系统中的实现可能不完全相同。
6. **文件I/O**:文件描述符、`open`、`creat`、`close`、`lseek`、`read`、`write`、I/O效率、文件共享、原子操作(如添加至文件和创建文件)、`dup`和`dup2`、`fcntl`以及`ioctl`函数的介绍。`/dev/fd`是与文件描述符相关的设备文件,允许通过文件描述符直接访问文件。
7. **限制和测试宏**:各种标准如ANSI C、POSIX、XPG3和FIPS设置了一些限制,可以通过`sysconf`、`pathconf`和`fpathconf`函数获取系统限制信息。FIPS 151-1是一套额外的安全要求。功能测试宏用于检测系统是否支持特定功能。
这些知识点构成了UNIX环境高级编程的核心内容,涉及文件操作、进程管理、系统交互等多个方面。理解并熟练运用这些知识对于进行UNIX系统开发和维护至关重要。