文件IO學習【一】

来源:https://www.cnblogs.com/fly-home/p/18182300
-Advertisement-
Play Games

目錄電腦的組成部分硬體系統軟體系統文件系統Linux系統的目錄根文件系統說明目錄的結構分析Linux 的文件類型 電腦的組成部分 硬體系統 電腦的硬體主要是由五部分組成:控制器、運算器、存儲器、輸入設備、輸出設備。 運算器和控制器的總稱是中央處理器(CPU),指的是電腦中對信息進行高速運算處 ...


目錄

電腦的組成部分

硬體系統

電腦的硬體主要是由五部分組成:控制器、運算器、存儲器、輸入設備、輸出設備。

  • 運算器和控制器的總稱是中央處理器(CPU),指的是電腦中對信息進行高速運算處理的主要部件。

  • 存儲器則是用來存儲程式、數據和文件,一般是由快速的內部存儲器(容量可達數百兆位元組,甚至數G位元組)和慢速的外部存儲器(容量可達數十G或數百G以上)組成,比如電腦中的記憶體條和固態硬體就屬於存儲器。

  • 輸入設備與輸出設備就是用於實現人機交互的信息轉換器,由電腦的輸入輸出控制系統負責管理外部設備與主存儲器之間的信息交換,常用的輸入設備主要有鍵盤以及滑鼠,輸出設備則是顯示器、印表機以及其他可連接到電腦上的I/O設備。

image

軟體系統

如果電腦只有硬體系統,那麼電腦是無法正常工作的,因為電腦是由基本的電子元件組成的,而電子元件的狀態是需要由軟體來控制的,所以電腦必須要搭載軟體系統,電腦的軟體系統與硬體系統是互相依賴的。

電腦的軟體系統一般由兩部分組成:系統軟體、應用軟體

  • 系統軟體指的是電腦中的操作系統以及硬體驅動程式等。
  • 應用軟體指的是用戶可以使用的各種程式設計語言以及利用程式設計語言設計的應用程式的集合。

文件系統

電腦的系統軟體和應用軟體其實都是大量的程式和數據組成的,也就是說兩者都需要存儲在電腦的存儲器中,這些程式和數據以什麼樣的格式存儲到存儲器中就由文件系統決定。

大家可以把文件系統理解為是一種“標準”或者“格式”,只要遵循這套標準就可以正確的訪問存儲在磁碟中的數據。

當然,標準的制定則是至關重要,但是由於技術原因或者商業利益考慮,導致現在文件系統沒有辦法統一。所以目前存在多種文件系統,常見的有FAT32、NTFS、ext4......,比如電腦的本地磁碟的文件系統就是NTFS格式。

image

當大家有的時候發現磁碟出現某些扇區損壞導致數據丟失時,就可以對磁碟進行格式化,在格式化磁碟的時候就可以選擇指定的文件系統類型。

image

Linux系統也支持多種文件系統類型,可以在Linux系統根目錄的/proc目錄下查閱filesystems

image

電腦中搭載的Linux操作系統就屬於系統軟體,操作系統的作用是用來連接應用軟體和底層硬體,因為涉及到Linux內核的安全管理機制,所以用戶空間是沒有辦法直接訪問硬體設備的。

image

由上圖所示,用戶想要實現對硬體的控制,必須通過Linux內核提供的相關函數介面才行。這樣做的好處是用戶無需瞭解硬體是如何控制的,只需將對應的參數提交給內核,內核便會將控制參數傳遞給硬體設備,最終由內核控制硬體設備完成相關動作。

也正因如此,用戶需要先利用程式設計語言設計出源文件(xxx.c),然後操作系統內核需要從磁碟中訪問源文件,再通過編譯器把源文件編譯生成可執行文件,最後內核再訪問存儲在磁碟中的可執行文件,從而把控制硬體的參數讀取出來。

  • 知識點回顧:.c如何變為可執行文件?

    預處理(-E,生成.i文件)-> 編譯(-S,生成-.s文件)-> 彙編(-c,生成.o文件)-> 鏈接(-o,生成可執行文件)

所以訪問磁碟中的文件也是操作系統要做的工作之一。所以操作系統和文件系統可以理解為一種“合作”關係,文件系統指定了讀寫文件的標準,而操作系統會按照這套標準去完成訪問文件的動作。

Linux系統的目錄

根文件系統說明

Linux系統是離不開文件系統的,在Linux內核啟動之後首先搭載的就是根文件系統rootfs,根文件系統rootfs本質就是文件系統,只不過是Linux內核掛載的第一個文件系統。而Linux內核源碼是存儲在文件系統中,所以在linux系統啟動的過程中啟動引導程式uboot會載入內核並利用內核掛載根文件系統。

image

根文件系統被掛載之後,一些服務程式和一些腳本文件才可以存儲在文件系統中,其他的文件系統才可以被掛載。

根文件系統會提供一些服務:比如根文件系統會提供一個根目錄(存儲文件和目錄)、提供一個shell終端(用戶才可以輸入命令)、根文件系統會存儲應用程式。總而言之,Linux內核離開根文件系統是無法正常工作的。

image

Linux系統的所有程式和數據都是以“*文件*”的形式存儲在文件系統中,所有Linux 用戶和程式看到的文件、目錄、軟連接及文件保護信息等都存儲在其中。這種機制有利於用戶和操作系統的交互,這也是Linux系統一切皆文件的原因。

其實就是借鑒了Unix系統的設計風格,體現了*面向對象*的設計思想,把腳本、文檔、硬體設備等都抽象為文件對象,再通過統一的POSIX操作介面對文件進行操作,簡化了操作難度。

目錄的結構分析

在 Linux 操作系統中,所有的文件和目錄都被組織成以一個根節點“/”開始的倒置的樹狀結構。如下圖:

image

文件系統的最頂層是由*根目錄*開始的,*系統使用“/”來表示根目錄*,在根目錄之下的既可以是目錄(目錄就相當於 Windows 中的文件夾,但目錄並不是一個“容器”,其中包含的是目標文件的索引),也可以是文件,而每一個目錄中又可以包含(子)目錄或文件。如此反覆就可以構成一個龐大的文件系統。

使用這種樹狀、具有層次的文件結構主要目的是方便文件系統的管理和維護,想象一下,如果所有的文件都放在一個目錄下,其文件系統的管理和維護將變成一場噩夢。

同樣,為了方便觀察Linux系統的目錄結構,所以Linux內核也提供了一個shell命令:*tree*,該命令可以以樹狀結構列印出目錄的層次,當然,tree命令需要在Linux系統中提前安裝。

在shell終端中輸入命令: sudo apt-get install tree 安裝tree命令

提示:後續在編寫工程文檔“READ ME”時會用到該指令來闡述工程的架構。

Linux 的文件類型

由於程式和數據在Linux系統中都是以文件的形式存在,那不同格式的數據所對應的文件類型也各不相同,在Linux系統下可以把文件的類型分為*以下七種*

  • 普通文件(-) :存在於外部存儲器中,用於存儲普通數據。
  • 目錄文件(d) :用於存放目錄項,是文件系統管理的重要文件類型。
  • 管道文件(p) :一種用於進程間通信的特殊文件,也稱為命名管道FIFO。
  • 套接字文件(s) :一種用於網路間通信的特殊文件。
  • 鏈接文件(l) :用於間接訪問另外一個目標文件,相當於windows快捷方式。
  • 字元設備文件(c) :字元設備在應用層的訪問介面。
  • 塊設備文件(b) :塊設備在應用層的訪問介面。

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 開發工具 IDE工具:jetbrain IDEA 工具插件:EmmyLua 本機lua項目和調試lua文件 添加lua項目模板,安裝完EmmyLua插件就有了 添加模板項目後,在項目中添加lua類型的文件 為lua項目添加一個編譯調試器 在調試器中,配置lua和lua項目的信息 現在就可以輸出hel ...
  • 目錄系統IO介面說明概念解釋標準IO和系統IO的區別常用系統IO函數介紹打開文件關閉文件文件讀取文件寫入位置偏移 系統IO介面說明 概念解釋 由於Linux系統下“一切皆文件”,也就是Linux系統下的數據和程式都是以文件的形式存儲的,所以Linux內核會提供一組操作文件的函數介面,這組函數介面也被 ...
  • UART UART 1. 什麼是UART? 2. 硬體接線 3. 數據幀格式 4. 波特率 4.1. 波特率和比特率的定義 4.2. 波特率和比特率之間的關係 4.3. 波特率的作用 5. UART通信分析實踐 5.1. 發送"Hello, World!",請寫出數據幀。 5.2. 每秒傳輸多少個字 ...
  • 時序圖 時序圖 1. 參考資料 2. 基礎 3. 符號 3.1. 斜線形式的上升沿、下降沿 3.2. Either or 信號 3.3. 波形省略 3.2.1. 虛線 3.2.2. 波浪號 3.4. 地址&數據表示 4. 實例-WT588F語音晶元時序圖 4.1. 瞭解背景 4.2. 分析 4.3. ...
  • 首先來看下什麼是漏桶演算法和令牌桶演算法 Nginx並不直接實現漏桶演算法或令牌桶演算法,但這些演算法在控制網路流量和請求速率方面非常有用。這些演算法通常在網路編程、API服務、負載均衡等領域中使用,以確保系統的穩定性和性能。 漏桶演算法(Leaky Bucket): * 漏桶演算法用於限制數據的傳輸速率。它可以將 ...
  • 文件IO 筆試題 作業:設計程式,獲取當前系統時間,把時間轉換為特定格式”yy年mm月dd日 星期x tt:mm:ss”,並每隔1s寫入到本地磁碟中一個叫做log.txt的文本中,如果文本不存在則創建。 代碼: /******************************************* ...
  • 目錄標準IO練習題題目:分析:代碼展示結果展示總結知識擴展time()函數localtime()函數 標準IO練習題 題目: 設計程式,獲取當前系統時間,把時間轉換為特定格式”yy年mm月dd日 星期x tt:mm:ss”,並每隔1s寫入到本地磁碟中一個叫做log.txt的文本中,如果文本不存在則創 ...
  • 目錄文件操作介面說明標準IO標準IO函數介紹打開文件:fopen()fopen使用相關知識補充關閉文件:fclose讀取數據字元讀取(fgetc)按行讀取按塊讀取寫入文件字元寫入字元串寫入按塊寫入讀取文件位置設置位移獲取位移格式訪問 文件操作介面說明 Linux系統為了簡化不同類型文件的操作流程,在 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...