Linux文件I/O实现cp指令的代码(文件编程总结二)
文件编程总结【二】
项目名称:实现Linux下cp指令的代码实现。
目的:Linux文件I/O实现cp指令的代码,掌握常用的文件I/O函数:open、read、write、lseek、close。并懂得运用。
(若不会常用的函数使用,请参照上一篇博客——linux下文件I/O函数的使用)
项目思路:
代码的实现;
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
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 <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
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;
}