Linux | 系統調用

文章目錄

  • Linux | 系統調用
      • `open` 系統調用
        • 功能
        • 頭文件和函數原型
        • 參數解釋
        • 返回值
        • 示例代碼
      • 其他常用系統調用
        • `read` 系統調用
        • `write` 系統調用
        • `close` 系統調用
        • `lseek` 系統調用
        • `stat` 系統調用

Linux | 系統調用

前言:在Linux系統中,系統調用是用戶空間程序與內核進行交互的橋梁,用戶程序通過系統調用請求內核提供的服務。下面將詳細介紹open系統調用以及其他常用的系統調用。

以下是 Linux 中幾類核心系統調用:

類別系統調用示例功能描述
文件操作open, read, write, close打開/讀/寫/關閉文件
進程控制fork, execve, waitpid, exit創建進程、加載程序、等待子進程退出
內存管理brk, mmap, munmap調整堆內存、內存映射
網絡通信socket, bind, connect, send創建套接字、綁定端口、連接遠程主機、發送數據
設備控制ioctl控制硬件設備(如調整終端參數)
權限管理chmod, setuid修改文件權限、切換用戶身份

下面主要講解open系統調用和一些常用的系統調用

open 系統調用

功能

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:用于指定文件的打開方式和行為,常用的標志有:
    • O_RDONLY:以只讀方式打開文件。
    • O_WRONLY:以只寫方式打開文件。
    • O_RDWR:以讀寫方式打開文件。
    • O_CREAT:如果文件不存在,則創建該文件。使用此標志時,需要第三個參數 mode 來指定新文件的權限。
    • O_TRUNC:如果文件已經存在且以寫方式打開,則將文件長度截斷為0。
    • O_APPEND:以追加方式打開文件,每次寫操作都將數據追加到文件末尾。
  • mode:當使用 O_CREAT 標志創建新文件時,mode 參數指定新文件的權限。權限值通常使用八進制表示,例如 0644 表示文件所有者有讀寫權限,其他用戶有讀權限。
返回值
  • 成功時返回一個新的文件描述符(通常是當前可用的最小非負整數)。
  • 失敗時返回 -1,并設置 errno 變量來指示具體的錯誤原因。
示例代碼
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>int main() {int fd = open("test.txt", O_WRONLY | O_CREAT | O_TRUNC, 0644);if (fd == -1) {perror("open");return 1;}printf("File opened successfully. File descriptor: %d\n", fd);close(fd);return 0;
}

其他常用系統調用

read 系統調用
  • 功能:從文件描述符指定的文件中讀取數據到緩沖區。
  • 頭文件和函數原型
#include <unistd.h>ssize_t read(int fd, void *buf, size_t count);
  • 參數解釋
    • fd:要讀取數據的文件描述符。
    • buf:用于存儲讀取數據的緩沖區。
    • count:要讀取的最大字節數。
  • 返回值
    • 成功時返回實際讀取的字節數,可能小于 count
    • 到達文件末尾時返回 0。
    • 失敗時返回 -1,并設置 errno
write 系統調用
  • 功能:將緩沖區中的數據寫入到文件描述符指定的文件中。
  • 頭文件和函數原型
#include <unistd.h>ssize_t write(int fd, const void *buf, size_t count);
  • 參數解釋
    • fd:要寫入數據的文件描述符。
    • buf:包含要寫入數據的緩沖區。
    • count:要寫入的字節數。
  • 返回值
    • 成功時返回實際寫入的字節數,可能小于 count
    • 失敗時返回 -1,并設置 errno
close 系統調用
  • 功能:關閉指定的文件描述符,釋放相關資源。
  • 頭文件和函數原型
#include <unistd.h>int close(int fd);
  • 參數解釋
    • fd:要關閉的文件描述符。
  • 返回值
    • 成功時返回 0。
    • 失敗時返回 -1,并設置 errno
lseek 系統調用
  • 功能:用于改變文件的當前讀寫位置。
  • 頭文件和函數原型
#include <sys/types.h>
#include <unistd.h>off_t lseek(int fd, off_t offset, int whence);
  • 參數解釋
    • fd:要操作的文件描述符。
    • offset:偏移量,可正可負。
    • whence:指定偏移量的起始位置,常用的值有:
      • SEEK_SET:從文件開頭開始計算偏移量。
      • SEEK_CUR:從文件當前位置開始計算偏移量。
      • SEEK_END:從文件末尾開始計算偏移量。
  • 返回值
    • 成功時返回新的文件偏移量。
    • 失敗時返回 -1,并設置 errno
stat 系統調用
  • 功能:獲取文件的狀態信息,如文件大小、權限、創建時間等。
  • 頭文件和函數原型
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>int stat(const char *pathname, struct stat *statbuf);
  • 參數解釋

    • pathname:要獲取狀態信息的文件路徑名。
    • statbuf:指向 struct stat 結構體的指針,用于存儲文件的狀態信息。
  • 返回值

    • 成功時返回 0。
    • 失敗時返回 -1,并設置 errno

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

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

相關文章

郭羽沖IOI2024參賽總結

非常榮幸能代表中國參加第 36 36 36 屆國際信息學奧林匹克競賽&#xff08; I O I 2024 IOI2024 IOI2024&#xff09;。感謝 C C F CCF CCF 為我們提供競賽的平臺&#xff0c;感謝隨行的老師們一路上為我們提供的幫助與支持。 在每場比賽的前一個晚上&#xff0c;領隊、副領…

基于Java的自助多張圖片合成拼接實戰

目錄 前言 一、圖片合成需求描述 二、圖片合成設計與實現 1、編程語言 2、基礎數據準備 3、圖片合成流程 4、圖片合成實現 三、總結 前言 在當今數字化時代&#xff0c;圖像處理技術在各個領域都發揮著至關重要的作用。從社交媒體到電子商務&#xff0c;從在線教育到虛擬…

計算機網絡結課設計:通過思科Cisco進行中小型校園網搭建

上學期計算機網絡課程的結課設計是使用思科模擬器搭建一個中小型校園網&#xff0c;當時花了幾天時間查閱相關博客總算是做出來了&#xff0c;在驗收后一直沒管&#xff0c;在寒假想起來了簡單分享一下&#xff0c;希望可以給有需求的小伙伴一些幫助 目錄 一、設計要求 二、…

在npm上傳屬于自己的包

最近在整理代碼&#xff0c;上傳到npm方便使用&#xff0c;所以學習了如何在npm發布一個包&#xff0c;整理寫成一篇文章和大家一起交流。 1、注冊npm賬號 npm | Home 2、確保是登錄狀態 &#xff08;在包目錄下&#xff0c;終端執行 npm login) 按enter鍵自動打開頁面&…

物聯網(IoT)詳解

物聯網&#xff08;IoT&#xff09;詳解 1. IoT定義簡介2. IoT工作原理3. IoT關鍵技術4. 物聯網與互聯網區別5. IoT使用場景6. 開源物聯網平臺7. 參考資料 1. IoT定義簡介 首先第一個問題&#xff0c;什么是物聯網&#xff08;IoT&#xff09;? 物聯網&#xff08;英文&#…

【人工智能】解碼語言之謎:使用Python構建神經機器翻譯系統

《Python OpenCV從菜鳥到高手》帶你進入圖像處理與計算機視覺的大門! 解鎖Python編程的無限可能:《奇妙的Python》帶你漫游代碼世界 神經機器翻譯(NMT)是近年來機器翻譯領域的一項重大突破。它利用深度學習模型,特別是循環神經網絡(RNN)和Transformer網絡,以端到端的…

idea項目列表不出現,展示loading

2025年02月08 11:23:36 星期六 發生在webstorm中&#xff0c;跟其他idea類似 原因是將 ignore 插件升級到 4.5.5 版本 https://github.com/JetBrains/idea-gitignore/pull/933 解決方案&#xff1a;將ignore版本將為 4.5.4 我是將 4.5.5 降低為 4.5.4 正常顯示文件夾了。

DeepSeek本地部署詳細指南

DeepSeek本地部署詳細指南 隨著人工智能技術的飛速發展&#xff0c;本地部署大模型的需求也日益增加。DeepSeek作為一款開源且性能強大的大語言模型&#xff0c;提供了靈活的本地部署方案&#xff0c;讓用戶能夠在本地環境中高效運行模型&#xff0c;同時保護數據隱私。以下是…

算法隨筆_46: 最長公共前綴

上一篇:算法隨筆_45: 車隊-CSDN博客 題目描述如下: 編寫一個函數來查找字符串數組中的最長公共前綴。 如果不存在公共前綴&#xff0c;返回空字符串 ""。 示例 1&#xff1a; 輸入&#xff1a;strs ["flower","flow","flight"] 輸…

learn torch 01

pytorch學習 在安裝完conda時&#xff0c;需要在windows上修改pip配置路徑具體操作如下 文件管理器文件路徑地址欄敲:%APPDATA%回車&#xff0c;快速進入C:\Users\電腦用戶\AppData\Roaming文件夾中 新建pip文件夾并在文件夾中新建pip.ini配置文件 需要在pip.ini配置文件內容&a…

【Vue】在Vue3中使用Echarts的示例 兩種方法

文章目錄 方法一template渲染部分js部分方法一實現效果 方法二template部分js or ts部分方法二實現效果 貼個地址~ Apache ECharts官網地址 Apache ECharts示例地址 官網有的時候示例顯示不出來&#xff0c;屬于正常現象&#xff0c;多進幾次就行 開始使用前&#xff0c;記得先…

分布式鎖的實現 和 底層原理 以及都有什么問題?

目錄 分布式鎖的實現方式及底層原理 1. 基于數據庫實現分布式鎖 實現方式 底層原理 存在的問題 2. 基于 Redis 實現分布式鎖 實現方式 底層原理 存在的問題 3. 基于 ZooKeeper 實現分布式鎖 實現方式 底層原理 存在的問題 總結 分布式鎖的實現方式及底層原理 1.…

13.10 統一配置管理中心:TranslationChain 架構的簡潔配置管理方案

統一配置管理中心:TranslationChain 架構的簡潔配置管理方案 1. 集中式配置文件設計 config/settings.yaml: # 多環境配置開關 env: production # development|test|production# 模型管理中心 models:openai:class: langchain_openai.ChatOpenAIparams

Ollama 簡單 好用 好玩

簡介 Ollama https://github.com/ollama/ollama/ 是一個基于 Go 語言 的 本地大語言模型運行框架&#xff0c;專注于本地化運行大型語言模型&#xff08;LLM&#xff09;的開源工具。 類 Docker 產品&#xff08;支持 list,pull,push,run 等命令&#xff09;&#xff0c;更好玩…

儲能系統-系統架構

已更新系列文章包括104、61850、modbus 、單片機等&#xff0c;歡迎關注 IEC61850實現方案和測試-1-CSDN博客 快速了解104協議-CSDN博客 104調試工具2_104協議調試工具-CSDN博客 1 電池儲能系統&#xff08;BESS&#xff09; 架構 電池儲能系統主要包括、電池、pcs、本地控制…

Day88:加載游戲圖片

在游戲開發中,加載和顯示圖片是非常常見的需求,尤其是在 2D 游戲 中,角色、背景、道具、敵人等都需要用圖片來表示。今天,我們將學習如何在 Python 游戲開發中使用 Pygame 加載并顯示圖片。 1. 加載游戲圖片的基本步驟 在 Pygame 中加載圖片通常需要以下幾個步驟: 導入 P…

解決 keep-alive 緩存組件中定時器干擾問題

當使用 keep-alive 緩存組件時&#xff0c;組件中的定時器可能會在組件被緩存后繼續運行&#xff0c;從而干擾其他組件的邏輯。為了避免這種情況&#xff0c;可以通過以下方法解決&#xff1a; 1. 在組件的 deactivated 鉤子中清理定時器 keep-alive 為緩存的組件提供了 acti…

百度高德地圖坐標轉換

百度地圖和高德地圖的側重點不太一樣。同樣一個地名&#xff0c;在百度地圖網站上搜索到的地點可能是商業網點&#xff0c;在高德地圖網站上搜索到的地點可能是自然行政地點。 高德地圖api 在高德地圖中&#xff0c;搜索地名&#xff0c;如“亂石頭川”&#xff0c;該地名會出…

網絡安全溯源 思路 網絡安全原理

網絡安全背景 網絡就是實現不同主機之間的通訊。網絡出現之初利用TCP/IP協議簇的相關協議概念&#xff0c;已經滿足了互連兩臺主機之間可以進行通訊的目的&#xff0c;雖然看似簡簡單單幾句話&#xff0c;就描述了網絡概念與網絡出現的目的&#xff0c;但是為了真正實現兩臺主機…

QTreeView和QTableView單元格添加超鏈接

QTreeView和QTableView單元格添加超鏈接的方法類似,本文僅以QTreeView為例。 在QTableView仿Excel表頭排序和篩選中已經實現了超鏈接的添加,但是需要借助delegate,這里介紹一種更簡單的方式,無需借助delegate。 一.效果 二.實現 QHTreeView.h #ifndef QHTREEVIEW_H #def…