POSIX解決什麼問題

下面這個真的把posix講清楚了!摘自:https://www.jianshu.com/p/7a17b34e05ee

 

1. POSIX解決什麼問題

一般情況下,應用程序通過應用編程接口(API)而不是直接通過系統調用來編程(即並不需要和內核提供的系統調用來編程)。一個API定義了一組應用程序使用的編程接口。它們可以實現成調用一個系統,也可以通過調用多個系統來實現,而完全不使用任何系統調用也不存在問題。實際上,API可以在各種不同的操作系統上實現給應用程序提供完全相同的接口,而它們本身在這些系統上的實現卻可能迥異。如下圖,當應用程序調用printf()函數時,printf函數會調用C庫中的printf,繼而調用C庫中的write,C庫最後調用內核的write()。

應用程序、C庫和內核之間的關係

從程序員的角度看,系統調用無關緊要,只需要跟API打交道。相反,內核只跟系統調用打交道,庫函數及應用程序是怎麼系統調用不是內核所關心的。

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

主流的操作系統有兩種,一種是Windows系統,另一種是Linux系統。由於操作系統的不同,API又分爲Windows API和Linux API。在Windows平臺開發出來的軟件在Linux上無法運行,在Linux上開發的軟件在Windows上又無法運行,這就導致了軟件移植困難,POSIX(Protabl Operation System 可移植操作系統規範)應運而生。

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

2. posix 是什麼?

可移植操作系統接口Portable Operating System Interface of UNIX,POSIX標準定義了操作系統應該爲應用程序提供的接口標準,是IEEE爲要在各種UNIX操作系統上運行的軟件而定義的一系列API標準的總稱。



作者:robot_test_boy
鏈接:https://www.jianshu.com/p/7a17b34e05ee
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章