主要通过c语言代码,利用open打开文件,然后通过read和write读取其中的内容进行移动。
代码如下:
#include<stdio.h>
#include<unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<string.h>
#include<stdlib.h>
int main(int argc, const char *argv[])
{
if(argc != 3)
{
printf("未输入文件拷贝路径\n");
return -1;
}
int fd_need,fd;
fd = open(argv[2],O_RDONLY | O_EXCL);
fd_need = open(argv[1],O_WRONLY | O_APPEND | O_CREAT);
if(fd == -1 || fd_need == -1)
{
perror("open fail\n");
return -1;
}
lseek(fd_need,0,SEEK_END);
char buf[128];
int ret;
printf("开始打印\n");
int i = 1;
int k;
while(1)
{
memset(buf,0,sizeof(buf));
ret = read(fd,buf,sizeof(buf));
if(ret == 0)
{
printf("文件追加完成\n");
char buf[50];
sprintf(buf,"sed -i '$d' %s",argv[1]);
system(buf);
break;
}
if(buf[0] != '\0')
write(fd_need,buf,sizeof(buf));
else
printf("读取失误\n");
}
return 0;
}
生成可执行文件a.out后,执行 ./a.out 文件名1 文件名2
即可将文件2的内容复制到文件1的末尾。文件需要在当前路径下,否则就需要填写文件路径。
可以通过修改lseek函数的第三个参数选择复制的位置,比如,第三个参数改为SEEK_SET在文件头开始复制。
改为SEEK_CUR可以在打开文件后退出的位置复制。
链接:https://pan.baidu.com/s/1rs-96OcYZUGGw_GJ2DYZxA 密码:uxvi