基于c中使用ftruncate()前需要fflush(),使用后需要rewind()的深入探讨

 更新时间:2013年05月27日 16:31:49   作者:  
本篇文章是对在c中使用ftruncate()前需要fflush(),使用后需要rewind()进行了详细的分析介绍,需要的朋友参考下
今天用ftruncate截断文件, 但怎么都不能达到预料的效果, 截断后文件中的内容比较杂, 而且文件大小也保持原来的.
添加 fflush()rewind() 后OK.
以下是测试代码:
复制代码 代码如下:

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
 FILE *fp;
 char *file = "tmp";
 int i;
 int fd;

 fp = fopen(file, "w");
 if(fp == NULL)
 {
  printf("fopen failed\n");
  return -1;
 }

 for(i=0; i<1000; i++)
 {
  fprintf(fp, "%d -- abcedfg  \n", i);
 }
 fflush(fp);
 fd = fileno(fp);
 if(ftruncate(fd, 0)<0)
 {
  perror("");
  return -1;
 }
 rewind(fp);
 fprintf(fp, "end\n");
 fclose(fp);
 return 0;
}

程序运行后, tmp 文件的内容为 end , 大小为4字节.
- - - - - - - - - -
在调用 ftruncate() 前用 rewind() 也行.
但用 ftruncate()截断过的文件, 在用 fread, fwrite拷贝到另外一个文件时, 会出现乱码和一些'\0'字符. 改用 fgets 和 fputs 则正常.

相关文章

  • C++多态的实现及原理详细解析

    C++多态的实现及原理详细解析

    C++的多态性用一句话概括就是:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。如果对象类型是派生类,就调用派生类的函数;如果对象类型是基类,就调用基类的函数
    2013-09-09
  • wxWidgets自定义按钮的方法

    wxWidgets自定义按钮的方法

    这篇文章主要为大家详细介绍了wxWidgets自定义按钮的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • C语言解3元1次方程组 用初中学的最基本的联合消元法

    C语言解3元1次方程组 用初中学的最基本的联合消元法

    最近就想自己能不能先写个算线性方程组的程序呢?后来就想了这么个方法,暂时只能算3元的,任意元的接下来继续想。有太多硬编码,希望有兴趣的读者可以给点修改建议
    2013-11-11
  • Cocos2d-x学习笔记之Hello World!

    Cocos2d-x学习笔记之Hello World!

    这篇文章主要介绍了Cocos2d-x学习笔记之Hello World!本文基于vs2010和C++语言开发,需要的朋友可以参考下
    2014-09-09
  • C/C++实现字符串模糊匹配

    C/C++实现字符串模糊匹配

    本文分别给大家介绍了2个C++在Linux平台和windows平台下实现字符串模糊匹配的方法,基本的核心思想都是一样的,均是使用fnmatch函数,有需要的小伙伴可以参考下。
    2016-04-04
  • C++ 关于MFC多线程编程的注意事项

    C++ 关于MFC多线程编程的注意事项

    这篇文章主要介绍了C++ 关于MFC多线程编程的注意事项的相关资料,需要的朋友可以参考下
    2015-06-06
  • c++ 排查内存泄漏的妙招

    c++ 排查内存泄漏的妙招

    这篇文章主要介绍了c++ 如何用辅助类排查内存泄漏,帮助大家更好的理解和学习使用c++,感兴趣的朋友可以了解下
    2021-03-03
  • 将字符串str1复制为字符串str2的三种解决方法

    将字符串str1复制为字符串str2的三种解决方法

    以下是对将字符串str1复制为字符串str2的三种解决方法进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2013-10-10
  • C语言、C++内存对齐问题详解

    C语言、C++内存对齐问题详解

    这篇文章主要介绍了C语言、C++内存对齐问题详解,内存对齐的问题主要存在于理解struct和union等复合结构在内存中的分布,需要的朋友可以参考下
    2014-10-10
  • 浅谈C语言中结构体的初始化

    浅谈C语言中结构体的初始化

    本篇文章是对C语言中结构体的初始化进行了详细的分析介绍,需要的朋友参考下
    2013-05-05

最新评论