雷火电竞-中国电竞赛事及体育赛事平台

歡迎來到入門教程網(wǎng)!

C語言

當(dāng)前位置:主頁 > 軟件編程 > C語言 >

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

來源:本站原創(chuàng)|時間:2020-01-10|欄目:C語言|點擊:

今天用ftruncate截斷文件, 但怎么都不能達(dá)到預(yù)料的效果, 截斷后文件中的內(nèi)容比較雜, 而且文件大小也保持原來的.
添加 fflush()rewind() 后OK.
以下是測試代碼:

復(fù)制代碼 代碼如下:

#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 文件的內(nèi)容為 end , 大小為4字節(jié).
- - - - - - - - - -
在調(diào)用 ftruncate() 前用 rewind() 也行.
但用 ftruncate()截斷過的文件, 在用 fread, fwrite拷貝到另外一個文件時, 會出現(xiàn)亂碼和一些'\0'字符. 改用 fgets 和 fputs 則正常.

上一篇:基于C++ list中erase與remove函數(shù)的使用詳解

欄    目:C語言

下一篇:Linux下semop等待信號時出現(xiàn)Interrupted System Call錯誤(EINTR)解決方法

本文標(biāo)題:基于c中使用ftruncate()前需要fflush(),使用后需要rewind()的深入探討

本文地址:http://www.jygsgssxh.com/a1/Cyuyan/4475.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請與我們聯(lián)系,我們將在24小時內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有