Linux 系統編程:文件編程

本篇涉及文件的創建、打開、讀和關閉。

文件為操作系統服務和設備提供了一個簡單而一致的 接口 。“接口”指的是一種約定或標準,通過提供一個一致的接口,可以為上層隱藏底層硬件和服務的復雜性,上層無需關注它們的具體實現細節。
比如操作系統中的文件系統。文件可以存儲在硬盤上,也可以存儲在光盤上、磁帶上。不同的硬件之間差別很大,文件系統也不相同。但是只需要抽象出 5 個基本的函數:openclosereadwriteioctl,應用程序就可以不用理會文件用的是什么文件系統、存儲在哪里,就可以完成文件的操作。這 5 個基本函數的定義就是接口。

在 Linux 中,一切(或幾乎一切)都是文件。

操作系統的核心部分,即內核,是一組 設備驅動程序 。它們是一組對系統硬件進行控制的底層 接口

為了向用戶提供一個一致的接口,設備驅動程序封裝了所有與硬件相關的特性。硬件的特有功能通常可通過 ioctl (用于 I/O 控制) 系統調用來提供。

低層次文件訪問

使用 系統調用 函數訪問文件,屬于低層次文件訪問方式。

write 函數

#include <unistd.h>
#include <stdlib.h>
#include <string.h>int main(int argc, char *argv[])
{char *test_str = "Here is some data\n";write(1, test_str, strlen(test_str));exit(0);
}
  • 頭文件 unistd.h 包含了許多與 POSIX 操作系統 API 相關的定義和函數原型,例如 write 函數。
  • 頭文件 stdlib.h 包含 exit 函數
  • 頭文件 string.h 包含處理字符串的函數原型,例如 strlen
  • write 函數是系統調用,原型為 size_t write (int __fd, const void *__buf, size_t __n),在本例中,將 test_str 中的內容寫入到文件描述符 1 所代表的設備上(標準輸入)。
    write 函數返回寫入的字節數,出錯返回 -1。
  • 調用 exit 函數來結束程序。這里的參數0表示程序正常退出。

read 函數

#include <unistd.h>
#include <stdlib.h>
#include <string.h>int main(int argc, char *argv[])
{char error_read_message[] = "Error writing to stdout\n";char buffer[8];int nread;nread = read(0, buffer, 8);if(nread == -1)write(2, error_read_message, strlen(error_read_message));write(1, buffer, nread);exit(0);
}
  • 調用 read 函數從文件描述符 0(即標準輸入)讀取最多 8 個字節的數據到 buffer 中,并將讀取的字節數存儲在 nread 中。注意它返回實際讀入的字節數,這可能會小于 8 。
  • 讀取最多 8 個字節數據,這表示多于 8 個字符時,只會取前 8 個字符,不會導致溢出。
  • 在 shell 中運行這個程序,read 函數從標志輸入中讀取數據,shell 將標準輸入映射到鍵盤上。當按下回車鍵時,shell 將輸入的內容發送給程序。注意輸入的數據包含換行符

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

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

相關文章

Kafka進階

文章目錄 概要應用場景消息隊列兩種模式kafka的基礎架構分區常見問題小結 概要 kafka的傳統定義&#xff1a;kafka是一個分布式的基于發布\訂閱模式的消息隊列&#xff0c;主要用于大數據實時處理領域。 kafka的最新概念&#xff1a;kafka是一個開源的分布式事件流平臺&#x…

隨機森林模型、模型模擬技術和決策樹模型簡介

隨機森林模型、模型模擬技術和決策樹模型簡介 隨機森林模型 隨機森林模型是一種比較新的機器學習模型&#xff0c;它是通過集成學習的方法將多個決策樹模型組合起來&#xff0c;形成一個更加強大和穩定的模型。隨機森林模型的基本原理是“數據隨機”和“特征隨機”&#xff0…

10種常見的光伏發電量計算方法

光伏發電是一種將太陽能轉化為電能的清潔能源技術。隨著環境保護意識的日益增強和能源結構的轉型&#xff0c;光伏發電得到了廣泛的應用。對于光伏系統來說&#xff0c;發電量的準確計算是評估系統性能、預測長期收益和優化系統運行的關鍵。以下是常見的光伏發電量計算方法&…

Vista 2.08: The storm chaser

A story about Mathew —— the storm chaser. "He is too young to understand his dream and the Harvard is just others dream put into his mind." "You dont have to chase for the happiness that defined by others. You must define your own happines…

Python3零基礎教程之Python解釋器與開發環境搭建

大家好&#xff0c;我是千與編程&#xff0c;碩士畢業于北京大學&#xff0c;曾先后就職于字節跳動&#xff0c;京東等互聯網大廠&#xff0c;目前在編程導航知識星球擔任星球嘉賓&#xff0c;著有《AI算法畢設智囊袋》&#xff0c;《保姆級帶你通關秋招教程》兩大專欄。 今天開…

從it方面介紹部分好玩的電影

電影推薦 1.《黑客帝國》《The matrix》 僅推薦第一二三部2. 《代碼奔騰》《code rush》3 人物傳記類 《社交網絡》 《硅谷傳奇》 《喬布斯》4《模仿游戲》也是傳記 但主演是 卷福5 《環形使者》6 《蝴蝶效應》 三部7.《隱私大盜》8.《監視資本主義&#xff1a;智能陷阱》9. 劇…

RMAN備份與恢復

文章目錄 一、RMAN介紹二、全量備份三、增量備份0級備份1級增量備份累積性差量備份總結 四、壓縮備份壓縮備份介紹壓縮備份操作壓縮備份優缺點 五、異常恢復1、恢復前的準備2、恢復數據庫 六、RMAN相關參數 一、RMAN介紹 RMAN&#xff08;Recovery Manager&#xff09;是Oracl…

在做了frp的實驗室服務器不同端口間傳輸文件

背景 實驗室有兩臺服務器&#xff0c;使用的是一個IP&#xff0c;兩個端口&#xff0c;給人看上去是一臺服務器的兩個端口&#xff0c;實際是兩臺服務器。 現在我需要從一個端口傳輸一個文件夾到另外一個端口&#xff0c;實際上是從一個機器傳輸到另外一個機器。 操作 在兩臺…

linux系統消息中間件rabbitmq部署鏡像集群

RabbitMQ鏡像集群配置 RabbitMQ鏡像集群配置創建鏡像集群:鏡像隊列策略設置說明 RabbitMQ鏡像集群配置 上面已經完成RabbitMQ默認集群模式&#xff0c;但并不保證隊列的高可用性&#xff0c;盡管交換機、綁定這些可以復制到集群里的任何一個節點&#xff0c;但是隊列內容不會復…

thonny 使用命令行安裝包并且替換源,安裝速度嗖嗖的

thonny 使用命令行安裝包并且替換源 點擊 “工具”->"打開系統shell"替換源下載嘎嘎快 點擊 “工具”->“打開系統shell” 替換源 pip config set global.index-url http://mirrors.aliyun.com/pypi/simple/ pip config set global.trusted-host mirrors.aliy…

AI Agent幾篇不錯的概述和介紹

?2023年人工智能體(AI Agent)開發與應用全面調研&#xff1a;概念、原理、開發、應用、挑戰、展望 OpenAI的CEO都在談的 AI Agent&#xff0c;到底是什么&#xff1f; | 人人都是產品經理 AI智能體卷爆大模型&#xff01;4大Agent打擂&#xff0c;西部世界誰將成為軟件2.0&am…

快速學習安全框架 Springsecurity最新版(6.2)--用戶授權模塊

簡介 上一節Springsecurity 用戶認證 Springsecurity 擁有強大的認證和授權功能并且非常靈活&#xff0c;,一來說我們都i有以下需求 可以幫助應用程序實現以下兩種常見的授權需求&#xff1a; 用戶-權限-資源&#xff1a;例如張三的權限是添加用戶、查看用戶列表&#xff0c;李…

康威生命游戲

康威生命游戲 康威生命游戲(Conway’s Game of Life)是康威發明的細胞自動機。 生命游戲有幾個簡單的規則&#xff1a; 細胞有兩種狀態&#xff0c;存活或死亡&#xff0c;每個細胞以自身為中心與周圍的八格細胞互動。 對于存活的細胞&#xff1a; 當周圍的細胞過少(<2)或…

【Linux】:簡易實現自動化構建代碼make/Makefile

朋友們、伙計們&#xff0c;我們又見面了&#xff0c;本期來給大家解讀一下有關Linux自動化構建代碼make/makefile的使用&#xff0c;如果看完之后對你有一定的啟發&#xff0c;那么請留下你的三連&#xff0c;祝大家心想事成&#xff01; C 語 言 專 欄&#xff1a;C語言&…

Leo贈書活動-18期 《高效使用Redis》

?作者簡介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;熱愛Java后端開發者&#xff0c;一個想要與大家共同進步的男人&#x1f609;&#x1f609; &#x1f34e;個人主頁&#xff1a;Leo的博客 &#x1f49e;當前專欄&#xff1a; 贈書活動專欄 ?特色專欄&#xff1a;…

Ubuntu22部署MySQL5.7詳細教程

Ubuntu22部署MySQL5.7詳細教程 一、下載MySQL安裝包二、安裝MySQL三、啟動MySQL檢查狀態登錄MySQL 四、開啟遠程訪問功能1、允許其他主機通過root訪問數據庫2、修改配置文件&#xff0c;允許其他IP通過自定義端口訪問 五、使用Navicat連接數據庫 默認情況下&#xff0c;Ubuntu2…

Android的ViewModel

前言 在Compose的學習中&#xff0c;我們在可組合函數中使用rememberSaveable???????保存應用數據&#xff0c;但這可能意味著將邏輯保留在可組合函數中或附近。隨著應用體量不斷變大&#xff0c;您應將數據和邏輯從可組合函數中移出。 而在之前的應用架構學習中&…

【測試開發項目】個人博客項目測試報告

文章目錄 前言 一、項目背景 二、項目功能 三、測試用例設計 3.1 個人博客項目測試用例設計 3.1.1 博客登錄頁測試用例設計 3.1.2 博客列表頁測試用例設計 3.1.3 博客詳情頁測試用例設計 3.1.4 博客編輯頁測試用…

從數據庫中讀取文件導出為Excel

使用的庫&#xff08;org.apache.poi&#xff09; 在poi包中有Apache提供的各種分類文件&#xff0c;如下 結構功能HSSF讀寫Microsoft Excel XLS文件XSSF讀寫Microsoft Excel OOXML XLSX文件HWPF讀寫Microsoft Word DOC文件HSLF讀寫Microsoft PowerPoint文件 下面以XSSF為例&…

【STM32學習】——續上:軟件SPI讀寫W25Q64SPI通信外設硬件SPI讀寫W25Q64

四、軟件SPI讀寫W25Q64 工程思路與I2C類似&#xff0c;MySPI.c是通信底層&#xff0c;主要包括通信引腳封裝、初始化、SPI通信的三個拼圖&#xff08;起始、終止和交換一個字節&#xff09;&#xff1b;基于此文件建立W25Q64.c&#xff0c;調用MySPI三個拼圖&#xff0c;拼接成…