Linux編程 文件操作 creat open

文件描述符

文件描述符在形式上是一個非負整數。實際上,它是一個索引值,指向內核為每一個進程所維護的該進程打開文件的記錄表。當程序打開一個現有文件或者創建一個新文件時,內核向進程返回一個文件描述符。

啟動一個進程之后,內核 PCB 的文件描述符表中就已經分配了三個文件描述符。默認支持打開的最大文件數為 1024。

三個特殊的文件描述符

  • 標準輸入文件
  • 標準輸出文件
  • 標準錯誤輸出文件
#define STDIN_FILENO 0 // 標準輸入文件
#define STDOUT_FILENO 1 // 標準輸出文件
#define STDERR_FILENO 2 // 標準錯誤輸出文件

image-20231122154109440

系統調用

由操作系統實現提供的所有系統調用所構成的集合即程序接口或應用編程接口(Application Programming Interface,API)。是應用程序同系統之間的接口。

img

Linux系統調用是應用程序與Linux內核進行交互的接口,可以請求內核對其提供服務。這些服務包括文件操作、進程管理、內存管理、網絡通信等。系統調用可以實現訪問系統資源的安全方式,因為它確保了用戶空間和內核空間之間的隔離。在Linux系統中,系統調用以C庫函數的形式提供給應用程序,而C庫函數會調用相應的匯編指令來觸發軟中斷,將控制權轉交給內核進行相應的處理。Linux系統調用的調用號通過eax寄存器傳遞給內核,不同的系統調用有不同的調用號。

creat函數

函數原型:

int creat(const char *pathname, mode_t mode);   

參數說明:

  • pathname:文件路徑名,可以是相對路徑或絕對路徑。
  • mode:文件創建模式,用于指定文件的權限、所有權等屬性。mode_t是一個無符號整型數據類型。

image-20231122155739256

函數返回值:

  • 如果文件創建成功,返回文件的描述符
  • 如果文件創建失敗,返回-1

creat函數的作用如下:

  1. 檢查文件路徑名是否合法;
  2. 創建一個新的文件;
  3. 設置文件的權限、所有權等屬性;
  4. 返回文件的描述符,以便后續進行讀寫操作。

在使用時,需要包含以下頭文件:

#include <sys/types.h> // 包含基本系統數據類型
#include <sys/stat.h> // 包含文件數據結構信息
#include <fcntl.h> // 定義了很多宏和open等函數原型

例如,創建一個其他用戶可以讀、寫的文件"lab.kk"。

#include <sys/types.h> // 包含基本系統數據類型
#include <sys/stat.h> // 包含文件數據結構信息
#include <fcntl.h> // 定義了很多宏和open等函數原型int main()
{creat("lab.kk", S_IROTH | S_IWOTH);return 0;
}

也可以用八進制表示:

#include <sys/types.h> // 包含基本系統數據類型
#include <sys/stat.h> // 包含文件數據結構信息
#include <fcntl.h> // 定義了很多宏和open等函數原型int main()
{creat("lab.kk", 0006 );return 0;
}

open函數

open函數用于打開一個文件,并返回一個文件描述符,以便后續對文件進行讀寫操作。它有兩種形式的原型:

int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);

參數說明:

  • pathname:文件路徑名,可以是相對路徑或絕對路徑。
  • flags:打開文件時的標志,用于指定打開文件的方式(如只讀、只寫、追加等)。

image-20231122160924597

  • mode:如果需要創建新文件,需要指定文件的創建模式(包括文件權限、所有權等屬性),此參數僅在第二種形式中使用。

函數返回值:

  • 成功打開文件,返回文件描述符;
  • 打開文件失敗,返回-1。

open函數的作用是用于打開文件或者創建文件。

例如,

int fd1 = open("lab.kk", O_RDONLY); // 以只讀方式打開文件lab.kk
int fd2 = open("lab.kk", O_WRONLY | O_CREAT, 0644); // 以只寫方式打開文件,如果文件不存在則創建,設置權限為0644 

一、Linux文件編程—open 和創建文件creat函數的使用介紹、文件描述符的概述、linux文件編程的一般步驟、linux文件管理的描述
h

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

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

相關文章

SquareCTF-2023 Web Writeups

官方wp&#xff1a;CTFtime.org / Square CTF 2023 tasks and writeups sandbox Description&#xff1a; I “made” “a” “python” “sandbox” “”“” nc 184.72.87.9 8008 先nc連上看看&#xff0c;只允許一個單詞&#xff0c;空格之后的直接無效了。 flag就在當…

(C)一些題2

1.在 C 語言中&#xff08;以 16位 PC 機為例&#xff09;,5種基本數據類型的存儲空間長度的順序為&#xff08;&#xff09; A . char < int < long int <float < double B . char int < long int<float <double C . char < int < long int …

inux應用開發基礎知識——串口應用編程(十一)

前言&#xff1a; 在Linux系統中&#xff0c;串口設備以文件的形式存在&#xff0c;通常位于/dev目錄下&#xff0c;如ttyS0、ttyUSB0等。這些設備文件可以用于讀取和寫入數據。要使用串口設備&#xff0c;需要打開相應的設備文件。在打開串口時&#xff0c;可以使用O_RDWR選項…

哈夫曼樹你需要了解一下

哈夫曼樹介紹哈夫曼數特點哈夫曼應用場景哈夫曼構建過程哈夫曼樹示例拓展 哈夫曼樹介紹 哈夫曼樹&#xff08;Huffman Tree&#xff09;是一種特殊的二叉樹&#xff0c;也被稱為最優二叉樹。在計算機科學中&#xff0c;它是由權值作為葉子節點構造出來的一種二叉樹。哈夫曼樹的…

05 取樣器(BeanShell和JSR223 Sampler)

一、取樣器作用 1、取樣器可以理解為Jmeter的橋梁&#xff0c;或者是Jmeter的加工廠&#xff1b; 2、Jmeter使用過程中&#xff0c;經常有些數據不能直接使用&#xff0c;需要加工后才能使用&#xff1b;這樣就用到了取樣器&#xff1b;但是這里存在問題&#xff0c;Jmeter中的…

Differences between package.json and pnpm-lock.yaml

1.pnpm-lock.yaml 是pnpm包管理工具生成的確保依賴包的版本在所有的環境里面都相同對依賴包的任何操作都會更新在該文件中&#xff0c;因此&#xff0c;需要確保提交到代碼倉庫中。包含了解析的依賴項和版本號。如下圖&#xff1a; 2.package.json 列出應用所需的依賴和元數…

批量修改文件名

原理&#xff1a; 利用 bat 的 REN 舊名字 新名字 命令 第一步&#xff1a; 【CtrlA】選中所有文件&#xff0c;按下【Shift】鍵右鍵任一文件夾彈出窗口選擇【復制為路徑】 第二步&#xff1a; 使用Excel技巧構造出 REN 舊名字 新名字 第三步&#xff1a; 用拼接好的命令…

【黑馬甄選離線數倉day01_項目介紹與環境準備】

1. 行業背景 1.1 電商發展歷史 電商1.0: 初創階段20世紀90年代&#xff0c;電商行業剛剛興起&#xff0c;主要以B2C模式為主&#xff0c;如亞馬遜、eBay等 ? 電商2.0: 發展階段21世紀初&#xff0c;電商行業進入了快速發展階段&#xff0c;出現了淘寶、京東等大型電商平臺&a…

(swjtu西南交大)數據庫實驗(數據庫需求分析):音樂軟件數據管理系統

實驗內容&#xff1a; 數據庫需求分析&#xff1a;各用戶組需求描述&#xff0c;繪出數據流圖&#xff08;詳細案例參見教材p333~p337&#xff0c;陶宏才&#xff0c;數據庫原理及設計&#xff0c;第三版&#xff09;&#xff1b; 一、選題背景 近年來&#xff0c;“聽歌”逐…

Ajax入門-Express框架介紹和基本使用

電腦實在忒垃圾了&#xff0c;出現問題耗費了至少一刻鐘time&#xff0c;然后才搞出來正常的效果&#xff1b; 效果鎮樓 另外重新安裝了VScode軟件&#xff0c;原來的老是報錯&#xff0c;bug。。&#xff1b; 2個必要的安裝命令&#xff1b; 然后建立必要的文件夾和文件&…

雷軍:我的程序人生路

今天有朋友發給我一篇我在20年前在BBS上寫的帖子。那還是1996年&#xff0c;我們通過電話線撥號連接到西點BBS上飆帖子玩的年代。那是一個互聯網混沌初開的年代&#xff0c;那是一個BBS和Email幾乎主宰了全部互聯網的年代&#xff0c;那是一個青春的理想和熱血沸騰的年代。 我…

新能源車將突破2000萬輛,漢威科技為電池安全保駕護航

近年來&#xff0c;我國新能源汽車銷量持續突破新高。據中汽協數據&#xff0c;1~10月&#xff0c;國內新能源汽車銷量達728萬輛&#xff0c;同比增長37.8%&#xff0c;市場占有率達到30.4%。隨著第四季度車市傳統旺季的到來&#xff0c;新能源消費需求將進一步釋放&#xff0c…

Python小灰灰

系列文章 序號文章目錄直達鏈接表白系列1浪漫520表白代碼https://want595.blog.csdn.net/article/details/1306668812滿屏表白代碼https://want595.blog.csdn.net/article/details/1297945183跳動的愛心https://want595.blog.csdn.net/article/details/1295031234漂浮愛心htt…

【軟件工程師從0到1】- 封裝 (知識匯總)

前言 介紹&#xff1a;大家好啊&#xff0c;我是hitzaki辰。 社區&#xff1a;&#xff08;完全免費、歡迎加入&#xff09;日常打卡、學習交流、資源共享的知識星球。 自媒體&#xff1a;我會在b站/抖音更新視頻講解 或 一些純技術外的分享&#xff0c;賬號同名&#xff1a;hi…

藍橋等考C++組別八級005

第一部分:選擇題 1、C++ L8 (15分) 以下關于break的說法正確的是( )。 A. 只有循環結構里面才可以使用break語句。 B. 程序運行到break語句的時候會暫停,直到用戶按下任意鍵才會繼續執行。 C. 嵌套循環的內層循環里面遇到break的時候,整個嵌套循環結構會立即停止,…

Jenkins擴展篇-流水線腳本語法

JenkinsFile可以通過兩種語法來聲明流水線結構&#xff0c;一種是聲明式語法&#xff0c;另一種是腳本式語法。 腳本式語法以Groovy語言為基礎&#xff0c;語法結構同Groovy相同。 由于Groovy學習不適合所有初學者&#xff0c;所以Jenkins團隊為編寫Jenkins流水線提供一種更簡…

kubernetes學習-概念5

服務&#xff08;Service&#xff09; Kubernetes 中 Service 是 將運行在一個或一組 Pod 上的網絡應用程序公開為網絡服務的方法。 Kubernetes 中 Service 的一個關鍵目標是讓你無需修改現有應用以使用某種不熟悉的服務發現機制。 你可以在 Pod 集合中運行代碼&#xff0c;無…

nginx使用詳解:轉發規則、負載均衡、server_name

文章目錄 一、nginx常用的轉發規則location 指令說明location轉發使用 二、upstream負載均衡使用三、server_name使用四、其他常用配置限制請求類型處理靜態資源目錄遍歷問題限制客戶端使用的ip或者域名 五、需要注意的地方location /api1 探討location ~ /api1 探討&#xff0…

DataFunSummit:2023年OLAP引擎架構峰會-核心PPT資料下載

一、峰會簡介 OLAP技術是當前大數據領域的熱門方向&#xff0c;該領域在各個行業都有廣泛的使用場景&#xff0c;對OLAP引擎的功能有豐富多樣的需求。同時&#xff0c;在性能、穩定性和成本方面&#xff0c;也有諸多挑戰。目前&#xff0c;OLAP技術沒有形成統一的事實標準&…

redis性能管理

redis的數據庫是存放在內存當中&#xff0c;所以對內存的監控至關重要 redis內存監控和解析 1.如何查看redis內存使用情況 [rootlocalhost utils]# redis-cli -h 20.0.0.170 -p 6379 20.0.0.170:6379> info memory used_memory:853336 //redis中數據占用的內存 use…