基于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++实现下载的代码,以下载百度图片为例较为完整的讲述了C++下载的具体实现方法,需要的朋友可以参考下
    2014-10-10
  • 重学c/c++之数据存储详解(整数、浮点数)

    重学c/c++之数据存储详解(整数、浮点数)

    C语言给定了一些基本的数据类型,下面这篇文章主要给大家介绍了关于重学c/c++之数据存储(整数、浮点数)的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-11-11
  • 用C语言实现简单扫雷游戏

    用C语言实现简单扫雷游戏

    这篇文章主要为大家详细介绍了用C语言实现简单扫雷游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • C++使用BitBlt进行窗口抓图的方法

    C++使用BitBlt进行窗口抓图的方法

    这篇文章主要介绍了C++使用BitBlt进行窗口抓图的方法,帮助大家更好的理解和使用c++,感兴趣的朋友可以了解下
    2021-01-01
  • c语言数据结构与算法之顺序表的定义实现详解

    c语言数据结构与算法之顺序表的定义实现详解

    这篇文章主要介绍了c语言数据结构与算法之顺序表的定义实现详解,用顺序存储的方式实现线性表顺序存储,把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中,元素之间的关系由存储单元的邻接关系来体现,需要的朋友可以参考下
    2023-08-08
  • Cocos2d-x学习笔记之Hello World源码分析

    Cocos2d-x学习笔记之Hello World源码分析

    这篇文章主要介绍了Cocos2d-x学习笔记之Hello World源码分析,接上一篇内容,本文着重分析源码文件,需要的朋友可以参考下
    2014-09-09
  • 二叉树入门和刷题详解

    二叉树入门和刷题详解

    这篇文章主要介绍了二叉树入门和刷题详解的相关资料,需要的朋友可以参考下
    2023-07-07
  • wxWidgets自定义按钮的方法

    wxWidgets自定义按钮的方法

    这篇文章主要为大家详细介绍了wxWidgets自定义按钮的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • C语言实现随机抽奖程序

    C语言实现随机抽奖程序

    这篇文章主要为大家详细介绍了C语言实现随机抽奖程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • 适合新手小白DEV C++的使用方法

    适合新手小白DEV C++的使用方法

    Dev-C++是一个Windows环境下C/C++的集成开发环境(IDE),它是一款自由软件,遵守GPL,下面这篇文章主要给大家介绍了关于适合新手小白DEV C++的使用方法,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-02-02

最新评论