日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
深入理解Node.js的API設計的源頭:POSIX

如果你用過 Node.js 的 api,會不會覺得奇怪,為什么 api 的名字是這樣的:

創(chuàng)新互聯(lián)服務項目包括海棠網(wǎng)站建設、海棠網(wǎng)站制作、海棠網(wǎng)頁制作以及海棠網(wǎng)絡營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,海棠網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務的客戶以成都為中心已經(jīng)輻射到海棠省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!

比如創(chuàng)建目錄:

 
 
 
  1. const fs = require('fs'); 
  2.  
  3. fs.mkdir('/a/b/c', { recursive: true }, (err) => { 
  4.   if (err) throw err; 
  5. }); 

創(chuàng)建進程:

 
 
 
  1. const childProcess = require('child_process'); 
  2.  
  3. childProcess.fork('a/b/c.js'); 
  4. childProcess.execFile('a/b/dddd'); 
  5. childProcess.exec('"/path/to/test file/test.sh" arg1 arg2'); 
  6. childProcess.spawn('ls', ['-lh', '/usr']); 

mkdir、fork、exec、spawn 等,這些名字是怎么起的?

如果你用過 linux 命令或者 c 的函數(shù)庫,你會發(fā)現(xiàn)這些 api 在命令和 c 函數(shù)庫中也都是這個名字。

為什么會這樣呢?這些 api 是什么標準么?

沒錯,這就是 POSIX 標準

POSIX 是什么

POSIX 是 portable operating system interface (可移植的操作系統(tǒng)接口)的縮寫,x 是 unix 的意思,也就是從 unix 繼承而來。

因為不同操作系統(tǒng)如果提供的函數(shù)和系統(tǒng)調(diào)用不一樣,那么基于操作系統(tǒng)的上層應用程序的源代碼就不一樣,這就導致了一個平臺寫的代碼沒法在另一個平臺上編譯。

怎么辦呢?

如果每個操作系統(tǒng)提供的 api 一樣呢?不管操作系統(tǒng)底層怎么實現(xiàn)這些能力的,只要暴露出同樣的 api 給應用程序即可,這樣源代碼是跨平臺的,在不同的操作系統(tǒng)上編譯之后就能跑起來。

這個統(tǒng)一操作系統(tǒng)暴露的 api 的標準就是 POSIX。

可以把這個 POSIX 標準理解為 ts 里面定義的一個 interface,只要實現(xiàn)了這個 interface 的 api 就是兼容 POSIX 標準的。

POSIX 最早是 unix 擴展而來,linux 實現(xiàn)了這個 POSIX 的標準,而后來 windows 迫于壓力,也不得不兼容了 POSIX 標準,不然很多 linux 的應用程序在 windows 上就跑不起來。我們常用的 osx 也是。

所以說,POSIX 是操作系統(tǒng)向上層應用提供能力的一些標準接口,包括系統(tǒng)調(diào)用、c 函數(shù)庫、shell 命令。

  • 所謂的標準是指被 ISO 國際標準化組織承認的,這是一個國際組織,成員遍布各個國家,是制定各種國際標準的組織。POSIX 就是 ISO/IEC 9945 標準(IEC 是電子方向的標準化組織)。其實 POSIX 是 IEEE 提出來的,這是一個美國的標準化組織,他提出的標準被 ISO 承認會成為國際標準,比如 POSIX 就是他們提出的 IEEE Std 1003 標準,現(xiàn)在被 ISO 承認,成為了 ISO/IEC 9945 標準。

POSIX 有哪些內(nèi)容

我們來看一下支持 posix 的 linux 提供了哪些系統(tǒng)調(diào)用(系統(tǒng)調(diào)用指的是在內(nèi)核代碼中提供的程序):

進程控制:

  • fork 創(chuàng)建一個新進程
  • execv 運行可執(zhí)行文件
  • exit 中止進程

文件讀寫

  • open 打開文件
  • close 關(guān)閉文件描述符
  • write 寫文件
  • read 讀文件
  • truncate 截斷文件
  • fsync 把文件在內(nèi)存的部分寫入磁盤

文件系統(tǒng)相關(guān)

  • access 確定文件是否可存取
  • chdir 改變當前工作目錄
  • chown 改變文件的屬主或者用戶組
  • stat 取文件狀態(tài)信息
  • mkdir 創(chuàng)建目錄
  • symlink 創(chuàng)建符號鏈接
  • unlink 刪除鏈接

這些系統(tǒng)調(diào)用很多在 Node.js 里有同名的 api,shell 也有同名的命令:

比如:

 
 
 
  1. fs.stats 
  2. fs.access 
  3. fs.chown 
  4. fs.mkdir 
  5.  
  6. fs.open 
  7. fs.close 
  8. fs.read 
  9. fs.write 
  10.  
  11. child_process.fork 
  12. child_process.exec 
  13. child_process.execFile 

Node.js api 的特點

Node.js 是一個 js 的運行時,基于 v8 來注入很多提供操作系統(tǒng)能力的 api 給 js 調(diào)用,而這些 api 的設計很多都是直接用的 POSIX 標準的 api 名字,沒有做很多抽象。

Java 的 JRE(java runtime) 也提供了操作系統(tǒng)能力的抽象,但是那些 api 卻和操作系統(tǒng) POSIX 的 api 關(guān)系不大,而且融入了很多設計模式的東西,比如 io 流的裝飾器模式。

Node.js 的 api 的特點就是抽象并不多,而且很多 api 名字和 linux 命令都很像,貼近 POSIX 標準。所以學習 Node.js 的時候還是要學習下 linux 命令的,這兩者在設計上有一定的關(guān)系。

總結(jié)

POSIX 標準是操作系統(tǒng)能力的標準,定義了操作系統(tǒng)應該暴露什么 api 給應用程序,包括 shell 命令、c 函數(shù)庫、系統(tǒng)調(diào)用等標準。POSIX 標準使得應用程序在源碼層面是可以跨平臺移植的,分別在不同平臺做編譯即可。

POSIX 是 ISO 承認的國際化標準,最早是由美國的一個標準協(xié)會 IEEE 提出的。ISO 是專門定制國際標準的組織,有很多國家的成員參與。

Node.js 的 api 并沒有做很多抽象,名字也很大部分和 POSIX 標準的 api 比較像,這是它的特點,相比之下,JRE 暴露給 java 的 api 則做了很多抽象。

因為 Node.js 的 api 很多和 c 函數(shù)庫、shell 命令比較接近,所以學習 Node.js 結(jié)合學習 shell 命令,或者會 c 的可以再學下系統(tǒng)的函數(shù)庫會有更多的收獲。

了解 POSIX,是理解 Node.js api 設計,學好 Node.js 的前提。


本文名稱:深入理解Node.js的API設計的源頭:POSIX
URL地址:http://www.5511xx.com/article/djosdid.html