高级 API

本节列出不适合一般用途的 API,但在某些情况下可能对开发人员有用。这包括难以使用或复杂使用的 API,或主要面向 Emscripten 内核开发人员的 API。

settings.js

settings.js 包含编译器在不同地方使用的默认值和选项。

警告

许多 **settings.js** 选项非常脆弱 - 某些选项的组合,以及某些选项与某些源代码组合使用,会导致 Emscripten 严重失败。这适用于“高级用户”,甚至可能仅适用于开发 Emscripten 本身的用户。

**settings.js** 中的选项通常设置为 *emcc* 的命令行参数

emcc -sOPT=VALUE

虽然可以手动编辑 **settings.js**,但强烈建议*不要*这样做。通常,**settings.js** 定义了不应该修改的底层选项。另请注意,编译器根据其他设置更改某些选项。例如,ASSERTIONS 默认情况下已启用,但在优化构建 (-O1+) 中被禁用。

注意

有关可用于配置 Emscripten 的选项的更多信息,请阅读 src/settings.js 或访问 emsettings 页面

preamble.js

以下高级 API 在 preamble.js 中有文档说明。

allocate(slab, allocator)

这被标记为*内部*,因为它难以使用(它已被针对多种语法进行了优化,以节省生成的代码中的空间)。通常开发人员应使用 _malloc() 分配内存,使用 setValue() 等初始化它,但在某些情况下,此函数可能对高级开发人员有用。

参数
  • **slab** – 数据数组或数字。如果为数字,则为要分配的块的大小,以*字节*为单位。

  • **allocator** – 如何分配内存,请参见 ALLOC_*

高级文件系统 API

文件系统 API 涵盖了与大多数开发人员相关的公共 API。以下函数仅在高级用例(例如,编写新的本地文件系统)或旧版文件系统兼容性中需要。

FS.hashName(parentid, name)
FS.hashAddNode(node)
FS.hashRemoveNode(node)
FS.lookupNode(parent, name)
FS.createNode(parent, name, mode, rdev)
FS.destroyNode(node)
FS.isRoot(node)
FS.isMountpoint(node)
FS.isFIFO(node)
FS.nextfd()
FS.getStream(fd)
FS.createStream(stream, fd)
FS.closeStream(fd)
FS.getStreamFromPtr(ptr)
FS.getPtrForStream(stream)
FS.major(dev)
FS.minor(dev)
FS.getDevice(dev)
FS.getMounts(mount)
FS.lookup(parent, name)
FS.mknod(path, mode, dev)
FS.create(path, mode)
FS.allocate(stream, offset, length)
FS.mmap(stream, buffer, offset, length, position, prot, flags)
FS.ioctl(stream, cmd, arg)
FS.staticInit()
FS.quit()
FS.indexedDB()
FS.DB_NAME()

仅供高级用户使用。

FS.getMode(canRead, canWrite)
FS.findObject(path, dontResolveLastLink)
FS.createPath(parent, path, canRead, canWrite)
FS.createFile(parent, name, properties, canRead, canWrite)
FS.createDataFile(parent, name, data, canRead, canWrite, canOwn)
FS.createDevice(parent, name, input, output)
FS.forceLoadFile(obj)

旧版 v1 兼容函数。

还有一些额外的 标志模式

  • rs

  • xw

  • xw+

  • xa

  • xa+