系統呼叫:是作業系統為使用者態執行的程序和硬體裝置(如cpu、磁碟、印表機等)進行互動提供的一組介面,即就是設定在應用程式和硬體裝置之間的乙個介面層。可以說是作業系統留給使用者程式的乙個介面。再來說一下,linux核心是單核心,結構緊湊,執行速度快,各個模組之間是直接呼叫的關係。放眼望整個linux系統,從上到下依次是使用者程序->linux核心->硬體。其中系統呼叫介面是位於linux核心中的,如果再稍微細分一下的話,整個linux系統從上到下可以是:使用者程序->系統呼叫介面->linux核心子系統->硬體,也就是說linux核心包括了系統呼叫介面和核心子系統兩部分;或者從下到上可以是:物理硬體->os核心->os服務->應用程式,其中作業系統起到「承上啟下」的關鍵作用,向下管理物理硬體,向上為操作系服務和應用程式提供介面,這裡的介面就是系統呼叫了。
一般地,作業系統為了考慮實現的難度和管理的方便,它只提供一少部分的系統呼叫,這些系統呼叫一般都是由c和彙編混合編寫實現的,其介面用c來定義,而具體的實現則是彙編,這樣的好處就是執行效率高,而且,極大的方便了上層呼叫。
庫函式:顧名思義是把函式放到庫里。是把一些常用到的函式編完放到乙個檔案裡,供別人用。別人用的時候把它所在的檔名用#include<>加到裡面就可以了。一般是放到lib檔案裡的。一般是指編譯器提供的可在c源程式中呼叫的函式。可分為兩類,一類是c語言標準規定的庫函式,一類是編譯器特定的庫函式。(由於版權原因,庫函式的源**一般是不可見的,但在標頭檔案中你可以看到它對外的介面)
libc中就是乙個c標準庫,裡面存放一些基本函式,這些基本函式都是被標準化了的,而且這些函式通常都是用彙編直接實現的。
庫函式一般可以概括的分為兩類,一類是隨著作業系統提供的,另一類是由第三方提供的。隨著系統提供的這些庫函式把系統呼叫進行封裝或者組合,可以實現更多的功能,這樣的庫函式能夠實現一些對核心來說比較複雜的操作。比如,read()函式根據引數,直接就能讀檔案,而背後隱藏的比如檔案在硬碟的哪個磁軌,哪個扇區,載入到記憶體的哪個位置等等這些操作,程式設計師是不必關心的,這些操作裡面自然也包含了系統呼叫。而對於第三方的庫,它其實和系統庫一樣,只是它直接利用系統呼叫的可能性要小一些,而是利用系統提供的api介面來實現功能(api的介面是開放的)。部分libc庫中的函式的功能的實現還是借助了系統掉呼叫,比如printf的實現最終還是呼叫了write這樣的系統呼叫;而另一些則不會使用系統呼叫,比如strlen, strcat, memcpy等。
實時上,系統呼叫所提供給使用者的是直接而純粹的高階服務,如果想要更人性化,具有更符合特定情況的功能,那麼就要我們使用者自己來定義,因此就衍生了庫函式,它把部分系統呼叫包裝起來,一方面把系統呼叫抽象了,一方面方便了使用者級的呼叫。系統呼叫和庫函式在執行的效果上很相似(當然庫函式會更符合需求),但是系統呼叫是執行於核心狀態;而庫函式由使用者呼叫,執行於使用者態。
系統呼叫是為了方便使用作業系統的介面,而庫函式則是為了人們程式設計的方便。
從實施者的角度,系統呼叫和庫函式之間有重大區別,但從使用者角度其區別並不非常重要。 兩者都對應 用程式提供服務,但是,我們應當理解,如果希望的話,我們可以代庫函式,但是通常我們卻不能代換系統服務。
另乙個可說明系統呼叫和庫函式之間的差別的例子是,unix提供決定當前時間和日期的介面。某些作業系統提供乙個系統呼叫以返回時間,而另乙個則返回日期。任何特殊的處理,例如正常時制和日光節約時制之間的轉換,由系統核處理或要求人的幹予。unix則不同,它只提供一條系統呼叫,該系統呼叫返回國際標準時公元一九七年一月一日午夜來所以經過的秒數。對該值的任何解釋,例如將其變換**們可讀的,使用本地時區的時間和日 期,都留給使用者程序執行。在標準c庫中,提供了若干例程以處理大多數情況。這些庫函式 處理各種細節,例如各種日光節約時演算法。
C語言 系統函式和庫函式的區別
系統呼叫 是作業系統為使用者態執行的程序和硬體裝置 如cpu 磁碟 印表機等 進行互動提供的一組介面,即就是設定在應用程式和硬體裝置之間的乙個介面層。可以說是作業系統留給使用者程式的乙個介面。再來說一下,linux核心是單核心,結構緊湊,執行速度快,各個模組之間是直接呼叫的關係。放眼望整個linux...
C語言 系統函式和庫函式的區別
系統呼叫 是作業系統為使用者態執行的程序和硬體裝置 如cpu 磁碟 印表機等 進行互動提供的一組介面,即就是設定在應用程式和硬體裝置之間的乙個介面層。可以說是作業系統留給使用者程式的乙個介面。再來說一下,linux核心是單核心,結構緊湊,執行速度快,各個模組之間是直接呼叫的關係。放眼望整個linux...
系統呼叫和庫函式的區別
所謂系統呼叫就是作業系統提供給應用程式的一系列介面。在linux下包含以下幾種型別 程序控制 如 fork 檔案系統控制 如 write 系統控制 如 reboot 記憶體管理 如 getpagesize 獲取頁面大小 沒見過。網路管理 getdomainname 取網域名稱 socket控制 如 ...