系統調用可以解釋為操作系統為用戶提供的一些接口,這些接口提供了對系統硬件功能的操作。這樣說大家可能還有點抽象,我再舉一個更具體的例子:比如我要寫一個程序,這個程序的功能就是在屏幕上顯示一個字符串“hello,world!”。那么實現這么一個在屏幕上顯示一個字符串的操作就是系統調用write()的功能。
那么系統調用的意義在哪里呢? 你想想看,你寫一個程序還需要自己去實現在屏幕上打印字符串的代碼,這也太累人了吧,,因此系統調用把我們從底層的硬件編程中解放了出來。再者,系統調用是內核代碼,內核代碼能訪問系統上的所有地址空間,而我們執行的代碼是用戶空間的代碼,用戶空間的代碼在對系統進行操作時是有限制的,(作為一個菜鳥程序員,系統如果不對你寫的代碼進行限制,,萬一把系統搞蹦了呢。。)。因此系統調用的另一個功能就是維護了系統的安全性,,你要用就直接調用我這個接口就行了,,不用你自己寫。系統調用還有一個功能就是為了方便程序的移植性。。 總之,你就把系統調用當做一個接口,什么時候你需要使用它了,調用一下它就行了,既方便又安全。。 你可能會有疑問,我們平時在寫C語言時打印一個字符串不是用PRintf()函數嗎?這個printf()跟前面提到的那個系統調用write()有什么區別呢?問對了。 其實你可以把庫函數當做是對系統調用的又一次封裝。。什么意思呢?系統調用作為內核提供給我們的接口,它的執行效率是比較高效精簡的。但是有時候我們需要對獲取的信息進行更復雜的處理,這個時候如果我們把這些處理過程包裝成一個函數再提供給程序員,不是更方便編程了嗎?因此一個庫函數有可能含有一個系統調用,有可能有好幾個系統調用,當然也有可能沒有系統調用,比如有些操作就不需要涉及內核的功能。 總之,庫函數是面向程序員的應用編程接口??匆幌孪旅孢@張圖也許更明白了它們之間的關系:新聞熱點
疑難解答