搜尋
首頁web前端js教程淺析Node.js api的 POSIX 標準
淺析Node.js api的 POSIX 標準Sep 02, 2021 am 10:06 AM
apinode.js

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

陳述
本文轉載於:掘金社区。如有侵權,請聯絡admin@php.cn刪除
Vercel是什么?怎么部署Node服务?Vercel是什么?怎么部署Node服务?May 07, 2022 pm 09:34 PM

Vercel是什么?本篇文章带大家了解一下Vercel,并介绍一下在Vercel中部署 Node 服务的方法,希望对大家有所帮助!

node.js gm是什么node.js gm是什么Jul 12, 2022 pm 06:28 PM

gm是基于node.js的图片处理插件,它封装了图片处理工具GraphicsMagick(GM)和ImageMagick(IM),可使用spawn的方式调用。gm插件不是node默认安装的,需执行“npm install gm -S”进行安装才可使用。

怎么使用pkg将Node.js项目打包为可执行文件?怎么使用pkg将Node.js项目打包为可执行文件?Jul 26, 2022 pm 07:33 PM

如何用pkg打包nodejs可执行文件?下面本篇文章给大家介绍一下使用pkg将Node.js项目打包为可执行文件的方法,希望对大家有所帮助!

一文解析package.json和package-lock.json一文解析package.json和package-lock.jsonSep 01, 2022 pm 08:02 PM

本篇文章带大家详解package.json和package-lock.json文件,希望对大家有所帮助!

分享一个Nodejs web框架:Fastify分享一个Nodejs web框架:FastifyAug 04, 2022 pm 09:23 PM

本篇文章给大家分享一个Nodejs web框架:Fastify,简单介绍一下Fastify支持的特性、Fastify支持的插件以及Fastify的使用方法,希望对大家有所帮助!

node爬取数据实例:聊聊怎么抓取小说章节node爬取数据实例:聊聊怎么抓取小说章节May 02, 2022 am 10:00 AM

node怎么爬取数据?下面本篇文章给大家分享一个node爬虫实例,聊聊利用node抓取小说章节的方法,希望对大家有所帮助!

手把手带你使用Node.js和adb开发一个手机备份小工具手把手带你使用Node.js和adb开发一个手机备份小工具Apr 14, 2022 pm 09:06 PM

本篇文章给大家分享一个Node实战,介绍一下使用Node.js和adb怎么开发一个手机备份小工具,希望对大家有所帮助!

图文详解node.js如何构建web服务器图文详解node.js如何构建web服务器Aug 08, 2022 am 10:27 AM

先介绍node.js的安装,再介绍使用node.js构建一个简单的web服务器,最后通过一个简单的示例,演示网页与服务器之间的数据交互的实现。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),