linux实现复制文件的两种方法

2023-10-30

分享在linux系统下拷贝文件的两种方法:

方法1

使用系统调用的read和write实现文件拷贝:

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <time.h> 
#define N 32
 
int main(int argc, const char *argv[])
{
	clock_t start, end;
	double cpu_time_used;
	start = clock();

	int fd_r = open(argv[1], O_RDONLY);
	if(fd_r == -1)
	{
		printf("open error\n");
		return -1;
	}
 
	int fd_w = open(argv[2], O_RDWR|O_CREAT|O_TRUNC, 0664);
	if(fd_w == -1)
	{
		printf("open error\n");
		return -1;
	}
 
	char buf[N];
	int ret = 0;
 
	while((ret = read(fd_r, buf, N)) > 0)
	{
		write(fd_w, buf, ret);
	}
	printf("copy ok\n");
 
	close(fd_r);
	close(fd_w);

 	end = clock();
 	cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;
	
        printf("运行时间:%d s",cpu_time_used);
	return 0;
}

测试:

方法2

使用fputc和fgetc等库函数实现文件拷贝:

//使用fgetc、fputc完成文件的拷贝操作
#include <stdio.h>
#include <time.h>

int main(int argc, const char *argv[])
{
        clock_t start, end;
        double cpu_time_used;
        start = clock();

        if(argc < 3)
        {
            printf("Usage : %s <src_file> <dst_file>\n", argv[0]);
                return -1;
        }

        FILE *fp_r = fopen(argv[1], "r");
        if(fp_r == NULL)
        {
                printf("fp_r fopen error\n");
                return -1;
        }

        FILE *fp_w = fopen(argv[2], "w");
        if(fp_w == NULL)
        {
                printf("fp_w fopen error\n");
                return -1;
        }

        int ret = 0;

        while((ret = fgetc(fp_r)) != EOF)
        {
                fputc(ret, fp_w);
        }
        printf("copy ok\n");

        fclose(fp_r);
        fclose(fp_w);

        end = clock();
        cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;

        printf("运行时间:%d s",cpu_time_used);
        return 0;
}

测试:

最终目录结构:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux实现复制文件的两种方法 的相关文章

  • linux perf:如何解释和查找热点

    我尝试了linux perf https perf wiki kernel org index php Main Page今天很实用 但在解释其结果时遇到了困难 我习惯了 valgrind 的 callgrind 这当然是与基于采样的 pe
  • 如何在列表框项目之间画一条线

    我希望能够用水平线分隔列表框中的每个项目 这只是我用于绘制项目的一些代码 private void symptomsList DrawItem object sender System Windows Forms DrawItemEvent
  • 当 contains() 工作正常时,xpath 函数ends-with() 工作时出现问题

    我正在尝试获取具有以特定 id 结尾的属性的标签 like span 我想获取 id 以 国家 地区 结尾的跨度我尝试以下xpath span ends with id Country 但我得到以下异常 需要命名空间管理器或 XsltCon
  • 为什么#pragma optimize("", off)

    我正在审查一个 C MFC 项目 在某些文件的开头有这样一行 pragma optimize off 我知道这会关闭所有以下功能的优化 但这样做的动机通常是什么 我专门使用它来在一组特定代码中获得更好的调试信息 并在优化的情况下编译应用程序
  • arm64和armhf有什么区别?

    Raspberry Pi Type 3 具有 64 位 CPU 但其架构不是arm64 but armhf 有什么区别arm64 and armhf armhf代表 arm hard float 是给定的名称Debian 端口 https
  • C# 中的递归自定义配置

    我正在尝试创建一个遵循以下递归结构的自定义配置部分
  • for循环中计数器变量的范围是多少?

    我在 Visual Studio 2008 中收到以下错误 Error 1 A local variable named i cannot be declared in this scope because it would give a
  • 如何将单个 char 转换为 int [重复]

    这个问题在这里已经有答案了 我有一串数字 例如 123456789 我需要提取它们中的每一个以在计算中使用它们 我当然可以通过索引访问每个字符 但是如何将其转换为 int 我研究过 atoi 但它需要一个字符串作为参数 因此 我必须将每个字
  • 从库中捕获主线程 SynchronizationContext 或 Dispatcher

    我有一个 C 库 希望能够将工作发送 发布到 主 ui 线程 如果存在 该库可供以下人员使用 一个winforms应用程序 本机应用程序 带 UI 控制台应用程序 没有 UI 在库中 我想在初始化期间捕获一些东西 Synchronizati
  • C++ 复制初始化和直接初始化,奇怪的情况

    在继续阅读本文之前 请阅读在 C 中 复制初始化和直接初始化之间有区别吗 https stackoverflow com questions 1051379 is there a difference in c between copy i
  • 需要哪个版本的 Visual C++ 运行时库?

    microsoft 的最新 vcredist 2010 版 是否包含以前的版本 2008 SP1 和 2005 SP1 还是我需要安装全部 3 个版本 谢谢 你需要所有这些
  • 如何让Gtk+窗口背景透明?

    我想让 Gtk 窗口的背景透明 以便只有窗口中的小部件可见 我找到了一些教程 http mikehearn wordpress com 2006 03 26 gtk windows with alpha channels https web
  • 在 Dynamics CRM 插件中访问电子邮件发件人地址

    我正在编写一个 Dynamics CRM 2011 插件 该插件挂钩到电子邮件实体的更新后事件 阶段 40 pipeline http msdn microsoft com en us library gg327941 aspx 并且在此阶
  • C - 直接从键盘缓冲区读取

    这是C语言中的一个问题 如何直接读取键盘缓冲区中的数据 我想直接访问数据并将其存储在变量中 变量应该是什么数据类型 我需要它用于我们研究所目前正在开发的操作系统 它被称为 ICS OS 我不太清楚具体细节 它在 x86 32 位机器上运行
  • Process.Start 阻塞

    我正在调用 Process Start 但它会阻止当前线程 pInfo new ProcessStartInfo C Windows notepad exe Start process mProcess new Process mProce
  • mysql-connector-c++ - “get_driver_instance”不是“sql::mysql”的成员

    我是 C 的初学者 我认为学习的唯一方法就是接触一些代码 我正在尝试构建一个连接到 mysql 数据库的程序 我在 Linux 上使用 g 没有想法 我运行 make 这是我的错误 hello cpp 38 error get driver
  • 防止索引超出范围错误

    我想编写对某些条件的检查 而不必使用 try catch 并且我想避免出现 Index Out of Range 错误的可能性 if array Element 0 Object Length gt 0 array Element 1 Ob
  • 使用 libcurl 检查 SFTP 站点上是否存在文件

    我使用 C 和 libcurl 进行 SFTP FTPS 传输 在上传文件之前 我需要检查文件是否存在而不实际下载它 如果该文件不存在 我会遇到以下问题 set up curlhandle for the public private ke
  • 使用按位运算符相乘

    我想知道如何使用按位运算符将一系列二进制位相乘 但是 我有兴趣这样做来查找二进制值的十进制小数值 这是我正在尝试做的一个例子 假设 1010010 我想使用每个单独的位 以便将其计算为 1 2 1 0 2 2 1 2 3 0 2 4 虽然我
  • 恢复上传文件控制

    我确实阅读了以下帖子 C 暂停 恢复上传 https stackoverflow com questions 1048330 pause resume upload in c 使用 HTTP 恢复上传 https stackoverflow

随机推荐

  • 40-400-044-运维-优化-MySQL order by 优化

    文章目录 1 概述 2 MySQL中的两种排序方式 3 ORDER BY优化的核心原则 4 ORDER BY优化实战 ORDER BY优化 WHERE ORDER BY 优化 Filesort优化 1 概述 本篇文章我们将了解ORDER B
  • 【BUG

    问题 运行Inpaint Anything时 pycharm中的conda环境下的tensorflow问题 2023 04 19 10 53 30 485189 I tensorflow core platform cpu feature
  • [非卷积5D] NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis

    不使用3D建模 使用静态图片进行训练 用 非卷积 深度网络表示场景的5D连续体表示 再通过ray marching进行渲染 paper NeRF Representing Scenes as Neural Radiance Fields f
  • idea数据库表生成实体类

    先说一下实现的功能 根据数据库 生成实体类 生成的实体类的格式可参看下图 生成的实体类中加入的注解有 Table注解 无getset方法 加入了lombok的 DATA Slf4j注解 支持 ID注解 当字段名为id时 如果数据库表中字段通
  • java比较string是否相同

    比较引用 equals 比较值 1 java中字符串的比较 我们经常习惯性的写上if str1 str2 这种写法在java中可能会带来问题 example1 String a abc String b abc 那么a b将返回true 因
  • 弹性盒子(flex布局)

    传统布局 兼容性好 布局繁琐 局限性 不能再移动端很好的布局 flex弹性布局 操作方便 布局极为简单 移动端应用广泛 PC端浏览器支持情况较差 布局原理 flex意为 弹性布局 用来为盒状模型提供最大的灵活性 任何一个容器都可以指定为fl
  • .net core 整洁架构入门

    Clean Architecture with NET Core Getting Started 使用 NET Core整洁架构 Clean Architecture 入门 Over the past two years I ve trav
  • 融合黄金正弦,十种混沌映射,搞定!把把最优值,本文思路可用于所有智能算法的改进...

    上一期的2023年最新优化算法之减法优化器算法 SABO 效果已经相当不错了 而且由于其十分简单的公式原理 更适用于刚接触智能优化算法的小伙伴 今天这篇文章为大家带来 融合黄金正弦的减法优化器 GSABO 本文会讲解一下改进思路 为各位小伙
  • 流程型和离散型制造行业mes系统的区别

    流程型和离散型制造行业mes系统的区别 在制造信息化的时代背景之下 MES系统 被越来越多的企业重视 虽然MES系统在制造行业中有着巨大的价值 但是不同的企业对MES系统的需求也存在很大的差异性 比较突出的就是流程型和离散型这两个方面 那么
  • 修改linux命令行终端的显示区行数列数

    stty rows 50 columns 200
  • Bugkuctf web 前女友

    老规矩 有新东西就记上一记 题目链接 这个有点儿意思 打开源码 好了 代码意思比较简单 重点看圈住的代码就好 满足v1v2的值不等但是md5相等 且v3 flag才行 好了 新知识来了 首先是md5 函数漏洞 第一种 GET a GET b
  • Web自动化Selenium-获取页面元素的相关信息

    获取页面元素的信息主要有两个目的 一是执行完步骤后进行断言 二是获取前一步骤的响应结果 将其作为后续步骤的输入或判断条件 获取元素的基本信息 目的输出元素的大小 文本 标签名 关键字 tag name 输出元素的标签名 size 输出元素的
  • TCP/IP协议,HTTP协议--面试必备

    经常面试被问到什么是http协议 什么是TCP协议 而且每次都弄不清楚 是时候记录一下了 一 什么是http协议 如果读者对计算机网络的体系结构比较了解的话应该清楚 IP协议位于网络层 TCP UDP协议位于传输层 HTTP位于应用层 如下
  • 本地存储基础

    本地存储特性 1 数据存储在用户浏览器中 2 设置 读取方便 甚至页面刷新不丢失数据 3 容量较大 sessionStorage约5M localStorage约20M 4 只能存储字符串 可以将对象JSON stringify 编码后存储
  • 如何使用Navicat修改mysql用户密码?

    https jingyan baidu com article 455a995054d490a167277858 html 下面介绍如何使用Navicat修改mysql用户密码的具体操作方法 工具 原料 Navicat Premium 方法
  • calico网络策略

    关于优先级order 为了与 Kubernetes 兼容 Calico 网络策略执行遵循 Kubernetes pod 的标准约定 如果没有网络策略适用于 Pod 则允许所有进出该 Pod 的流量 如果一个或多个网络策略应用于类型为 ing
  • TypeError: write() argument must be str, not bytes解决方法

    使用 HTMLTestRunner 输出测试报告 报错 TypeError write argument must be str not bytes 如下 原因 实例化HTMLTestRunner的runner runner HTMLTes
  • tmux插件管理器

    参考 tmux插件管理器tpm Tmux Plugin Manager 安装要求 tmux version 1 9以上 git bash 下载插件管理器 git clone https github com tmux plugins tpm
  • 2023Web自动化测试的技术框架和工具有哪些?

    Web 自动化测试是一种自动化测试方式 旨在模拟人工操作对 Web 应用程序进行测试 这种测试方式可以提高测试效率和测试精度 减少人工测试的工作量和测试成本 在 Web 自动化测试中 技术框架和工具起着至关重要的作用 本文将介绍几种常见的
  • linux实现复制文件的两种方法

    分享在linux系统下拷贝文件的两种方法 方法1 使用系统调用的read和write实现文件拷贝 include