【Rust】用libc实现文件拷贝

2023-11-04

#[macro_export]
macro_rules! c_string {
    ($s:expr)=> (
        {
            use std::ffi::{CString};
            CString::new($s).unwrap().as_ptr()
        }
    )
}

#[macro_export]
macro_rules! check_pointer {
    (let $p:ident $(: $t:ty)? =  $($f:ident)::*  ( $($a:expr),* )   ) => {
        let $p $(: $t)? = $($f)::* (  $($a),*  ) ;
        if $p.is_null() {
            libc::perror(c_string!(stringify!($($f)::*)));
            libc::exit(1);
        }
    };
}



use libc::{fputc, putchar};
#[test]
fn test_file_copy() {

    unsafe {
        let mut ch;
        
		check_pointer! {
        	let fp = libc::fopen(c_string!("/home/sun/src/hexfile.cc") ,c_string!("r"));
        }
      
       	check_pointer! {
        	let out = libc::fopen(c_string!("/home/sun/src/out_hexfile.txt") , c_string!("w") );
       	}
       	
        loop{
            ch = libc::fgetc(fp);
            if ch == libc::EOF { break; }
            fputc(ch,out);
        }

        libc::fclose(fp);
        libc::fclose(out);

    }
}

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

【Rust】用libc实现文件拷贝 的相关文章

随机推荐

  • 刷脸支付可针对客户做二次营销活动

    随着智能手机和WIFI的普及 80 的顾客都不再拿钱包 而是掏出手机付款 大到商店小到早点摊菜市场 只要拿出手机轻轻一扫 便可以完成整个购买流程 而如今 支付4 0时代已经到来 基于生物识别技术 不用手机 万物可付 李嘉诚说 当一项新鲜事物
  • MySQL高级篇-第06章_索引的数据结构

    1 为什么使用索引 索引是存储引擎用于快速找到数据记录的一种数据结构 就好比一本数课书的目录部分 通过目录中找到对应文章的页码 便可快速定位到需要的文章 MySQL中也是一样的道理 进行数据查找时 首先查看查询条件是否命中某条索引 符合则通
  • 找第一个只出现一次的字符c++

    找第一个只出现一次的字符 提交数 3563 通过率 43 14 平均分 61 55 题目描述 给定一个只包含小写字母的字符串 请你找到第一个仅出现一次的字符 如果没有 输出no 输入格式 一个字符串 长度小于100000 输出格式 输出第一
  • rabbitmq初学之连接测试

    最近在搞接口 需要用到rabbitmq 在公司搞了一个下午还是连接不上 后来细看了英文说明 测试连接成功 得出如下报错几点 我用的安装包 otp win64 17 0 exe erlang vm 和rabbitmq server 3 3 1
  • 消息队列-kafka入门详解

    本文适用于初学者 学习kafka之前 应该都知道它是消息队列 但是和我们印象中数据结构的队列不同的是 它持久化到磁盘上 1 我们首先从定义来看 Kafka 一个分布式的 分区化 可复制提交的日志服务 我们先来想想什么是分区 好比图书馆的书
  • pcb过孔与电流对照一览表_PCB设计项目能不能成功,这个因素占了30%

    电源平面的处理 在PCB设计中占有很重要的地位 在一个完整的设计项目中 通常电源的处理决定项目的30 50 的成功率 本次给大家介绍在PCB设计过程中电源平面处理应该考虑的基本要素 1 做电源处理时 首先应该考虑其载流能力 其中包含2个方面
  • QT-通用的软件界面框架,好看且实用

    QT 通用的软件界面框架 好看且实用 前言 一 演示效果 二 配置说明 三 关键程序 四 程序下载 前言 常规软件开发 使用这种界面框架 基本是可以做很多个常规项目 比较有参考意义 本次软件使用开发的环境是QT5 13 2 VS2017 不
  • House Man 【HDU - 3440】【差分约束】

    题目链接 就是我们必须跳N 1次 从最小的房子跳到最高的房子 然后呢 求最小的房子和最高的房子之间的最长的可能距离 那么就是差分约束咯 我们可以这么推 首先 对于所有的点 a i a i 1 gt 1 那么转换一下 就是a i 1 a i
  • vue 从后端取图片返回发现是两张,但自己只要一张图片 怎么操作

    1 用JavaScript里边常用的分隔符去操作 item original status user profile image url split 0
  • Redis的hyperloglog

    互联网名词 什么是UV Unique Visitor 独立访客 一般理解为客户端IP 需要去重考虑 什么是PV Page View 页面浏览量 不用去重 什么是DAU Daily Active User 日活跃用户量 登录或者使用了某个产品
  • 【7】Docker中部署RabbitMQ

    1 拉取镜像 docker pull rabbitmq 3 8 5 根据我之前在VMware的Centos中装过的 rabbitmq 版本来拉取 3 8 5 的版本 拉取指定版本 3 8 5 的 rabbitmq 镜像 2 守护方式 创建容
  • 最大化参数 火车头_火车头多少吨

    展开全部 火车头的重量一般是126 132吨 最重的是韶山4型改进型车头 重量为184吨 车型62616964757a686964616fe58685e5aeb931333433623735不同而所用的火车头型号也不尽相同 重量也有所差异
  • 代码随想录算法训练营打卡第一天

    代码随想录算法训练营第1天 Leetcode704 二分查找 27 移除元素 704 二分查找 视频链接 https www bilibili com video BV1fA4y1o715 第一遍读题思考 五分钟内 如果没有思路就写暴力解法
  • [C++11]独占的智能指针unique_ptr的初始化和使用

    std unique ptr 是一个独占型的智能指针 它不允许其他的智能指针共享其内部的指针 可以通过它的构造函数初始化一个独占智能指针对象 但是不允许通过赋值将一个 unique ptr 赋值给另一个 unique ptr std uni
  • C++小作业——简单通讯录设计

    界面展示 1 菜单界面 2 添加联系人 选择按钮1 3 显示联系人 选择按钮2 会显示当前通讯录里面的所有联系人信息 include
  • 知识蒸馏算法汇总

    知识蒸馏有两大类 一类是logits蒸馏 另一类是特征蒸馏 logits蒸馏指的是在softmax时使用较高的温度系数 提升负标签的信息 然后使用Student和Teacher在高温softmax下logits的KL散度作为loss 中间特
  • 为什么musql数据库root不需要密码就能登录

    MySQL 数据库的 root 用户是超级用户 它可以访问和修改数据库中的所有内容 所以为了保证数据库的安全性 必须为 root 用户设置密码才能登录 但是 如果当初安装数据库的时候没有设置 root 密码 那么就不需要密码就可以登录
  • select、poll、epoll之间的区别总结[整理]

    http www cnblogs com Anker p 3265058 html 随笔 141 文章 2 评论 298 select poll epoll之间的区别总结 整理 select poll epoll都是IO多路复用的机制 I
  • 办公室里秀一把!用Python控制Excel实现自动化办公!附学习教程

    1 安装 2 操作一个简单的Excel文档 操作注释及代码 操作完成后 数据存储结果如下 3 操作简单Excel文档并添加数据格式 操作代码如下 附带数据格式的定义 操作效果如图所示
  • 【Rust】用libc实现文件拷贝

    macro export macro rules c string s expr gt use std ffi CString CString new s unwrap as ptr macro export macro rules che