基于c中使用ftruncate()前需要fflush(),使用后需要rewind()的深入探討
更新時間:2013年05月27日 16:31:49 作者:
本篇文章是對在c中使用ftruncate()前需要fflush(),使用后需要rewind()進行了詳細(xì)的分析介紹,需要的朋友參考下
今天用ftruncate截斷文件, 但怎么都不能達(dá)到預(yù)料的效果, 截斷后文件中的內(nèi)容比較雜, 而且文件大小也保持原來的.
添加 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 文件的內(nèi)容為 end , 大小為4字節(jié).
- - - - - - - - - -
在調(diào)用 ftruncate() 前用 rewind() 也行.
但用 ftruncate()截斷過的文件, 在用 fread, fwrite拷貝到另外一個文件時, 會出現(xiàn)亂碼和一些'\0'字符. 改用 fgets 和 fputs 則正常.
添加 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 則正常.
相關(guān)文章
C++深入淺出講解內(nèi)存四區(qū)與new關(guān)鍵字的使用
內(nèi)存四區(qū),一個非常重要的知識點,搞懂了內(nèi)存四區(qū),才能更快的去搞懂指針。我們寫的C語言代碼,不夸張的說,都是直接或者間接的在操作內(nèi)存。C語言之所以能夠開發(fā)操作系統(tǒng),就是指針的存在,而指針說白了就是地址,內(nèi)存地址,指針變量說白了就是存儲地址的變量2022-05-05使用WindowsAPI實現(xiàn)播放PCM音頻的方法
這篇文章主要介紹了使用WindowsAPI實現(xiàn)播放PCM音頻的方法,很實用的一個功能,需要的朋友可以參考下2014-08-08詳解C++設(shè)計模式編程中策略模式的優(yōu)缺點及實現(xiàn)
這篇文章主要介紹了C++設(shè)計模式編程中策略模式的優(yōu)缺點及實現(xiàn),文中討論了策略模式中設(shè)計抽象接口的繼承和組合之間的區(qū)別,需要的朋友可以參考下2016-03-03C++類與對象深入之構(gòu)造函數(shù)與析構(gòu)函數(shù)詳解
朋友們好,這篇播客我們繼續(xù)C++的初階學(xué)習(xí),現(xiàn)在對我們對C++非常重要的一個知識點做出總結(jié),整理出來一篇博客供我們一起復(fù)習(xí)和學(xué)習(xí),如果文章中有理解不當(dāng)?shù)牡胤?還希望朋友們在評論區(qū)指出,我們相互學(xué)習(xí),共同進步2022-06-06