基礎IO 系統呼叫和庫函式

2021-08-23 12:43:53 字數 1498 閱讀 1493

【基礎io 】其他文章:(待更新)

1、認識檔案描述符,理解重定向。

2、系統呼叫和庫函式的區別(靜態庫 & 動態庫)。

庫通俗的說就是把這些常用函式的目標檔案打包在一起,提供相應函式的介面,便於程式設計師使用。庫是別人寫好的現有的,成熟的,可以復用的**,我們只需要知道其介面如何定義,便可以自如使用。

庫的使用大大提高了程式設計師編寫**的效率。從使用方法上分庫大體上可以分為兩類:靜態庫和共享庫。在windows中靜態庫是以 .lib 為字尾的檔案,共享庫是以 .dll 為字尾的檔案。在linux中靜態庫是以 .a 為字尾的檔案,共享庫是以 .so為字尾的檔案。

動態庫的應用有兩個主要原因:

1、共享。多個程式可以使用同乙個動態庫

2、開發模式好。要求設計者對功能劃分得更好

但動態庫裝載的時候慢,特別是執行中裝載有明顯延遲。一旦裝載完畢執行起來根靜態庫比較慢不了。

靜態庫的優點:

**裝載速度快,執行速度略比動態庫快,沒有什麼更多的優勢。

大軟體還是用動態庫吧

系統呼叫(英語:system call),指執行在使用者空間的應用程式向作業系統核心請求某些服務的呼叫過程。 系統呼叫提供了使用者程式與作業系統之間的介面。一般來說,系統呼叫都在核心態執行。由於系統呼叫不考慮平台差異性,由核心直接提供,因而移植性較差(幾乎無移植性)。

庫函式(library function),是由使用者或組織自己開發的,具有一定功能的函式集合,一般具有較好平台移植性,通過庫檔案(靜態庫或動態庫)向程式設計師提供功能性呼叫。程式設計師無需關心平台差異,由庫來遮蔽平台差異性。

函式庫呼叫

系統呼叫

在所有的ansi c編譯器版本中,c庫函式是相同的

各個作業系統的系統呼叫是不同的

它呼叫函式庫中的一段程式(或函式)

它呼叫系統核心的服務

與使用者程式相聯絡

是作業系統的乙個入口點

在使用者位址空間執行

在核心位址空間執行

它的執行時間屬於「使用者時間」

它的執行時間屬於「系統」時間

屬於過程呼叫,呼叫開銷較小

需要在使用者空間和核心上下文環境間切換,開銷較大

在c函式庫libc中有大約300個函式

在unix中大約有90個系統呼叫

典型的c函式庫呼叫:system fprintf malloc

典型的系統呼叫:chdir fork write brk; 詳解

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

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

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

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

系統呼叫和庫函式

unix 環境高階程式設計 一書中如此說 所有作業系統都提供多種服務的入口點,由此程式向系統核請求服務。各種版本的unix都 提供經良好定義的有限數目的入口點,經過這些入口點進入系統核,這些入口點被稱之為 系統呼叫 system call 系統呼叫是我們不能更改的一種unix特徵。unix版本7提供...

系統呼叫和庫函式

在計算機中,系統呼叫 英語 system call 又稱為系統呼叫,指執行在使用者空間的程式向作業系統核心請求需要更高許可權執行的服務。系統呼叫提供了使用者程式與作業系統之間的介面。大多數系統互動式操作需求在核心態執行。如裝置io操作或者程序間通訊。庫函式是在系統呼叫上的一層包裝,執行在使用者態 u...

系統呼叫和庫函式

系統呼叫概述 系統呼叫,我們可以理解是作業系統為使用者提供的一系列操作的介面 api 這些介面提供了對系統硬體裝置功能的操作。這麼說可能會比較抽象,舉個例子,我們最熟悉的 hello world 程式會在螢幕上列印出資訊。程式中呼叫了 printf 函式,而庫函式 printf 本質上是呼叫了系統呼...