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关闭上述的两个文件
代码显示
#include <stdio.h> int main(int argc,char *argv)
{
//以只读的方式打开被复制的文件
FILE *srcFd = fopen("./source.txt","r");
if(NULL == srcFd)
{
printf("open source file failed\n");
return -;
} //以读写的方式创建一个不存在的文件
FILE *dstFd = fopen("./save.txt","w+");
if(NULL == dstFd)
{
printf("open save file failed\n");
return -;
} //进行获取文件大小的操作
fseek(srcFd,,SEEK_END); //将光标移动到文件末尾
long fileSize = ftell(srcFd); //获取文件的大小
fseek(srcFd,,SEEK_SET); //将光标恢复到文件的开头 //开辟一个新空间(动态开辟)
char *dataBuf = (char *)calloc(,fileSize+);
if(NULL == dataBuf)
{
printf("calloc a memory failed\n");
return -;
} //读取文件的内容
long retSize = fread(dataBuf,,fileSize,srcFd);
if(retSize != fileSize)
{
printf("read file context failed\n");
return -;
} //写入保存文件中
retSize = fwrite(dataBuf,,fileSize,dstFd);
if(retSize != fileSize)
{
printf("write context in file failed\n");
return -;
} //关闭文件和释放内存空间
fclose(srcFd);
fclose(dstFd); free(dataBuf); return ;
}
Linux中进行单文件内容的复制的更多相关文章
- linux中快速清空文件内容的几种方法
这篇文章主要介绍了linux中快速清空文件内容的几种方法,需要的朋友可以参考下 $ : > filename $ > filename $ echo "" > f ...
- Linux中查看日志文件的正确姿势,求你别tail走天下了!
作为一个后端开发工程师,在Linux中查看查看文件内容是基本操作了.尤其是通常要分析日志文件排查问题,那么我们应该如何正确打开日志文件呢?对于笔者这种小菜鸡来说,第一反应就是 cat,tail,vi( ...
- Linux中环境变量文件及配置
Linux中环境变量文件及配置 一.环境变量文件介绍 转自:http://blog.csdn.net/cscmaker/article/details/7261921 Linux中环境变量包括系统 ...
- reinstall_xbt: Linux中如何查看文件的最初创建时间
Linux中如何查看文件的最初创建时间 与文件相关的几个时间: 1.访问时间,读一次这个文件的内容,这个时间就会更新.比如对这个文件使用more命令.ls.stat命令都不会修改文件的访问时间. ...
- Linux中/etc/passwd文件与/etc/shadow文件解析.
此文章转载自"慧可",用来学习. 1. /etc/passwd文件 1.1 /etc/passwd文件内容格式 用户名: 密码 : uid : gid :用户描述:主目录:登陆s ...
- Linux中如何查看文件夹的大小
直接查看当前文件夹的大小: du –sh 只看文件夹的名字里包含某字符串的子文件夹的大小: du –h –d 1 | grep "BACKEND" 我的linux系统被阉割的比较厉 ...
- 如何在 Linux 中挂载 ISO 文件
在 Windows 中,我们常常使用 Daemon Tools 和 Virtual CloneDrive 等虚拟光驱软件挂载光盘镜像,下面我们一起来学习在 Linux 中如何挂载 ISO 文件. 在 ...
- Linux 中挂载 ISO 文件
在 Linux 中挂载 ISO 文件 用 mount 命令,在终端中输入如下命令即可: sudo mount -o loop filename.iso /cdrom 其中 filename.iso 是 ...
- linux中导入sql文件
在linux中导入sql文件的方法分享(使用命令行转移mysql数据库) 因导出sql文件 在你原来的网站服务商处利用phpmyadmin导出数据库为sql文件,这个步骤大家都会,不赘述. 上传sql ...
随机推荐
- Angular企业级开发(5)-项目框架搭建
1.AngularJS Seed项目目录结构 AngularJS官方网站提供了一个angular-phonecat项目,另外一个就是Angular-Seed项目.所以大多数团队会基于Angular-S ...
- ASP.NET Core应用的错误处理[2]:DeveloperExceptionPageMiddleware中间件如何呈现“开发者异常页面”
在<ASP.NET Core应用的错误处理[1]:三种呈现错误页面的方式>中,我们通过几个简单的实例演示了如何呈现一个错误页面,这些错误页面的呈现分别由三个对应的中间件来完成,接下来我们将 ...
- 搞个这样的APP要多久?
这是一个“如有雷同,纯属巧合”的故事,外加一些废话,大家请勿对号入座.开始了…… 我有些尴尬地拿着水杯,正对面坐着来访的王总,他是在别处打拼的人,这几年据说收获颇丰,见移动互联网如火如荼,自然也想着要 ...
- 旺财速啃H5框架之Bootstrap(一)
接下来的时间里,我将和大家一起对当前非常流行的前端框架Bootstrap进行速度的学习,以案例的形式.对刚开始想学习Bootstrap的同学而找不着边的就很有帮助了.如果你想详细的学习Bootstra ...
- 马里奥AI实现方式探索 ——神经网络+增强学习
[TOC] 马里奥AI实现方式探索 --神经网络+增强学习 儿时我们都曾有过一个经典游戏的体验,就是马里奥(顶蘑菇^v^),这次里约奥运会闭幕式,日本作为2020年东京奥运会的东道主,安倍最后也已经典 ...
- Linux杀死进程,查看进程
http://blog.csdn.net/wojiaopanpan/article/details/7286430/
- Mysql - 触发器/视图
触发器在之前的项目中, 应用的着实不多, 没有办法的时候, 才会去用这个. 因为这个东西在后期并不怎么好维护, 也容易造成紊乱. 我最近的项目中, 由于数据库设计(别人设计的)原因, 导致一些最简单功 ...
- Jexus 服务器部署导航
说明:本索引只是方便本人查找,不涉及版权问题,所有博客,还是到元博客地址访问. <script async src="//pagead2.googlesyndication.com/p ...
- 【Java并发编程实战】-----“J.U.C”:CyclicBarrier
在上篇博客([Java并发编程实战]-----"J.U.C":Semaphore)中,LZ介绍了Semaphore,下面LZ介绍CyclicBarrier.在JDK API中是这么 ...
- 理解CSS
写在前面的话:对于web开发,html完成网页的structure,css完成网页的presentation,js完成网页的behavior,今天就来说一说css,通过理解一些css的基础概念,能够更 ...