Linux文件fd

文件理解

文件=屬性+內容

打開文件:本質是進程打開文件,文件沒被打開時候再磁盤上。

操作文件:本質是進程操作文件。

在操作系統內部,一定存在大量被打開的文件,會對其進行管理,每一個被打開的文件,一定存在對應的描述文件屬性的結構體struct file。

在task_struct存在一個struct file_struct* files,files存在struct file* fd_arrary[N]

文件描述符fd本質是:文件映射關系的數組的下標。

?虛擬文件系統:推薦深入理解LinuxVFS與文件系統抽象-CSDN博客

文件操作

open

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);pathname: 要打開或創建的目標文件
flags: 打開文件時,可以傳入多個參數選項,用下面的一個或者多個常量進行“或”運算,構成flags。
參數:O_RDONLY: 只讀打開O_WRONLY: 只寫打開O_RDWR : 讀,寫打開這三個常量,必須指定一個且只能指定一個O_CREAT : 若文件不存在,則創建它。需要使用mode選項,來指明新文件的訪問權限O_APPEND: 追加寫mode_t理解:直接 man 手冊,比什么都清楚。O_TRUNC:文件存在就清空
返回值:成功:新打開的文件描述符失敗:-1

創建成功,返回值大于等于3,是文件描述符

0:標準輸入

1:標準輸出

2:標準錯誤

因此向顯示器打印也可以用write。

過程:

1.創建file

2.開辟文件緩沖區空間,加載文件數據(延后)

3.查看進程的文件描述符

4.file地址填入對應下標

5.返回下標

write

#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);

read

#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);

無論讀寫。都必須在合適的時候,讓操作系統吧文件的內容讀到緩沖區。

在C語言中,FILE是一個結構體,一定封裝描述符fd。

文件操作還是建議用語言提供的文件方法,因為平臺不同,系統調用接口不同。

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

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

相關文章

北京-4年功能測試2年空窗-報培訓班學測開-第六十四天-準備面試項目(焦慮)-同學開始面試

今日產出&#xff0c;整理自我介紹&#xff0c;繼續整理第一個項目&#xff0c;學習linux命令很焦慮啊很焦慮&#xff0c;很著急今天本打算結束第一個項目的&#xff0c;但是沒能夠&#xff0c;越說感覺越亂&#xff0c;讓同學聽我講&#xff0c;同學說&#xff0c;要聽睡著了于…

網絡是如何運轉的?——常見網絡協議與網絡分層模型

目錄 基本網絡協議 TCP&#xff08;傳輸控制協議&#xff09; 可靠傳輸&#xff1a;序列號確認應答重傳機制 序列號&#xff08;seq&#xff09; 確認應答&#xff08;ACK&#xff09; 超時重傳 三次握手與四次揮手 三次握手&#xff08;建立連接&#xff09; 四次揮手…

OpenAI放大招:ChatGPT學習模式上線,免費AI智能家教

目錄一、背景介紹二、學習模式是什么國內直接使用AI主流模型GPT-5也會第一時間同步更新。三、主要功能特點1、互動式提示2、分層次響應3、個性化支持4、知識檢查5、靈活切換四、學生如何使用學習模式1、訪問方式2、適用場景3、交互過程4、使用示例五、局限性1、依賴學生自覺性2…

設計模式:享元模式 Flyweight

目錄前言問題解決方案享元工廠結構代碼前言 享元是一種結構型設計模式&#xff0c;它摒棄了在每個對象中保存所有數據的方式&#xff0c;通過共享多個對象所共有的相同狀態&#xff0c;讓你能在有限的內存容量中載入更多對象。 問題 假如你希望在長時間工作后放松一下&#x…

Spring Boot容器化實戰:用官方OpenJDK鏡像極速啟動你的應用

前言 用 Docker 打包 Java 應用,尤其是 Spring Boot,簡直是開發者的超級利器。想象一下,你的程序就像勤快的外賣小哥,隨時待命,跑遍任何一臺機器,馬上為你服務。不論是開發環境還是生產環境,Docker 都能讓部署變得輕松又高效,徹底告別“環境不一致”的煩惱。 本篇文章…

【計算機網絡 | 第1篇】計算機網絡概述(上)

文章目錄一.現代通信基礎&#x1f95d;二.網絡、互聯網、英特網&#x1f9fe;1.網絡&#xff08;Network&#xff09;2.互聯網&#xff08;internet&#xff09;3.因特網&#xff08;Internet&#xff09;三.計算機網絡的標準定義&#x1f95d;早期定義&#x1f9fe;物理構成視…

python語法筆記

問題解決辦法 原本是個小問題&#xff0c;但是花了我大量時間。先說最后的解決辦法&#xff1a;360網絡急救箱搞的。一.問題描述 始終拉取失敗 二.解決過程 1.登陸憑證檢測&#xff0c;查下密碼是不是不對。2.清除GIT所有數據 3.使用SSH拉取 生成密鑰網站上添加密鑰SSH 拉取4.G…

XTOM藍光三維掃描儀:解鎖中小尺寸復雜零件的高精度3D檢測新境界

在3C消費電子行業&#xff0c;產品從出廠到用戶手中&#xff0c;可能經歷運輸、使用中的意外跌落。據統計&#xff0c;超過30%的電子產品售后問題與物理沖擊相關。跌落測試可模擬產品在運輸、使用中意外跌落的場景&#xff0c;可評估其結構強度、內部組件抗沖擊能力&#xff0c…

Django+celery異步:拿來即用,可移植性高

一、依賴環境 1、python解釋器版本&#xff1a;python3.7.5 2、穩定依賴包 # Celery 核心 celery5.2.7 kombu5.2.4 billiard3.6.4.0 vine5.0.0# Redis broker backend redis4.3.6# eventlet (如果用 -P eventlet)【windows系統可以使用】 eventlet0.33.3 greenlet1.1.3# 避免…

Ubuntu18.04 LTS +RTL 8125 出現安裝完系統后沒有網絡問題

Ubuntu18.04 LTS RTL 8125 出現安裝完系統后沒有網絡問題問題描述最終解決方案1.下載對應的Realtek網卡驅動&#xff0c;使用命令lspci查看網卡信息安裝網卡3.重啟電腦記錄過程1.內核升級方式1&#xff09;下載新的內核驅動2&#xff09;安裝內核驅動3&#xff09;重啟電腦4&am…

集成電路學習:什么是ARM CortexM處理器核心

ARM Cortex-M是ARM公司專為微控制器( Microcontroller)設計的處理器核心系列,它以其高性能、低功耗和易于開發的特點,在嵌入式系統和微控制器領域得到了廣泛應用。以下是關于ARM Cortex-M的詳細介紹: 一、ARM Cortex-M的概述 ARM Cortex-M系列處理器是基于ARM架構的高能效…

Apache Ignite 的分布式原子類型(Atomic Types)

以下的內容是關于 Apache Ignite 的分布式原子類型&#xff08;Atomic Types&#xff09;&#xff0c;主要包括 IgniteAtomicLong 和 IgniteAtomicReference。它們是 跨集群節點的“全局共享變量”&#xff0c;支持線程安全、原子性操作&#xff0c;即使多個節點同時訪問也能保…

Leetcode 08 java

283. 移動零 提示 給定一個數組 nums&#xff0c;編寫一個函數將所有 0 移動到數組的末尾&#xff0c;同時保持非零元素的相對順序。 請注意 &#xff0c;必須在不復制數組的情況下原地對數組進行操作。 示例 1: 輸入: nums [0,1,0,3,12] 輸出: [1,3,12,0,0] 示例 2: 輸…

LeetCode 56 - 合并區間

思路 排序&#xff1a;將所有區間按起始點從小到大排序。貪心合并&#xff1a;初始化一個結果列表&#xff0c;放入第一個區間。然后遍歷剩余區間&#xff0c;將當前區間與結果列表中的最后一個區間比較&#xff1a; 若重疊&#xff08;當前區間起點 ≤ 結果區間終點&#xff0…

DNS 正向查找與反向查找

DNS 區域是 DNS 中基本的組織單元&#xff0c;為域名定義了管理和權威邊界。一個 DNS 區域通常包含一系列 DNS 資源記錄&#xff0c;包括名稱到地址的映射&#xff08;正向查找&#xff09;和地址到名稱的映射&#xff08;反向查找&#xff09;。這些區域對于高效管理和解析網絡…

Oracle ERP FORM開發 — 新增查詢條件

1 根據值來查詢具體流程步驟看第2節&#xff0c;這里提供核心的增加查詢條件的觸發器代碼&#xff1a;1.1 可完全匹配的值比如“是”&#xff0c;“否”&#xff0c;“物料”&#xff0c;“”汽車 等等這些可以直接通過對應的值匹配&#xff0c;特點就是詞語&#xff0c;短小。…

Flutter實現列表功能

在Flutter中,可以通過ListView和ListTile等組件來實現類似Android中RecyclerView和Adapter的功能。以下是一個通用的設計架構,用于設計列表數據: 1. 定義數據模型 首先,定義一個數據模型類,用于存儲列表中每一項的數據。例如: class ItemModel {final String title;fi…

2.1、Redis的單線程本質和多線程的操作

Redis的單線程本質 1. 核心單線程部分 #mermaid-svg-iFErSltthPIEsuiP {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-iFErSltthPIEsuiP .error-icon{fill:#552222;}#mermaid-svg-iFErSltthPIEsuiP .error-text{fil…

文件權限值的表示方法

文章目錄字符表示方法8 進制數值表示方法字符表示方法 Linux表示說明Linux表示說明r--只讀-w-僅可寫--x僅可執行rw-可讀可寫-wx可寫可執行r-x可讀可執行rwx可讀可寫可執行---無權限 8 進制數值表示方法 權限符號8進制2進制r4100w2010x1001rw6110rx5101wx3011rwx7111---0000

【38】WinForm入門到精通 ——WinForm平臺為AnyCPU 無法切換為x64,也無法添加 x64及其他平臺

WinForm 是 Windows Form 的簡稱&#xff0c;是基于 .NET Framework 平臺的客戶端&#xff08;PC軟件&#xff09;開發技術&#xff0c;是 C# 語言中的一個重要應用。.NET 提供了大量 Windows 風格的控件和事件&#xff0c;可以直接拿來使用。本專欄內容是按照標題序號逐漸深入…