POSIX(Portable Operation System Interface)聽起來好高端,就是一種操作系統(tǒng)的接口標(biāo)準(zhǔn),至于誰遵循這個標(biāo)準(zhǔn)呢?就是大名鼎鼎的Unix和Linux了,有人問Mac OS是否兼容POSIX呢,答案是Yes蘋果的操作系統(tǒng)也是Unix-based的。
有了這個規(guī)范,你就可以調(diào)用通用的API了,Linux提供的POSIX系統(tǒng)調(diào)用在Unix上也能執(zhí)行,因此學(xué)習(xí)Linux的底層接口最好就是理解POSIX標(biāo)準(zhǔn)。
補(bǔ)充一句,目前很多編程語言(Go、Java、Python、Ruby等)都是天生跨平臺的,因此我們很少注意系統(tǒng)調(diào)用的兼容性。實際上POSIX提供了這些語言上跨平臺的語義,而且這是源碼級別的保證。
POSIX是一些IEEE標(biāo)準(zhǔn),包括1003.0、1003.1、1003.1b和2003等,實際上連Linux也沒有完全兼容這些定義,不過只用Linux來學(xué)習(xí)POSIX足夠了。
鑒于絕大多數(shù)程序員都沒看過IEEE文檔,我們就翻一下IEEE 1003.1-2001吧。
http://wiki.jikexueyuan.com/project/linux-process/images/ieee_1003.1.png" alt="" />
篇幅跟論文差不多,大意就是修正Base標(biāo)準(zhǔn)存在的問題,這個文檔沒有增加新的接口,但是加了符號、非函數(shù)的定義和保留更多命名空間。這是非常嚴(yán)謹(jǐn)?shù)奈臋n,感興趣的同學(xué)可以讀下,對普通的程序員我們還是建議了解以下的內(nèi)容。
我們運(yùn)行Hello World程序時,操作系統(tǒng)通過POSIX定義的fork
和exec
接口創(chuàng)建起一個POSIX進(jìn)程,這個進(jìn)程就可以使用通用的IPC、信號等機(jī)制。
POSIX也定義了線程的標(biāo)準(zhǔn),包括創(chuàng)建和控制線程的API,在Pthreads庫中實現(xiàn),有關(guān)線程的知識有機(jī)會再深入學(xué)習(xí)。