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

文件内容复制的常规方法:

  • 开辟一段空间,不断读取文件的内容并写入另一文件当中,这种方法好在安全,一般在类型允许的最大范围内是安全的,缺点就是复制内容的时间长
  • 一次性复制文件的内容,这种方法必须首先获取当前被复制的文件内容的大小,然后一次性开辟与文件内容大小相同的内存空间,通常为了安全,都必须让大小加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\n");
10         return -1;
11     }
12
13     //以读写的方式创建一个不存在的文件
14     FILE *dstFd = fopen("./save.txt","w+");
15     if(NULL == dstFd)
16     {
17         printf("open save file failed\n");
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\n");
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\n");
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\n");
47         return -1;
48     }
49
50     //关闭文件和释放内存空间
51     fclose(srcFd);
52     fclose(dstFd);
53
54     free(dataBuf);
55
56     return 0;
57 }
时间: 2024-08-27 03:41:33

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

linux中快速清空文件内容的几种方法

这篇文章主要介绍了linux中快速清空文件内容的几种方法,需要的朋友可以参考下 $ : > filename $ > filename $ echo "" > filename $ echo > filename $ cat /dev/null > filename 原文地址:https://www.cnblogs.com/lxwphp/p/9565572.html

Linux中查看日志文件的正确姿势,求你别tail走天下了!

作为一个后端开发工程师,在Linux中查看查看文件内容是基本操作了.尤其是通常要分析日志文件排查问题,那么我们应该如何正确打开日志文件呢?对于笔者这种小菜鸡来说,第一反应就是 cat,tail,vi(或vim)了,是的,我曾经用过好多次vim编辑器来查看日志文件. 千万不要使用vi命令来查看大文件内容, 尤其对于那些几十G的大文件.因为vi仅仅是一个编辑器(可以理解为windows中的记事本),使用vi命令后则会把文件所有内容加载到内存中,如果内存不够大的话,则可能会导致服务器瘫痪. 为了生成测

Linux中逐行读取文件的方法

  Linux中逐行读取文件的方法             在linux中有很多方法逐行读取一个文件的方法,其中最常用的就是下面的脚本里的方法,而且是效率最高,使用最多的方法.为了给大家一个直观的感受,我们将通过生成一个大的文件的方式来检验各种方法的执行效率. 方法1:while循环中执行效率最高,最常用的方法. function while_read_LINE_bottm(){ While read LINE do echo $LINE done   < $FILENAME } 注释:我习惯把

Linux 中httpd基于文件的用户的访问控制和CGI

基于用户访问控制(这里控制的是整个页面控制)         用户认证类型:             基本认证:Basic             摘要认证:digest,是否明文还是密文的控制. 虚拟用户:仅用于访问某服务和获取资源的凭证:         用户帐号密码存放位置:.htpasswd 这个文件用户名是明文的,密码是加密的.这个文件的名字也是你自己取的,一般我们不改动.htpasswd存放在httpd配置文件下即可                 实例:我们这里基于文件的认证(文件

linux下批量替换文件内容

linux下批量替换文件内容 1.网络上现成的资料 格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl 路径` linux sed 批量替换多个文件中的字符串 sed -i "s/oldstring/newstring/g" `grep oldstring -rl yourdir` 例如:替换/home下所有文件中的www.admin99.net为admin99.net sed -i "s/www.admin99.net/a

Linux下 批量替换文件内容方法和odoo替换谷歌字体

#odoo#用中科院CDN解决odoo用到google字体速度慢问ti Linux下批量替换文件内容方法 http://www.cnblogs.com/fjping0606/p/4428850.html 1:查找find . -type f -name "*.html"|xargs grep 'yourstring' 2:查找并替换find -name '要查找的文件名' | xargs perl -pi -e 's|被替换的字符串|替换后的字符串|g' perl -pi -e在Per

Linux下快速清空文件内容的三种方法

Linux下快速清空文件内容的三种方法在Linux环境中,我们如果想快速清空一个文件或者log的内容: 1.#echo "" > test.txt(文件大小被截为1字节) 2.# > test.txt(文件大小被截为0字节) 3.#cat /dev/null > /home/test.txt(文件大小被截为0字节)————————————————版权声明:本文为CSDN博主「贾维斯博客」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声

五种方式让你在java中读取properties文件内容不再是难题

一.背景 最近,在项目开发的过程中,遇到需要在properties文件中定义一些自定义的变量,以供java程序动态的读取,修改变量,不再需要修改代码的问题.就借此机会把Spring+SpringMVC+Mybatis整合开发的项目中通过java程序读取properties文件内容的方式进行了梳理和分析,先和大家共享. 二.项目环境介绍 Spring 4.2.6.RELEASE SpringMvc 4.2.6.RELEASE Mybatis 3.2.8 Maven 3.3.9 Jdk 1.7 Id

Linux中如何查看文件的最初创建时间

查看 一个文件的 最初创建时间: Linux中如何查看文件的最初创建时间 linux 目前Linux没有直接查看创建文件的命令,你只能通过文件是否被修改过来进行判断. //查看代码stat 文件名 //例如:[[email protected] ~]# stat 1.txt  File: "1.txt"  Size: 18              Blocks: 8          IO Block: 4096   普通文件Device: fd00h/64768d    Inode