这篇文章主要介绍Node.js api中POSIX标准的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
如果你用过 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 是 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 的 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 是一个 js 的运行时,基于 v8 来注入很多提供操作系统能力的 api 给 js 调用,而这些 api 的设计很多都是直接用的 POSIX 标准的 api 名字,没有做很多抽象。
Java 的 JRE(java runtime) 也提供了操作系统能力的抽象,但是那些 api 却和操作系统 POSIX 的 api 关系不大,而且融入了很多设计模式的东西,比如 io 流的装饰器模式。
Node.js 的 api 的特点就是抽象并不多,而且很多 api 名字和 linux 命令都很像,贴近 POSIX 标准。所以学习 Node.js 的时候还是要学习下 linux 命令的,这两者在设计上有一定的关系。
以上是“Node.js api中POSIX标准的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。