1、cp指令
实现CP指令
src 源文件 des 目标文件
执行流程:
打开源文件(src)open
打开目标文件(des) open
写入目标文件 write
读取src文件到缓存数组 read
关闭目标文件和源文件
close ./a.out src.c des.c
#include<stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main(int argc,char *argv[])
{
int src_fd;
int des_fd;
char readBuff[1024]={0};
int nRet = 0;
if(argc != 3)
{
printf("error\\n");
}
src_fd = open(argv[1],O_RDWR);
nRet = read(src_fd,&readBuff[0],1024);
des_fd = open(argv[2],O_RDWR|O_CREAT,0755);
write(des_fd,&readBuff[0],nRet);
close(src_fd);
close(des_fd);
return 0;
}


代码太长了,图片只截了一部分,可以看到,确实是实现了
缺点:
只读 1 次
如果文件 > 1024 字节,后面内容全部丢失
只能拷贝小文件,大文件拷不全
改进后
#include<stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include<string.h>
int main(int argc,char *argv[])
{
int src_fd;
int des_fd;
char readBuff[128]={0};
int nRet = 0;
if(argc != 3)
{
printf("error\\n");
}
src_fd = open(argv[1],O_RDWR);
if(src_fd<0)
{
printf("open file %d failed\\n",src_fd);
return -2;
}
des_fd = open(argv[2],O_RDWR|O_CREAT,0755);
if(des_fd<0)
{
printf("open file %d failed\\n",des_fd);
return -3;
}
while(1)
{
nRet = read(src_fd,&readBuff[0],128);
if(nRet<128)
break;
write(des_fd,readBuff,nRet);
memset(readBuff,0,128);
}
write(des_fd,readBuff,nRet);
close(src_fd);
close(des_fd);
return 0;
}

diff是对比两个文件内容的指令,内容一样无输出,不一样则有输出
这段改进后的代码,每次读128字节,并写入文件,读到不足128字节,就退出循环,由最后的write来将最后不足128字节的内容写入文件。




