浅析Node.js api的 POSIX 标准
时间:2021-09-09
来源:互联网
今天PHP爱好者给大家带来POSIX 是什么?有哪些内容?下面本篇文章带大家了解一下Node.js api的 POSIX 标准、Node.js api的特点,希望对大家有所帮助!
如果你用过 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爱好者其它相关文章!
-
剑与远征启程装备铸造石获取方法装备铸造石怎么得 时间:2024-08-28
-
光遇2024年8月23日每日任务完成方法 时间:2024-08-28
-
去远方游戏第二章主线攻略介绍 时间:2024-08-28
-
原神8月16日礼包兑换码2024 时间:2024-08-28
-
无限暖暖什么时候上线 时间:2024-08-28
-
探探猫大作战游戏礼包码合集一览 时间:2024-08-28
今日更新
- 如何解决php manager出错问题
阅读:18
- 一招教你怎么使用mac 安装配置 homebrew(代码分享)
阅读:18
- expose_php不起作用怎么办
阅读:18
- 浅析Mac安装和卸载Java的JDK(分享)
阅读:18
- thinkphp5与laravel的区别是什么
阅读:18
- php怎么将错误日志写入文件
阅读:18
- hbuilder怎么安装php插件
阅读:18
- 如何解决laravel key报错问题
阅读:18
- laravel怎么创建函数
阅读:18
- 怎么离线安装vue环境
阅读:18