Linux中进行单文件内容的复制

摘要:
文件内容复制的常规方法:开辟一段空间,不断读取文件的内容并写入另一文件当中,这种方法好在安全,一般在类型允许的最大范围内是安全的,缺点就是复制内容的时间长一次性复制文件的内容,这种方法必须首先获取当前被复制的文件内容的大小,然后一次性开辟与文件内容大小相同的内存空间,通常为了安全,都必须让大小加1。
文件内容复制的常规方法:
  • 开辟一段空间,不断读取文件的内容并写入另一文件当中,这种方法好在安全,一般在类型允许的最大范围内是安全的,缺点就是复制内容的时间长
  • 一次性复制文件的内容,这种方法必须首先获取当前被复制的文件内容的大小,然后一次性开辟与文件内容大小相同的内存空间,通常为了安全,都必须让大小加1
读取文件内容的步骤
  • 打开被复制文件(open/fopen)
  • 读取文件内容(read/fread)--->当使用系统IO(open这一类)的时候可以直接读取内容,但当使用标准IO(fopen这一类)的时候,必须进行下一步
  • 标准IO读取文件内容的时候,必须先获取到文件内容的大小,通常使用fseek和ftell来获取,系统IO则不用
  • 写入另一份文件中进行保存(write/fwrite)
  • 关闭打开的文件
具体的操作(考虑到移植性,本文章使用标准IO进行操作)
  • 使用fopen打开被复制的文件和创建一个保存的文件,并判断是否打开或创建成功
  • 使用fseek和ftell来获取当前复制文件的内容大小fileSize;
  • 开辟一个内存空间,建议使用动态开辟的方法,比如mallco,calloc,new等
  • 使用fread读取被复制文件的内容,使用fwrite写进到保存文件中
  • 使用fclose关闭上述的两个文件
代码显示
1#include <stdio.h>
2 
3 int main(int argc,char *argv)
4 {
5     //以只读的方式打开被复制的文件
6     FILE *srcFd = fopen("./source.txt","r");
7     if(NULL ==srcFd)
8 {
9         printf("open source file failed
");
10         return -1;
11 }
12 
13     //以读写的方式创建一个不存在的文件
14     FILE *dstFd = fopen("./save.txt","w+");
15     if(NULL ==dstFd)
16 {
17         printf("open save file failed
");
18         return -1;
19 }
20 
21     //进行获取文件大小的操作
22     fseek(srcFd,0,SEEK_END);       //将光标移动到文件末尾
23     long fileSize = ftell(srcFd);  //获取文件的大小
24     fseek(srcFd,0,SEEK_SET);       //将光标恢复到文件的开头
25 
26     //开辟一个新空间(动态开辟)
27     char *dataBuf = (char *)calloc(1,fileSize+1);
28     if(NULL ==dataBuf)
29 {
30         printf("calloc a memory failed
");
31         return -1;
32 }
33 
34     //读取文件的内容
35     long retSize = fread(dataBuf,1,fileSize,srcFd);
36     if(retSize !=fileSize)
37 {
38         printf("read file context failed
");
39         return -1;
40 }
41 
42     //写入保存文件中
43     retSize = fwrite(dataBuf,1,fileSize,dstFd);
44     if(retSize !=fileSize)
45 {
46         printf("write context in file failed
");
47         return -1;
48 }
49 
50     //关闭文件和释放内存空间
51 fclose(srcFd);
52 fclose(dstFd);
53 
54     free(dataBuf);
55 
56     return 0;    
57 }

免责声明:文章转载自《Linux中进行单文件内容的复制》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇linux sync命令MyISAM存储引擎下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【 Linux 】Systemd 使用说明(1)

1. 前言   在 CentOS 7 中使用 systemd 取代了 init 的启动模式,这样的更新换代有什么好处呢?首先需要对 init 和 systemd 有个概念的认识。 2. init 概述   在 CentOS 7 之前的版本中,init 作为第一个启动进程,是所有进程的父进程。使用 init 有两个显著的缺点:   (1)启动时间长。init...

Centos7基本命令

shell基本命令 linux命令行的组成结构 linux系统命令操作语法格式 命令 空格 参数 空格 文件路径或者需要处理的内容 rm -rf /tmp/* ls -la /home 1.一般情况下,【参数】是可选的,一些情况下【文件路径】也是可选的 2.参数》同一个命令,跟上不同的参数执行不同的功能...

nexus在linux上搭建

Maven 仓库的分类:(maven的仓库只有两大类) 1.本地仓库  2.远程仓库,在远程仓库中又分成了3种: 2.1 中央仓库  2.2 私服  2.3 其它公共库 有个maven私服可以很方便地管理我们的jar包和发布构建到远程仓库,本文就介绍了如何在linux下一步步使用nexus搭建maven私服。 私服是架设在局域网的一种特殊的远程仓库,目的是...

Linux下定时任务的查看及取消

  crontab -l 表示列出所有的定时任务 crontab -r 表示删除用户的定时任务,当执行此命令后,所有用户下面的定时任务会被删除,执行crontab -l后会提示用户:“no crontab for admin”   该文件中每行都包括六个域,其中前五个域是指定命令被执行的时间,最后一个域是要被执行的命令。 每个域之间使用空格或者制表符分...

linux运维、架构之路-分布式存储Ceph

一、Ceph介绍        Ceph是一个Linux PB级分布式文件系统,能够在维护POSIX兼容性的同时加入了复制和容错功能。Ceph号称高可用的分布式存储系统,通过多个MON节点(通常为3个)维护集群的状态及元数据信息,而真正存储数据的OSD节点通过向MON节点汇报状态,并通过CRUSH算法将数据副本布局到相应OSD的所在磁盘上,完成数据的持久化...

龙芯 3A4000 安装 Debian10 (via debootstrap)

由于一些原因,Debian 的内核不能直接在龙芯的 cpu 上使用。据悉 Linux 5.7 kernel 改进了对龙芯的支持,不久的将来我们应该就能更愉快地在龙芯上运行 Debian 了。 感谢龙芯群大佬的指导~~ 免去了编译内核等繁琐的工作。 龙芯 3A3000 及更早的机子可以参考刘世伟的文章:传送门 。 思路 Debian Wiki:https:/...