Linux文件I/O实现cp指令的代码(文件编程总结二)

文件编程总结【二】

项目名称:实现Linux下cp指令的代码实现。

目的:Linux文件I/O实现cp指令的代码,掌握常用的文件I/O函数:open、read、write、lseek、close。并懂得运用。

(若不会常用的函数使用,请参照上一篇博客——linux下文件I/O函数的使用)

项目思路:

Linux文件I/O实现cp指令的代码(文件编程总结二)_第1张图片

代码的实现;

#include 
#include 
#include 
#include 
#include 
#include 
#include 

int main(int argc , char **argv)
{
        int fdSrc;
        int fdDes;

        char *readBuf = NULL;

        if(argc != 3){						//参数的设置
                printf("param error!\n");
                exit(-1);

        }

        fdSrc = open(argv[1],O_RDWR);		//打开一个文件,返回一个文件描述符fdSrc

        int size = lseek(fdSrc,0,SEEK_END);	//计算复制文件的大小
	
		lseek(fdSrc,0,SEEK_SET);			//记得把光标重新指向开头			

        readBuf = (char *)malloc(sizeof(char)*size + 8);	//申请一个文件大小的内存空间,多加8防止内存溢出

        int n_read = read(fdSrc,readBuf,1024);				//读Src到Buf里面

        fdDes = open(argv[2],O_RDWR|O_CREAT,0600);			//打开创建Dec

        int n_write = write(fdDes,readBuf,strlen(readBuf));	//将buf写到Des

        close(fdSrc);		//关闭
        close(fdDes);


        return 0;
}

优化后的代码:

#include 
#include 
#include 
#include 
#include 
#include 
#include 

int main(int argc , char *argv[])
{
        int fdSrc;
        int fdDes;

        char *readBuf = NULL;

        if(argc != 3){
                printf("param error!\n");
                exit(-1);

        }

        fdSrc = open(argv[1],O_RDWR);

        int size = lseek(fdSrc,0,SEEK_END);

        lseek(fdSrc,0,SEEK_SET);

        readBuf = (char *)malloc(sizeof(char)*size + 8);

        int n_read = read(fdSrc,readBuf,size);    //原本只能拷贝小于等于1024的文件,所以把1024改为文件的大小

        fdDes = open(argv[2],O_RDWR|O_CREAT|O_TRUNC,0600);//用TRUNC将原来的文件内容全删除,在重新写入。

        int n_write = write(fdDes,readBuf,strlen(readBuf));

        close(fdSrc);
        close(fdDes);


        return 0;
}

 

 

 

 

你可能感兴趣的:(Linux,C)