zl程序教程

您现在的位置是:首页 >  其它

当前栏目

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

使用 基于 需要 深入探讨 fflush rewind
2023-06-13 09:15:00 时间
今天用ftruncate截断文件,但怎么都不能达到预料的效果,截断后文件中的内容比较杂,而且文件大小也保持原来的.
添加fflush()和rewind()后OK.
以下是测试代码:
复制代码代码如下:

#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
intmain()
{
 FILE*fp;
 char*file="tmp";
 inti;
 intfd;

 fp=fopen(file,"w");
 if(fp==NULL)
 {
  printf("fopenfailed\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);
 return0;
}

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