POSIX 是什麼?有哪些內容?以下這篇文章帶大家了解一下Node.js api的 POSIX 標準、Node.js api的特點,希望對大家有幫助!
【推薦學習:《nodejs 教學》】
如果你用過Node.js 的api,會不會覺得奇怪,為什麼api 的名字是這樣的:
例如建立目錄:
const fs = require('fs'); fs.mkdir('/a/b/c', { recursive: true }, (err) => { if (err) throw err; });
建立進程:
const childProcess = require('child_process'); childProcess.fork('a/b/c.js'); childProcess.execFile('a/b/dddd'); childProcess.exec('"/path/to/test file/test.sh" arg1 arg2'); childProcess.spawn('ls', ['-lh', '/usr']);
mkdir、fork、exec、spawn 等,這些名字是怎麼起的?
如果你用過 linux 指令或 c 的函式庫,你會發現這些 api 在指令和 c 函式庫中也都是這個名字。
為什麼會這樣呢?這些 api 是什麼標準麼?
沒錯,這就是POSIX 標準
POSIX 是portable operating system interface (可移植的作業系統介面)的縮寫,x 是unix 的意思,也就是從unix 繼承而來。
因為不同作業系統如果提供的函數和系統呼叫不一樣,那麼基於作業系統的上層應用程式的原始碼就不一樣,這就導致了一個平台寫的程式碼沒法在另一個平台上編譯。
怎麼辦呢?
如果每個作業系統提供的 api 一樣呢?不管作業系統底層怎麼實現這些能力的,只要暴露出同樣的 api 給應用程式即可,這樣原始碼是跨平台的,在不同的作業系統上編譯之後就能跑起來。
這個統一作業系統暴露的 api 的標準就是 POSIX。
可以把這個 POSIX 標準理解為 ts 裡面定義的一個 interface,只要實現了這個 interface 的 api 就是相容 POSIX 標準的。
POSIX 最早是unix 擴展而來,linux 實現了這個POSIX 的標準,而後來windows 迫於壓力,也不得不兼容了POSIX 標準,不然很多linux 的應用程序在windows 上就跑不起來。我們常用的 osx 也是。
所以說,POSIX 是作業系統向上層應用提供能力的一些標準接口,包括系統調用、c 函數庫、shell 命令。
所謂的標準是指被 ISO 國際標準化組織承認的,這是一個國際組織,成員遍布各個國家,是製定各種國際標準的組織。 POSIX 就是 ISO/IEC 9945 標準(IEC 是電子方向的標準化組織)。其實POSIX 是IEEE 提出來的,這是一個美國的標準化組織,他提出的標準被ISO 承認會成為國際標準,例如POSIX 就是他們提出的IEEE Std 1003 標準,現在被ISO 承認,成為了ISO/IEC 9945標準。
我們來看看支援posix 的linux 提供了哪些系統呼叫(系統呼叫指的是在核心程式碼中提供的程式):
進程控制:
#檔案讀寫
檔案系統相關
等
這些系統呼叫很多在Node.js 裡有同名的api,shell 也有同名的指令:
例如:
fs.stats fs.access fs.chown fs.mkdir fs.open fs.close fs.read fs.write child_process.fork child_process.exec child_process.execFile
等
POSIX 是 ISO 承認的國際化標準,最早是由美國的一個標準協會 IEEE 提出的。 ISO 是專門客製化國際標準的組織,有許多國家的成員參與。
Node.js 的api 並沒有做很多抽象,名字也很大部分和POSIX 標準的api 比較像,這是它的特點,相比之下,JRE 暴露給java 的api 則做了很多抽象。
因為Node.js 的api 很多和c 函數庫、shell 指令比較接近,所以學習Node.js 結合學習shell 指令,或是會c 的可以再學下系統的函數庫會有更多的收穫。
了解 POSIX,是理解 Node.js api 設計,學好 Node.js 的前提。
更多程式相關知識,請造訪:程式設計影片! !
以上是淺析Node.js api的 POSIX 標準的詳細內容。更多資訊請關注PHP中文網其他相關文章!