linux下使用fread和fwrite的问题:我想实现一个文件到另一个文件的简单复制,总是编译出错.

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux下使用fread和fwrite的问题:我想实现一个文件到另一个文件的简单复制,总是编译出错.相关的知识,希望对你有一定的参考价值。

#include <stdio.h>
#include <stdlib.h>
#define BUFSIZE 1024
void cp(FILE *source,FILE *dest);
int main(int argc,char *argv[])

FILE *fp1,*fp2;
if(argc!=3)

fprintf(stderr,"Usage:%s filename1 filename2\n",argv[0]);
exit(EXIT_FAILURE);

if((fp1=fopen(argv[1],"rb"))==NULL)

fprintf(stderr,"Cann't open file %s.\n",argv[1]);
exit(EXIT_FAILURE);

if(setvbuf(fp1,NULL,_IOFBF,BUFSIZE)!=0)

fprintf(stderr,"Error in creat buffers.\n");
exit(EXIT_FAILURE);

if((fp2=fopen(argv[2],"wb"))==NULL)

fprintf(stderr,"Cann't open file %s.\n",argv[2]);
exit(EXIT_FAILURE);

if(setvbuf(fp2,NULL,_IOFBF,BUFSIZE)!=0)

fprintf(stderr,"Error in creat buffers.\n");
exit(EXIT_FAILURE);

cp(fp1,fp2);
if(ferror(fp1)!=0)

fprintf(stderr,"Error in reading %s.\n",argv[1]);
//exit(EXIT_FAILURE);

if(ferror(fp2)!=0)


fprintf(stderr,"Error in writing %s.\n",argv[2]);
// exit(EXIT_FAILURE);

if(fclose(fp1)!=0)


fprintf(stderr,"Error in closing %s.\n",argv[1]);
exit(EXIT_FAILURE);

if(fclose(fp2)!=0)


fprintf(stderr,"Error in closing %s.\n",argv[2]);
exit(EXIT_FAILURE);

return 0;


void cp(FILE *source,FILE *dest)


size_t bytes;
static char temp[BUFSIZE];
while((bytes=fread(temp,sizeof(char),BUFSIZE,source))>0)
fwrite(temp,sizeof(char),bytes,dest);

gcc 编译总是出错:parse error at end of input。

参考技术A 最好用fgets()来读取一行,该函数自动读取一行。
写的时候你就可以自己随意定啦!你在buf后面加个换行符'\n'就行了,fwrite()就会自动换行了。
比如:
FILE* fp = fopen("c:\\test.txt","rw"); //打开文件
if( fp == NULL )
return;
char achBuf[256] = ;
fgets( achBuf,fp ); //读取一行,直到遇到换行符结束
memset( achBuf,0,256 );
strcpy(achBuf,"Hello,world!\n"); //内容随意,别忘了加个换行符
fwrite( achBuf,1,strlen(achBuf)+1,fp ); //写入一行
fclose(fp); //关闭文件
参考技术B if(setvbuf(fp2,NULL,_IOFBF,BUFSIZE)!=0)

fprintf(stderr,"Error in creat buffers.\n");
exit(EXIT_FAILURE);

cp(fp1,fp2);
看到没有,这么明显的错误,一个括号方向打反了,改成 运行ok。本回答被提问者采纳
参考技术C

fread和fwrite的使用

1.rread和fwrite函数

数据块I/O fread与fwrite
函数原型:
size_t fead(void *buffer, size_t size, size_t, count, FILE *pf)
size_t frite(void *buffer, size_t size, size_t count, FILE *pf)
功能:读写数据块(将内存的内容直接写入磁盘)
返回值:成功,返回读/写的块数,出错或文件尾,返回0.
参数含义:
buffer 指向要输入/输出数据块首地址指针。
size 每个要读/写的数据块的大小。
count 要读/写的数据块的个数
fp 要读/写的文件指针
typedef unsigned size_t
fread和fwrite一般用于二进制文件的输入/输出

2. 文本与二进制文件之间的区别是\n和\r之间的转换。

3.例子

#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <stdlib.h>


void main1()
{
    int a[100];
    printf("%p", a);
    for (int i = 0; i < 100;i++)
    {
        ;
        printf("\n%d", a[i] = i);
    }

    FILE *pf = fopen("C:\\1.bin", "r");

    int num=fwrite(a, sizeof(int), 99, pf);//第一个内存首地址,第二个元素大小,第三个个数
    printf("fwrite  return =%d", num);//返回写入成功的个数.失败返回0
    fclose(pf);


    system("pause");

}
void write()
{
    int a[100];

    for (int i = 0; i < 100; i++)
    {
        printf("\n%d", a[i] = i);
    }
    FILE *pf = fopen("C:\\1.bin", "wb");
    int num = fwrite(a, sizeof(int), 100, pf);//第一个内存首地址,第二个元素大小,第三个个数
    printf("fwrite  return =%d", num);//返回写入成功的个数.失败返回0
    fclose(pf);
}

void read()
{
    void *p = malloc(400);
    printf("%p\n", p);
    FILE *pf = fopen("C:\\1.bin", "rb");
    int num= fread(p, 4, 100, pf);//第一个内存首地址,第二个元素大小,第三个个数
    printf("fread  return =%d", num);//返回读取成功个数
    fclose(pf);
}

void main()
{
    read();
   
    system("pause");
}

 

以上是关于linux下使用fread和fwrite的问题:我想实现一个文件到另一个文件的简单复制,总是编译出错.的主要内容,如果未能解决你的问题,请参考以下文章

Linux read/write fread/fwrite两者区别

fread 和 fwrite 有没有失败?如何处理?

如何使用 fread 和 fwrite 函数读写二进制文件?

如何使用 fread 和 fwrite 从文件中读取 pcm 样本?

Linux 打开文件并写入一段字符串,同一时候读出相应文件的信息--fopen()/fwrite()/fread()

对 STL 字符串使用 fread/fwrite。这是正确的吗?