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