linux C 語言開發 (七) 文件 IO 和標準 IO

???文章的目的為了記錄使用C語言進行linux?開發學習的經歷。開發流程和要點有些記憶模糊,趕緊記錄,防止忘記。

?相關鏈接:

linux C 語言開發 (一) Window下用gcc編譯和gdb調試

linux C 語言開發 (二) VsCode遠程開發 linux

linux C 語言開發 (三) 建立云服務器

linux C 語言開發 (四) linux系統常用命令

linux C 語言開發 (五) linux系統目錄結構

linux C 語言開發 (六) 程序的編輯和編譯(vim、gcc)

linux C 語言開發 (七) 文件 IO 和標準 IO

linux C 語言開發 (八) 進程基礎

linux C 語言開發 (九) 進程間通訊--管道

linux C 語言開發 (十) 進程間通訊--信號

Linux C到Android App開發推薦鏈接(入門十二章):

開源 java android app 開發(一)開發環境的搭建_csdn 開源 java android app-CSDN博客

開源 java android app 開發(一)開發環境的搭建-CSDN博客

開源 java android app 開發(二)工程文件結構-CSDN博客

開源 java android app 開發(三)GUI界面布局和常用組件-CSDN博客

開源 java android app 開發(四)GUI界面重要組件-CSDN博客

開源 java android app 開發(五)文件和數據庫存儲-CSDN博客

開源 java android app 開發(六)多媒體使用-CSDN博客

開源 java android app 開發(七)通訊之Tcp和Http-CSDN博客

開源 java android app 開發(八)通訊之Mqtt和Ble-CSDN博客

開源 java android app 開發(九)后臺之線程和服務-CSDN博客

開源 java android app 開發(十)廣播機制-CSDN博客

開源 java android app 開發(十一)調試、發布-CSDN博客

開源 java android app 開發(十二)封庫.aar-CSDN博客

linux C到.net mvc開發推薦鏈接:

開源C# .net mvc 開發(一)WEB搭建_c#部署web程序-CSDN博客

開源 C# .net mvc 開發(二)網站快速搭建_c#網站開發-CSDN博客

開源 C# .net mvc 開發(三)WEB內外網訪問(VS發布、IIS配置網站、花生殼外網穿刺訪問)_c# mvc 域名下不可訪問內網,內網下可以訪問域名-CSDN博客

開源 C# .net mvc 開發(四)工程結構、頁面提交以及顯示_c#工程結構-CSDN博客

開源 C# .net mvc 開發(五)常用代碼快速開發_c# mvc開發-CSDN博客

主要內容:講述linux中的文件IO和標準IO的區別

目錄:

1.基本介紹

2.函數介紹

3.綜合代碼

4.效果演示

一、基本介紹

文件 IO 是 Linux 系統提供的接口, 針對文件和磁盤進行操作, 不帶緩存機制; 標準 IO 是 C 語言函數庫里的標準 I/O 模型, 在 stdio.h 中定義, 通過緩沖區操作文件, 帶緩存機制。 Linux 系統中一切皆文件, 包括普通文件, 目錄, 設備文件(不包含網絡設備) , 管道, fifio 隊列, socket 套接字等, 在終端輸入“ls -l”可查看文件類型和權限。
標準 IO 和文件 IO 常用 API 如下:

標準 IO文件 IO
打開/創建fopenopen
getc,fgetc,getchar,fgets,gets, freadread
putc,fputc,putc,fputs,puts, fwritewrite
關閉fcloseclose

區別圖展示

文件 IO 是直接調用內核提供的系統調用函數(linux), 頭文件是 unistd.h, 標準 IO 是間接調用系統調用函數(系統都可以),頭文件是 stdio.h,
?

二、函數介紹

open

函數int open(const char *pathname, int flags) int open(const char *pathname, int flags, mode_t mode)
頭文件#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>
參數 pathname路徑和文件名
參數 flags文件打開方式, 可用多個標志位按位或設置
參數 mode權限掩碼, 對不同用戶和組設置可執行, 讀, 寫權限, 使用八進制數表示, 此參數可不寫
返回值open()執行成功會返回 int 型文件描述符, 出錯時返回-1。
作用通過系統調用, 可以打開文件, 并返回文件描述符

read

函數ssize_t read(int fd, void *buf, size_t count)
頭文件#include <unistd.h>
參數 fd要讀的文件描述符
參數 buf緩沖區, 存放讀到的內容
參數 count每次讀取的字節數
返回值返回值大于 0, 表示讀取到的字節數;等于 0 在阻塞模式下表示到達文件末尾或沒有數據可讀(EOF) , 并調用阻塞;等于-1 表示出錯, 在非阻塞模式下表示沒有數據可讀。

write

函數ssize_t write(int fd, const void *buf, size_t count);
頭文件#include <unistd.h>
參數 fd文件描述符;
參數 buf緩存區, 存放將要寫入的數據
參數 count每次寫入的個數
功能每次從 buf 緩存區拿 count 個字節寫入 fd 文件。
返回值大于或等于 0 表示執行成功, 返回寫入的字節數;返回-1 代表出錯

close

函數int close(int fd)
頭文件#include <unistd.h>
參數 fd文件描述符
返回值成功返回 0; 錯誤返回-1

三、綜合代碼

功能:打開文件1和文件2,如果文件1不為空,將文件1的前32個字符寫入文件2,最后關閉。

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
//步驟一: 判斷命令行的參數
if(argc != 3)
{
printf("Usage:%s <src file> <obj file>\n", argv[0]);
} 
// 步驟二: 定義變量
int fd_src;
int fd_obj;
char buf[32] = {0};
ssize_t ret;
// 步驟三: 打開文件獲得文件描述符
fd_src = open(argv[1], O_RDWR);
if (fd_src < 0)
{
printf("open is error\n");
return -1;
} 
fd_obj = open(argv[2], O_CREAT | O_RDWR, 0666);
if (fd_obj < 0)
{
printf("open is error\n");
return -2;
} 
// 步驟四: 讀寫操作
while((ret=read(fd_src,buf,32))!=0)
{
write(fd_obj,buf,ret);
} 
// 步驟五: 關閉文件描述符
close(fd_src);
close(fd_obj);
return 0;
}

四、實際效果

編譯文件

運行main,1.txt的內容拷貝到2.txt。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/99139.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/99139.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/99139.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

maven , mvn 運行 項目

提示&#xff1a;環境搭建 文章目錄前言一、使用步驟1. 以構建含有 pom.xml 的項目2.mvn 運行具體項目3.mvn 指定模塊>運行具體項目前言 提示&#xff1a;版本 spirngboot 3.2 jdk 21 mvn 3.9 提示&#xff1a;以下是本篇文章正文內容&#xff0c;下面案例可供參考 一、使…

JVM垃圾回收的時機是什么時候(深入理解 JVM 垃圾回收時機:什么時候會觸發 GC?)

深入理解 JVM 垃圾回收時機&#xff1a;什么時候會觸發 GC&#xff1f;在 Java 開發中&#xff0c;我們常聽說 “JVM 會自動進行垃圾回收”&#xff0c;但很少有人能說清&#xff1a;GC 究竟在什么情況下會被觸發&#xff1f;是到固定時間就執行&#xff1f;還是內存滿了才會啟…

在Vue項目中Axios發起請求時的小知識

在Vue項目中Axios發起請求時的小知識 在Vue項目開發中&#xff0c;Axios作為基于Promise的HTTP客戶端&#xff0c;憑借其簡潔的API設計和強大的功能&#xff08;如請求/響應攔截、自動JSON轉換、取消請求等&#xff09;&#xff0c;已成為前端與后端通信的主流選擇。本文將深入…

GeoHash分級索引技術

GeoHash分級索引技術是一種將二維地理坐標轉換為一維字符串的空間索引方法,其核心是通過分級網格劃分和前綴編碼實現高效的空間數據檢索。以下從技術原理、實現細節到工程優化展開詳細解析: 一、編碼原理與分級結構 1. 經緯度二進制化 GeoHash通過遞歸二分地球表面生成網格…

HTML HTML基礎(4)

1.列表 (1).有序列表 概念&#xff1a;有順序或側重順序的列表。 <h2>要把大象放冰箱總共分幾步</h2> <ol> <li>把冰箱門打開</li> <li>把大象放進去</li> <li>把冰箱門關上</li> </ol> (2).無序列表 概念&a…

MySQL中的回表操作

在數據庫查詢&#xff08;尤其是基于 B樹索引 的關系型數據庫&#xff0c;如MySQL、PostgreSQL&#xff09;中&#xff0c;“回表”是一個核心且高頻出現的概念&#xff0c;直接影響查詢性能。要理解回表&#xff0c;需先理清索引結構與數據存儲的關聯&#xff0c;再拆解其發生…

QT子線程與GUI線程安全交互

在Qt應用程序開發中&#xff0c;涉及到多線程處理時&#xff0c;如何安全地從子線程更新UI界面是一個常見的問題。Qt的UI界面并不是線程安全的&#xff0c;意味著你不能直接在子線程中操作UI組件&#xff08;比如按鈕、標簽等&#xff09;。如果不遵循線程安全的規則&#xff0…

RL【10-2】:Actor - Critic

系列文章目錄 Fundamental Tools RL【1】&#xff1a;Basic Concepts RL【2】&#xff1a;Bellman Equation RL【3】&#xff1a;Bellman Optimality Equation Algorithm RL【4】&#xff1a;Value Iteration and Policy Iteration RL【5】&#xff1a;Monte Carlo Learnin…

開源大模型天花板?DeepSeek-V3 6710億參數MoE架構深度拆解

文章目錄認知解構&#xff1a;DeepSeek的定位與核心價值模型概述與發展歷程創立初期與技術奠基&#xff08;2023年7月-2024年11月&#xff09;里程碑一&#xff1a;MoE架構規模化突破&#xff08;2024年12月&#xff09;里程碑二&#xff1a;推理成本革命性優化&#xff08;202…

10 訓練中的一些問題

&#x1f31f; 大背景&#xff1a;訓練神經網絡 下山尋寶 訓練神經網絡就像你蒙著眼在一座大山里&#xff0c;想找最低點&#xff08;最小損失&#xff09;。你只能靠腳下的坡度&#xff08;梯度&#xff09;來決定往哪兒走。 你的位置 模型參數&#xff08;權重 www&#xf…

synchronized鎖升級的過程(從無鎖到偏向鎖,再到輕量級鎖,最后到重量級鎖的一個過程)

鎖升級是 Java 中 synchronized 鎖 的核心優化機制&#xff08;基于 JVM 的 對象頭 Mark Word 實現&#xff09;&#xff0c;指鎖的狀態從 無鎖 → 偏向鎖 → 輕量級鎖 → 重量級鎖 逐步升級的過程。其目的是通過 “按需升級”&#xff0c;在不同并發場景下選擇最優的鎖實現&am…

HOT100--Day25--84. 柱狀圖中最大的矩形,215. 數組中的第K個最大元素,347. 前 K 個高頻元素

HOT100–Day25–84. 柱狀圖中最大的矩形&#xff0c;215. 數組中的第K個最大元素&#xff0c;347. 前 K 個高頻元素 每日刷題系列。今天的題目是《力扣HOT100》題單。 題目類型&#xff1a;棧&#xff0c;堆。 84. 柱狀圖中最大的矩形 思路&#xff1a; class Solution {publ…

基于 Apache Doris 的用戶畫像數據模型設計方案

一、 需求分析與設計目標數據源&#xff1a;用戶基本信息&#xff1a;用戶ID、性別、出生日期、注冊時間、常駐地域&#xff08;省、市、區&#xff09;、職業等。用戶體檢報告&#xff1a;每次體檢的報告ID、體檢時間、各項指標&#xff08;如血壓、血糖、血脂、BMI等&#xf…

Python的深度學習

深入理解Python高級特性掌握Python的高級特性是進階的關鍵&#xff0c;包括裝飾器、生成器、上下文管理器、元類等。這些特性能夠提升代碼的靈活性和效率。例如&#xff0c;裝飾器可以用于實現AOP&#xff08;面向切面編程&#xff09;&#xff0c;生成器可以處理大數據流而無需…

數據庫范式(Normalization)

一個設計混亂的數據庫就像一個雜亂的房間&#xff0c;用起來非常不方便&#xff1a;東西到處亂放&#xff08;數據冗余&#xff09;&#xff0c;找件東西要翻遍所有角落&#xff08;查詢困難&#xff09;&#xff0c;扔掉一把舊椅子時&#xff0c;可能會把搭在上面的唯一一件外…

數據結構---循環隊列

基于循環數組實現的循環隊列解決了順序隊列中的假溢出導致的空間浪費問題操作&#xff1a;&#xff08;1&#xff09;初始化//循環隊列 typedef struct {int *data;//指針模擬聲明數組int head,tail;//隊頭&#xff0c;隊尾 }Queue; //初始化 Queue *InitQueue() {Queue *q (Q…

深入理解線程模型

線程作為操作系統調度的基本執行單元&#xff0c;是實現高吞吐、低延遲系統的基礎。一、進程與線程的體系結構對比核心概念&#xff1a;進程&#xff08;Process&#xff09;&#xff1a;操作系統資源分配的基本單位&#xff0c;擁有獨立的虛擬地址空間、文件描述符表、環境變量…

TTC定時器中斷——MPSOC實戰3

開啟TTC定時器&#xff0c;不同于7000系列的私有定時器此處設置LPD_LSBUS頻率TTC頻率取決于LPD_LSBUS可前往指定位置查看參數不使能填寫對應宏可前往指定位置查看參數main.c#include <stdio.h> #include "xparameters.h" #include "xgpiops.h" #incl…

人工智能訓練師三級備考筆記

一、實操1&#xff09;通用語法&#xff08;常見于實操題第一塊代碼塊&#xff09;1.讀取文件數據或加載數據集等描述時一般為以下結構&#xff1a;Datapd.read_文件格式(文件名) 注意&#xff1a;文件名需要用‘ ’框起來&#xff0c;必須要有引號文件格式有以下內容csv、txt…

Cherry Studio遞歸工具調用機制深度解析

在現代AI應用開發中,工具調用(Tool Calling)已成為大語言模型與外部系統交互的核心機制。Cherry Studio作為一款先進的AI對話客戶端,實現了一套完整的遞歸工具調用系統,能夠讓AI助手在執行復雜任務時自動調用多個工具,并根據執行結果智能決策下一步操作。本文將深入解析這…