完全复制一个文件的内容到另外一个文件
思路解析:
首先我这里使用了三个.c文件,分别是:yanyu.c、yanyu_old.c、yanyu_now.c
其中yanyu.c负责将yanyu_old.c中的内容读入到buff缓冲区中,然后再从buff缓冲区中将数据写入到yanyu_now.c中,最终实现将yanyu_old.c中的内容复制到yanyu_now.c中。
具体实现如下:
首先将yanyu_old.c、yanyu_now.c两个文件分别打开,然后分别获取这两个文件的文件描述符。
再通过将yanyu_old.c中的内容通过read函数读入到buff缓冲区中;
之后判断read返回的读入缓冲区实际的字节数;如果实际的字节数等于零则表示读入完成;最后再依次通过write函数以此写入到yanyu_now.c文件中。最终首先复制的效果。
完整代码如下:
yanyu.c
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
int main (){int fd_old = open("./yanyu_old.c",O_RDWR);//打开文件,获取其文件描述符int fd_now = open("./yanyu_now.c",O_RDWR);//打开文件,获取其文件描述符if(fd_old < 0 || fd_now < 0){//如果其文件描述符为负,则打开失败perror("open");return -1;}printf("open seccessful\n");//否则输出提示打开成功信息char buff[100]={0};//定义一个字符数据充当缓冲区int write_buff_to_now;//用于接收从buff写入yanyunow.c中的字符数据大小int read_buff = read(fd_old,buff,sizeof(buff));//获取从yanyu_old.c读入buff中的实际值while(read_buff != 0){//如果读入的实际字符不为零,执行写入操作if(read_buff < 0 ){perror("read");return -1;}write_buff_to_now = write(fd_now,buff,read_buff);//从buff写入到yanyunow.c中read_buff = read(fd_old,buff,sizeof(buff));//再依此从yanyuold.c中将字符读入到buff中if(write_buff_to_now < 0 ){//写入失败perror("write");return -1;} }int close_old = close(fd_old);//一开始打开了文件,使用完成之后需要关闭文件int close_now = close(fd_now);//一开始打开了文件,使用完成之后需要关闭文件if(close_old < 0 || close_now <0){//关闭文件失败,提示错误信息并结束perror("close");return -1;}printf("close successful\n");//成功关闭文件return 0;
}
yanyu_old.c
随便写就行,反正最后会通过执行yanyu.c文件,将这里的内容全部复制到yanyu_now.c里面的
yanyu_now.c
//这里为空,啥也不需要,到时候执行yanyu.c之后会将yanyu_old.c里面的内容给复制过来。
运行之前:
yanyu_old.c
yanyu_now.c
运行之后:
yanyu_now.c