系統呼叫與庫函式是什麼,區別是什麼
今天學習到了檔案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 "系統呼叫與庫函式是什麼,區別是什麼")