实现CP指令

一、文件的打开创建

#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int open(const char *pathname, int flags);

 flags: O_RDONLY 只读

        O_WRONLY 只写

        O_RDWR  可读可写

int open(const char *pathname, int flags, mode_t mode);

如果 没有该文件:

flags: 

打开文件,如果没有,创建一个

O_CREAT: open("file1",O_RDWR|O_CREAT,0600); //这里的0600 是权限

 //打开文件,如果没有,创建一个,如果有返回-1

O_EXCL:  open("file1",O_RDWR|O_CREAT|O_EXCL,0600);

 //打开文件,从文件尾部开始写入,不覆盖前面的内容

O_APPEND: open("./file1",O_RDWR|O_EXCL);

 //可读可写的方式打开文件,删除原文件所有内容,从新写入

   O_TRUNC: open("./file1",O_RDWR|O_TRUNC);


二、文件的写入

write 的函数原型#include <unistd.h>ssize_t write(int fd, const void *buf, size_t count);
需要包含这个 头文件,把buf这个缓存区的 count 个字节 写到fd中
如果成功了的话,返回的为写入个个数,否则为-1

三、文件的读取

原型 
#include <unistd.h>ssize_t read(int fd, void *buf, size_t count);
read()尝试从文件中读取最多count个字节 fd从buf开始进入缓冲区。

我们在写入文件的时候,最后会导致光标在文件末尾。如果直接read 会导致读取失败。

目前有两个方法,解决。


第一个:写完文件后,关闭文件重新打开,能让光标回到起始位置。
//第二个:#include <sys/types.h>#include <unistd.h>off_t lseek(int fd, off_t offset, int whence);fd:所表述的文件offset :光标偏移的个数。如果为正数则向后偏移,whence(从哪里偏移呢?):1、SEEK_SET: 把光标偏移文件头部2、SEEK_cur: 把光标放在当前位置3、SEEK_END: 把光标放在文件尾部

四、cp指令的实现

/*实现文件复制的步骤
1.打开源文件和目标文件,如果没有创建一个,如果有删除里面内容。
2.读取源文件的内容
3写到目标文件中。
4关闭文件

#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>#include <unistd.h>#include<stdio.h>int main(int argc,char** argv)
{int fdSrc;int fdDes;char *readBuf = NULL; //通过参数判断指令是否正确if(argc != 3){printf("error\n");exit(-1);}fdSrc = open(argv[1],O_RDWR); //打开源文件int size = lseek(fdSrc,0,SEEK_END);lseek(fdSrc,0,SEEK_SET);    //   通过lseek()判断源文件大小,注意要把光标回到开头readBuf = malloc(sizeof(char*)*size + 8);int n_read = read(fdSrc,readBuf,1024); //避免内存浪费,可用size 代替fdDes = open(argv[2],O_RDWR|O_CREAT,0600);int n_write = write(fdDes,readBuf,strlen(readBuf));close(fdSrc);close(fdDes);return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/36704.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VsCode美化 - VsCode自定义 - VsCode自定义背景图

VsCode美化 - VsCode自定义 - VsCode自定义背景图&#xff1a;添加二次元老婆图到VsCode 前言 作为一个二刺螈&#xff0c;VsCode用久了&#xff0c;总觉得少了些什么。是啊&#xff0c;高效的代码生产工具中怎么能没有老婆呢&#xff1f; 那就安装一个VsCode插件把老婆添加…

章节7:Burp Intruder模块

章节7&#xff1a;Burp Intruder模块 参考资料 https://portswigger.net/burp/documentation/desktop/tools/intruder 01 Intruder模块作用与原理 原理 http://xxx.xx.com/bbs/index.php?namewuyanzu&mottogo 对请求参数进行修改&#xff0c;分析响应内容&#xff0…

Linux 内核第一版 (v0.01) 开源代码解读

探索Linux v0.01的内部结构&#xff0c;Linux内核经常被认为是一个庞大的开源软件。在撰写本文时&#xff0c;最新版本是v6.5-rc5&#xff0c;包含36M行代码。不用说&#xff0c;Linux是几十年来许多贡献者辛勤工作的成果。 Linux 内核首个开源版本 (v0.01) 的体积非常小&…

四、Dubbo扩展点加载机制

四、Dubbo扩展点加载机制 4.1 加载机制概述 Dubbo良好的扩展性与框架中针对不同场景使用合适设计模式、加载机制密不可分 Dubbo几乎所有功能组件都是基于扩展机制&#xff08;SPI&#xff09;实现的 Dubbo SPI 没有直接使用 Java SPI&#xff0c;在它思想上进行改进&#xff…

竞赛项目 深度学习的视频多目标跟踪实现

文章目录 1 前言2 先上成果3 多目标跟踪的两种方法3.1 方法13.2 方法2 4 Tracking By Detecting的跟踪过程4.1 存在的问题4.2 基于轨迹预测的跟踪方式 5 训练代码6 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的视频多目标跟踪实现 …

全网最牛,Appium自动化测试框架-关键字驱动+数据驱动实战(二)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 util 包 util 包…

数据可视化工具LightningChart .NET正式发布v10.5.1——拥有全新的3D新功能

LightningChart.NET完全由GPU加速&#xff0c;并且性能经过优化&#xff0c;可用于实时显示海量数据-超过10亿个数据点。 LightningChart包括广泛的2D&#xff0c;高级3D&#xff0c;Polar&#xff0c;Smith&#xff0c;3D饼/甜甜圈&#xff0c;地理地图和GIS图表以及适用于科学…

网络安全专业术语英文缩写对照表

因在阅读文献过程中经常遇到各种专业缩写&#xff0c;所以把各种缩写总结了一下。 因能力有限&#xff0c;错误在所难免&#xff0c;欢迎进行纠错与补充&#xff1a;https://github.com/piaolin/CSAbbr 渗透相关 缩写全称解释备注XSSCross Site Script Attack跨站脚本攻击为…

ResNet创新点总结

ResNet&#xff08;Residual Networks&#xff09;是深度学习中的一个重要架构&#xff0c;其创新点主要体现在解决了深层神经网络训练中的梯度消失和梯度爆炸问题&#xff0c;从而使得可以构建更深的神经网络。以下是 ResNet 的创新点总结&#xff1a;   1. 残差连接&#x…

nlohmann json:通过items遍历object/array

//官方的例子 #include <iostream> #include <nlohmann/json.hpp>using json = nlohmann::json;int main() {// create JSON valuesjson j_object = {{"one", 1}, {"two", 2}};json j_array = {1, 2, 4, 8, 16};// example for an objectfor (…

java毕业设计-智慧食堂管理系统-内容快览

首页 智慧食堂管理系统是一种可以提高食堂运营效率的管理系统。它将前端代码使用Vue实现&#xff0c;后端使用Spring Boot实现。这个系统的目的是简化食堂管理&#xff0c;提高食堂服务质量。在现代快节奏的生活中&#xff0c;人们对餐饮服务提出了更高的要求&#xff0c;食堂管…

Flink-间隔联结

间隔联结只支持事件时间间隔联结如果遇到迟到数据&#xff0c;则会关联不上&#xff0c;比如来了一个5秒的数据&#xff0c;它可以关联前2秒的数据&#xff0c;后3秒的数据&#xff0c;就是可以关联3秒到8秒的数据&#xff0c;然后又来了一个6秒的数据&#xff0c;可以关联4秒到…

Docker安装elasticsearch分布式搜索

文章目录 ☀️安装elasticsearch☀️1.部署单点es&#x1f338;1.1.创建网络&#x1f338;1.2.下载镜像&#x1f338;1.3.运行 ☀️2.部署kibana&#x1f338;2.1.部署&#x1f338;2.2.DevTools ☀️3.安装IK分词器&#x1f338;3.1.在线安装ik插件&#xff08;较慢&#xff0…

Rx.NET in Action 中文介绍 前言及序言

Rx 处理器目录 (Catalog of Rx operators) 目标可选方式Rx 处理器(Operator)创建 Observable Creating Observables直接创建 By explicit logicCreate Defer根据范围创建 By specificationRangeRepeatGenerateTimerInterval Return使用预设 Predefined primitivesThrow …

答疑:Arduino IDE配置其他开发板下载速度慢

基于案例&#xff1a;Linux环境Arduino IDE中配置ATOM S3 通常&#xff0c;网络问题较多&#xff0c;可以使用一些技巧。 https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/arduino/package_m5stack_index.json 没有配置&#xff0c;不支持M5Stack&#xff08;ESP32&…

HCIA静态路由与动态路由

目录 一、静态路由 定义&#xff1a; 适用环境 二、动态路由 定义&#xff1a; 特点&#xff1a; 动态路由协议: 三、缺点&#xff1a; 1&#xff09;静态路由缺点: 2&#xff09;动态路由的缺点: 四、静态路由与动态路由的区别 静态路由: 动态路由: 一、静态路…

字节原来这么容易进,是面试官放水,还是公司实在是太缺人?

本人211非科班&#xff0c;之前在字节和腾讯实习过&#xff0c;这次其实没抱着什么特别大的希望投递&#xff0c;没想到字节可以再给我一次机会&#xff0c;还是挺开心的。 本来以为有个机会就不错啦&#xff01;没想到能成功上岸&#xff0c;在这里要特别感谢帮我内推的同学&…

【Python】进阶之 MySQL入门教程

文章目录 数据库概述Mysql概述Mysql安装与使用Navicat安装和使用Mysql终端指令操作Mysql和python交互订单管理案例实现 数据库概述 数据库的由来 发展历程说明人工管理阶段用纸带等进行数据的存储文件系统阶段数据存储在文件中数据库阶段解决了文件系统问题高级数据库阶段分布式…

IDEA 设置字体大小无效

设置字体大小&#xff0c;一般都是从file>settings>editor>font>Size里设置&#xff0c;一般都有效。 但是&#xff0c;如果是更换了主体&#xff0c;则需要从主体颜色菜单那里这是&#xff0c;你看这个页面&#xff0c;上面黄色三角也提示你了&#xff0c;要去颜色…

学习笔记整理-DOM-03-定时器

一、定时器 1. setInterval()函数 setInterval()函数可以重复调用一个函数&#xff0c;在每次调用之间具有固定的时间间隔。 setInterval(function () { // 这个函数将自动被以固定间隔时间调用 }, 2000);第一个参数是函数第二个参数是间隔时间&#xff0c;以毫秒为单位&…