欢迎光临
我们一直在努力

linux——文件3

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字节的内容写入文件。

赞(0)
未经允许不得转载:171主机测评 » linux——文件3
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址