基于c中使用ftruncate()前需要fflush(),使用后需要rewind()的深入探讨
基于c中使用ftruncate()前需要fflush(),使用后需要rewind()的深入探讨
发布时间:2016-12-28 来源:查字典编辑
摘要:今天用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语言学习
热门C语言学习
编程开发子分类