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

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

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

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

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

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

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

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

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


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver CS6
視覺化網頁開發工具

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

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

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

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