手机
当前位置:查字典教程网 >编程开发 >C语言 >基于c中使用ftruncate()前需要fflush(),使用后需要rewind()的深入探讨
基于c中使用ftruncate()前需要fflush(),使用后需要rewind()的深入探讨
摘要:今天用ftruncate截断文件,但怎么都不能达到预料的效果,截断后文件中的内容比较杂,而且文件大小也保持原来的.添加fflush()和re...

今天用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 failedn");

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, "endn");

fclose(fp);

return 0;

}

程序运行后, tmp 文件的内容为 end , 大小为4字节.

- - - - - - - - - -

在调用 ftruncate() 前用 rewind() 也行.

但用 ftruncate()截断过的文件, 在用 fread, fwrite拷贝到另外一个文件时, 会出现乱码和一些''字符. 改用 fgets 和 fputs 则正常.

【基于c中使用ftruncate()前需要fflush(),使用后需要rewind()的深入探讨】相关文章:

基于C语言fflush()函数的使用详解

基于memset()函数的深入理解

c++实现strcat字符串连接库函数的方法详解

基于getline()函数的深入理解

用C++实现strcpy(),返回一个char*类型的深入分析

基于一致性hash算法 C++语言的实现详解

C++生成dll和调用dll的方法实例

C# interface与delegate效能比较的深入解析

strcat函数与strncat函数的深入分析

c++ 尽量不要使用#define 而是用const、enum、inline替换。

精品推荐
分类导航