系統呼叫與庫函式是什麼,區別是什麼

不懂小白在线记录發表於2024-05-07

系統呼叫與庫函式是什麼,區別是什麼

今天學習到了檔案IO方面,知道了在Linux中使用命令mkdir建立的並不是資料夾而是目錄,有很多人喜歡將此認為是資料夾,嚴格意義上倆者是有很大的不同,今天透過查詢資料得知倆者的區別,希望一下對於疑惑的你有所幫助。

目錄
  • 系統呼叫與庫函式是什麼,區別是什麼
    • 系統呼叫
    • 庫函式
    • 區別
    • 參考

系統呼叫

系統呼叫是通向作業系統本身的介面,是面向底層硬體的。透過系統呼叫,可以使得使用者態執行的程序與硬體裝置(如CPU、磁碟、印表機等)進行互動,是作業系統留給應用程式的一個介面。下面適用於訪問裝置驅動程式的系統呼叫:

open: 開啟檔案或裝置

read: 從開啟的檔案或裝置中讀取資料

write: 向開啟的檔案或裝置中寫入資料

close: 關閉檔案或裝置

ioctl: 把控制資訊傳遞給裝置驅動檔案

使用者程序需要發生系統呼叫時,核心將呼叫核心相關函式來實現(如sys_read(),sys_write(),sys_fork())。使用者程式不能直接呼叫這些函式,這些函式執行在核心態,CPU 透過軟中斷切換到核心態開始執行核心系統呼叫函式。

步驟:使用者態–>系統呼叫–>核心態–>返回使用者態

複製的老師的圖,讀寫操作

庫函式

庫函式(Library function)是把函式放到庫裡,供別人使用的一種方式。.方法是把一些常用到的函式編完放到一個檔案裡,供不同的人進行呼叫。一般放在.lib檔案中。庫函式呼叫則是面向應用開發的,庫函式可分為兩類,一類是C語言標準規定的庫函式,一類是編譯器特定的庫函式。(由於版權原因,庫函式的原始碼一般是不可見的,但在標頭檔案中你可以看到它對外的介面)。

系統呼叫是為了方便使用作業系統的介面,而庫函式則是為了人們程式設計的方便。

庫函式呼叫與系統無關,不同的系統,呼叫庫函式,庫函式會呼叫不同的底層函式實現,因此可移植性好。由於庫函式是基於c庫的,因此不能用於核心對於底層驅動裝置的操作。

區別

(1)庫函式是語言或應用程式的一部分,而系統呼叫是核心提供給應用程式的介面,屬於系統的一部分。

(2)庫函式在使用者地址空間執行,系統呼叫是在核心地址空間執行,庫函式執行時間屬於使用者時間,系統呼叫屬於系統時間,庫函式開銷較小,系統呼叫開銷較大。

(3)庫函式是有緩衝的,系統呼叫是無緩衝的。

(4)系統呼叫依賴於平臺,庫函式並不依賴。

參考

系統呼叫與庫函式是什麼,區別是什麼
(https://blog.csdn.net/lht1314tttt/article/details/79150776 "系統呼叫與庫函式是什麼,區別是什麼")

相關文章