4.13 文件截短

有时我们需要在文件尾端处截去一些数据以缩短文件。将一个文件的长度截短为0是一个特例,用O_TRUNC标志可以做到这一点。为了截短文件,可以调用函数truncateftruncate


#include <sys types.h="">

#include <unistd.h>



int truncate(const char *pathname, off_t length);

int ftruncate(int filedes, off_t length);

</unistd.h></sys>

这两个函数返回0表示成功,返回-1表示出错。这两个函数将由路径名pathname或打开文件描述符filedes指定的一个现存文件的长度截短为length。如果文件以前的长度大于length,则超过length以外的数据就不再能存取。如果以前的长度短于length,则其后果与系统有关。如果某个实现的处理是扩展该文件,则在以前的文件尾端和新的文件尾端之间的数据将读作0(也就是在文件中创建了一个空洞)。SVR4和4.3+BSD提供了这两个函数,它们不是POSIX.1或XPG3的组成部分。SVR4截短或扩展一个文件,而4.3+BSD只用这两个函数截短文件,不能扩展文件。UNIX从来就没有截短文件的标准方法。完全兼容的应用程序必须对文件制作一个副本,在制作它时只复制所希望的数据字节。

SVR4的fcntl中有一个POSIX.1没有规定的命令F_FREESP,它允许释放一个文件中的任何一部分,而不只是文件尾端的一部分。

想要更详细地了解这些内容,可以查看《UNIX操作系统编程》、《Unix编程艺术》和《UNIX环境高级编程》等书籍。这些资源不仅提供了具体的编程实例,还对不同版本的UNIX系统在文件截短上的处理方式进行了详细的比较。

如何在实践中使用这些函数呢?这就像是用剪刀小心翼翼地剪裁一件衣服,确保每一针每一线都完美契合我们的需求。UNIX系统的复杂性和灵活性,正如一位技艺精湛的裁缝,给我们提供了无数种可能性,让我们在编程的世界里游刃有余。

阅读更多内容,探索更多惊喜吧!