zoukankan      html  css  js  c++  java
  • 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将文件指针移到文件头。

  • 相关阅读:
    怎样监听HTTP请求的发出与完成
    在Ubuntu下安装source Insight
    Android 5.1 预制输入法
    RK3288编译 Android 5.1 固件
    Android编程之Listener侦听的N种写法及实现原理
    android thread Runnable
    Android Service完全解析(下)
    Android Service完全解析(上)
    android 串口 android-serialport-api
    Android Studio在Ubuntu下离线安装Gradle
  • 原文地址:https://www.cnblogs.com/robbychan/p/3786957.html
Copyright © 2011-2022 走看看