fread/fwrite实现复制功能

1.  fread/fwrite实现复制功能

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

#define BUFFSIZE  4096

//执行: ./a.out file1 file2
//功能: 将file1的内容读取出来,写入file2,即复制
int main(int argc,char *argv[])
{
    char buffer[BUFFSIZE];
    FILE *pRead,*pWrite; //读文件指针 写文件指针
    int n;

    //检测是否输入file1和file2
    if(argc!=3)
    {
        printf("main option error!\n");
        return -1;
    }

    pRead = fopen(argv[1],"r"); //只读 文件必须已存在
    if(!pRead)
    {
        printf("fopen argv[1] error!\n");
        return -1;
    }

    pWrite = fopen(argv[2],"w"); //只写 若文件不存在,则创建
    if(!pWrite)
    {
        printf("fopen argv[2] error!\n");
        return -1;
    }

    //从pRead指向文件读取字符入buffer
    while( (n= fread(buffer,sizeof(char),sizeof(buffer),pRead))>0 )
    {
        //检测从buffer写入pWrite指向文件的字符数,是不是等于读取字符数
        if( fwrite(buffer,sizeof(char),n,pWrite)!=n )
        {
            printf("fwrite error!\n");
            return -1;
        }
    }

    if(n<0) //fread返回值<0,说明fread读取失败
    {
        printf("fread error!\n");
        return -1;
    }

    //复制结束后,要关闭文件
    fclose(pRead);
    fclose(pWrite);

    return 0;
}
时间: 2024-10-30 09:47:42

fread/fwrite实现复制功能的相关文章

Linux read/write fread/fwrite两者区别

Linux read/write fread/fwrite两者区别 1,fread是带缓冲的,read不带缓冲. 2,fopen是标准c里定义的,open是POSIX中定义的. 3,fread可以读一个结构.read在linux/unix中读二进制与普通文件没有区别. 4,fopen不能指定要创建文件的权限.open可以指定权限. 5,fopen返回指针,open返回文件描述符(整数). 6,linux/unix中任何设备都是文件,都可以用open,read. 如果文件的大小是8k. 你如果用r

[Linux]read/write和fread/fwrite有什么区别

转自:http://blog.csdn.net/xiaofei0859/article/details/51145051 二者都是对文件进行操作,那么二者有什么区别,用的时候该如何选择呢? 1. 区别 fread是带缓冲的,read不带缓冲. fopen是标准c里定义的,open是POSIX中定义的. fread可以读一个结构.read在Linux/unix中读二进制与普通文件没有区别. fopen不能指定要创建文件的权限.open可以指定权限. fopen返回指针,open返回文件描述符(整数

那些年,坑死自己的事之fread/fwrite

今天继续看牛人做过的东西,这个小程序并不大,加上相当多的注释行,才5000多行.这个小程序是在linux下实现的,之前自己也一直用vi来看并加以更加详细的注释,但是效率实在太低.于是将其转移到windows下决定改造到VS2012下运行. 这是一段纯C的代码,新建的工程是C++的,而代码中使用了强制类型转换将一个结构体类型转换成了另一个结构体.于是编译的时候报错不能通过.最后,我新建了空工程,将其以已存在的文件的形式导入,解决了这个问题.修改了一些问题之后,终于不报错,可以运行了.可是真正悲催的

fopen\fread\fwrite\fscanf\fprintf\fseek\feof\rewind\fgets\fputc等系列函数使用总结

转载自:http://blog.csdn.net/xidianzhimeng/article/details/23541289 1 fopen 函数原型:FILE * fopen(const char * path,const char * mode); 返回值:文件顺利打开后,指向该流的文件指针就会被返回.如果文件打开失败则返回NULL,并把错误代码存在errno 中. fopen_s,_wfopen_s安全性上相对于fopen有所增强,如果成功则返回0,失败则返回响应的错误代码 errno_

read、fread

如果文件的大小是8k.你如果用read/write,且只分配了2k的缓存,则要将此文件读出需要做4次系统调用来实际从磁盘上读出.如果你用fread/fwrite,则系统自动分配缓存,则读出此文件只要一次系统调用从磁盘上读出.也就是用read/write要读4次磁盘,而用fread/fwrite则只要读1次磁盘.效率比read/write要高4倍.如果程序对内存有限制,则用read/write比较好. 我们使用函数向某个文件从当前流标签所在位置,读取n个字符.我们也会使用函数向文件的某个流位置写如

C语言标准I/O_fread/fwrite

好久不用,对C语言文件操作都有点生疏了,由于工作需要,稍稍的复习一下: 下面的程序用C语言的fread/fwrite来读取hex文件,并且拷贝,目的是拷贝后的文件需要和源文件不能有任何差异: // Hex.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <stdio.h> #define SIZE 512 int main(int argc,

c fopen fread 错误

真的被,读取一个txt文本,结果一个早上都没搞好 程序如下: 能看出哪里有问题么,输出字符串,得到的结果后面有“屯”或则 “烫”,单个字符输出来也有,为何,搜啊搜,改txt的内容,依旧不行 最后 改fopen 的r 改为rb就可以了,神奇了,明明txt就是ascii码文件啊,为什么要改成rb啊,b是二进制的意思啊 再搜,论坛里面高人说了: 二进制打开之后可以使用fgets,ascii打开之后也可以使用fwrite. 区别就是 “只不过回车符有点不一样.一个是0x0a,一个是0x0d 0x0a.具

fwrite和write

write用的是文件描述符,fwrite用的是文件流(或者叫文件指针) fopen返回指针,open返回文件描述符(整数). fread是带缓冲的,read不带缓冲. fwrite() 是先写到用户空间缓冲区,等满了再调用 write() fwrite() 写的可以用 fflush() 刷到内核态. 你如果用read/write,且只分配了2k的缓存,则要将此文件读出需要做4次系统调用来实际从磁盘上读出. 如果你用fread/fwrite,则系统自动分配缓存,则读出此文件只要一次系统调用从磁盘上

1、简单程序 &quot;hello,word&quot;

#include<stdio.h> //.h的文件是头文件:stdio 就是指 “standard input & output"(标准输入输出),因此用到标准输入输出函数时,就要包含这个头文件; 头文件定义:1.#include<stdio.h> 2.#include "stdio.h" int main() //有返回值时:数据类型 函数名():如果需要带入变量: 数据类型 函数名(数据类型 变量):没有返回值可以:void 函数名():如