什么是posix


  在網上查到對於posix的介紹,來自《Linux內核設計與實現(第2版)》的第5章,就這部分來看,這本書估計不錯。

一般情況下,應用程序通過應用編程接口(API)而不是直接通過系統調用來編程。這點很重要,因為應用程序使用的這種編程接口實際上並不需要和內核 提供的系統調用對應。一個API定義了一組應用程序使用的編程接口。它們可以實現成一個系統調用,也可以通過調用多個系統調用來實現,而完全不使用任何系 統調用也不存在問題。實際上,API可以在各種不同的操作系統上實現,給應用程序提供完全相同的接口,而它們本身在這些系統上的實現卻可能迥異。

在Unix世界中,最流行的應用編程接口是基於POSIX標准的。從純技術的角度看,POSIX是由IEEE的一組標准組成,其目標是提供一套大體上基於Unix的可移植操作系統標准。Linux是與POSIX兼容的。

POSIX是說明API和系統調用之間關系的一個極好例子。在大多數Unix系統上,根據POSIX而定義的API函數和系統調用之間有着直接關 系。實際上,POSIX標准就是仿照早期Unix系統的界面建立的。另一方面,許多操作系統,像Windows NT,盡管和Unix沒有什么關系,也提供了與POSIX兼容的庫。

Linux的系統調用像大多數Unix系統一樣,作為C庫的一部分提供如圖5-1所示。如圖5-1所示C庫實現了Unix系統的主要API,包括標 准C庫函數和系統調用。所有的C程序都可以使用C庫,而由於C語言本身的特點,其他語言也可以很方便地把它們封裝起來使用。此外,C庫提供了POSIX的 絕大部分API。

 
圖5-1   調用printf()函數時,應用程序、C庫和內核之間的關系

從程序員的角度看,系統調用無關緊要;他們只需要跟API打交道就可以了。相反,內核只跟系統調用打交道;庫函數及應用程序是怎么使用系統調用不是內核所關心的。

--------------------------這是分割線---------------------------------

  簡單總結:

  完成同一功能,不同內核提供的系統調用(也就是一個函數)是不同的,例如創建進程,linux下是fork函數,windows下是creatprocess函數。好,我現在在linux下寫一個程序,用到fork函數,那么這個程序該怎么往windows上移植?我需要把源代碼里的fork通通改成creatprocess,然后重新編譯...

  posix標准的出現就是為了解決這個問題。linux和windows都要實現基本的posix標准,linux把fork函數封裝成posix_fork(隨便說的),windows把creatprocess函數也封裝成posix_fork,都聲明在unistd.h里。這樣,程序員編寫普通應用時候,只用包含unistd.h,調用posix_fork函數,程序就在源代碼級別可移植了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM