WebAssembly学习(四)——文件系统概览

文件系统概述

上一篇的文章里面已经初步接触了本地文件的读取,但是出现了很多其他的问题,这篇文章就是更进一步学习Emscripten文件系统的原理。
下面几节简要介绍了Emscripten的文件系统环境和架构。除了讨论对标准C/C++同步文件API的支持外,还简要地讨论了文件系统API和Emscripten的异步文件系统API
本文原文参考在这里

Emscripten 文件系统运行时环境

本机代码和 "一般(normal) "的JavaScript使用完全不同的文件访问范式。可移植的本地代码通常调用libc和libcxx中的同步文件API,而JavaScript只允许异步文件访问(除了web workers)。此外,在网络浏览器提供的沙盒环境中运行时,JavaScript不能直接访问主机文件系统。

Emscripten提供了一个模拟本地文件系统的虚拟文件系统,因此使用同步文件API的本地代码可以在几乎没有改变的情况下编译和运行。

打包文件(Packaging Files)解释了你如何使用emcc来指定你需要在文件系统中包含哪些文件。对于许多开发者来说,这可能是你需要做的全部事情。

Emscripten 文件系统架构

Emscripten文件系统架构的主要元素如下所示。大多数本地代码会调用libclibcxx的同步文件API。这些API又会调用底层的文件系统API,该API默认使用**MEMFS虚拟文件系统。
在这里插入图片描述
当运行时被初始化时,MEMFS被挂载在/。要添加到
MEMFS**虚拟文件系统中的文件是在编译时使用emcc指定的,正如在打包文件(Packaging Files)中讨论的那样。当页面首次加载时,这些文件由JavaScript使用同步XHRs异步加载。只有当异步下载完成并且文件在虚拟文件系统中可用时,编译后的代码才允许运行(并调用同步API)。

XHR添加链接描述:XMLHttpRequest(XHR)对象用于与服务器交互。通过 XMLHttpRequest 可以在不刷新页面的情况下请求特定 URL,获取数据。这允许网页在不影响用户操作的情况下,更新页面的局部内容。XMLHttpRequest 在 AJAX 编程中被大量使用。

MEMFS中,所有的文件都严格存在于内存中,任何写入文件的数据在页面重新加载时都会丢失。如果需要持久的数据,你可以在浏览器中挂载IDBFS文件系统或在node.js上挂载NODEFSNODEFS提供了对本地文件系统的直接访问,但只有在node.js内部运行时才可以。你可以从自己的JavaScript中直接调用文件系统API来挂载新的文件系统,并执行其他可能需要的同步文件系统操作。在文件系统中有更多关于这个主题的信息。

如果你需要从网络上获取其他文件到文件系统,那么请使用emscripten_wget()和异步文件系统API的其他方法。这些方法是异步的,应用程序必须等到注册的回调完成后才能尝试读取它们。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值