手机
当前位置:查字典教程网 >编程开发 >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中含有if的宏定义详解

从汇编看c++的默认析构函数的使用详解

深入理解strcpy与memcpy的区别

基于C语言sprintf函数的深入理解

基于C程序启动代码的深入分析

基于VC中使用ForceInclude来强制包含stdafx.h的解决方法

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

关于C++中的static关键字的总结

Visual C++中MFC消息的分类

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

精品推荐
分类导航