實現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.pswp.cn/news/36704.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/36704.shtml
英文地址,請注明出處:http://en.pswp.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;以毫秒為單位&…