首頁  >  文章  >  web前端  >  淺析Node.js api的 POSIX 標準

淺析Node.js api的 POSIX 標準

青灯夜游
青灯夜游轉載
2021-09-02 10:06:062191瀏覽

POSIX 是什麼?有哪些內容?以下這篇文章帶大家了解一下Node.js api的 POSIX 標準、Node.js api的特點,希望對大家有幫助!

淺析Node.js api的 POSIX 標準

【推薦學習:《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 是什麼

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 有哪些內容

我們來看看支援posix 的linux 提供了哪些系統呼叫(系統呼叫指的是在核心程式碼中提供的程式):

進程控制:

  • fork 建立一個新進程
  • execv 執行可執行檔
  • exit 中止進程

#檔案讀寫

  • open 開啟檔案
  • close 關閉檔案描述子
  • write 寫檔案
  • read 讀取檔案
  • truncate 截斷檔案
  • fsync 把檔案在記憶體的部分寫入磁碟

檔案系統相關

  • access 決定檔案是否可存取
  • chdir 改變目前工作目錄
  • chown 改變檔案的屬主或使用者群組
  • stat 取檔案狀態資訊
  • mkdir 建立目錄
  • symlink 建立符號連結
  • unlink 刪除連結

這些系統呼叫很多在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

Node.js api 的特點

##Node.js 是一個js 的運行時,基於v8 來注入許多提供作業系統能力的api 給js 調用,而這些api 的設計很多都是直接用的POSIX 標準的api 名字,沒有做很多抽象。

Java 的JRE(java runtime) 也提供了作業系統能力的抽象,但是那些api 卻和作業系統POSIX 的api 關係不大,而且融入了許多設計模式的東西,例如io 流的裝飾器模式。

Node.js 的 api 的特色就是抽像不多,而且很多 api 名字和 linux 指令都很像,貼近 POSIX 標準。所以學習 Node.js 的時候還是要學習下 linux 指令的,這兩者在設計上有一定的關係。

總結

POSIX 標準是作業系統能力的標準,定義了作業系統應該暴露什麼api 給應用程序,包括shell 命令、c 函數庫、系統調用等標準。 POSIX 標準使得應用程式在原始碼層面是可以跨平台移植的,分別在不同平台做編譯即可。

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中文網其他相關文章!

陳述:
本文轉載於:juejin.cn。如有侵權,請聯絡admin@php.cn刪除