完全复制一个文件的内容到另外一个文件

思路解析:

首先我这里使用了三个.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在这里插入图片描述

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐