程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言基礎知識 >> 基於c中使用ftruncate()前需要fflush(),使用後需要rewind()的深入探討

基於c中使用ftruncate()前需要fflush(),使用後需要rewind()的深入探討

編輯:C語言基礎知識
今天用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 則正常.
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved