• ftruncate()函数


    函数功能:改变文件大小

    相关函数:open、truncate
    表头文件:#include <unistd.h>
    函数原型:int ftruncate(int fd, off_t  length)
    函数说明:ftruncate()会将参数fd指定的文件大小改为参数length指定的大小。参数fd为已打开的文件描述词,而且必须是以写入模式打开的文件。如果原来的文件件大小比参数length大,则超过的部分会被删去
    返 回  值:0、-1
    错误原因:errno
              EBADF     参数fd文件描述词为无效的或该文件已关闭
              EINVAL    参数fd为一socket并非文件,或是该文件并非以写入模式打开

    使用方法:fd一般可以fileno(FILE *fp)获取,标示文件当前的大小,length则可由用户定义。此函数一般用在文件初始化或者重新为文件分配空间时。

    注意事项:此函数并未实质性的向磁盘写入数据,只是分配了一定的空间供当前文件使用。当fd<length时,此时如果使用十六进制编辑工具打开该文件,你会发现文件末尾多了很多00,这就是执行这个函数后的效果。如果发生系统复位或者装置掉电以后,该函数所产生的作用将被文件系统忽略,也就是说它所分配的空间将不能被识别,文件的大小将会是最后一次写入操作的区域大小,而非ftruncate分配的空间大小,也就是说,文件大小有可能会被改变。

    解决方法:可以在执行完ftruncate之后,在新空间的末尾写入一个或以上字节的数据(不为Ox00),这样新空间则不为空,文件系统会把这部分空间当成这个文件的私有空间处理,而不会出现文件大小改变的错误。

    ftruncate函数在文件清空方面作用很大
        对一个文件用读写方式打开 fopen("...", "r+");首先读出文件里面的(9php.com)内容,处理完成后需要重新写入文件中。在重新写入的(9php.com)时候需要先清空原来文件里面的(9php.com)内容,如何实现此处的(9php.com)清空?
        原来使用先以读方式打开,读入缓冲后关闭文件,然后再以写打开,这样做两遍打开关闭,太浪费时间。
        用ftruncate可以清空文件,如:ftruncate(fileno(fp), 0);
        清空文件后,需要使用rewind或fseek将文件指针移到文件头。

  • 相关阅读:
    HTML DOM 12 表格排序
    HTML DOM 10 常用场景
    HTML DOM 10 插入节点
    HTML DOM 09 替换节点
    HTML DOM 08 删除节点
    HTML DOM 07 创建节点
    022 注释
    024 数字类型
    005 基于面向对象设计一个简单的游戏
    021 花式赋值
  • 原文地址:https://www.cnblogs.com/robbychan/p/3786957.html
Copyright © 2020-2023  润新知