一、加载文件(读数据)

使用fopen,fread等操作。

编译选项中添加:
--preload-file a.data

二、写数据

只有MEMFS文件系统是默认包含的,其他必须使用链接标志使能。

NODEFS:   -lnodefs.js
IDBFS:    -lidbfs.js
WORKERFS: -lworkerfs.js
PROXYFS:  -lproxyfs.js

1、MEMFS

  • 在运行时初始化时,MEMFS是默认挂载在“/”目录下的文件系统。
  • 所有文件都严格存在于内存中,当重新加载页面时,写入它们的任何数据都会丢失。

2、NODEFS

  • NODEFS文件系统只运行在node.js环境中
  • NODEFS允许通过挂载操作,将主机文件系统上的目录映射到Emscripten的虚拟文件系统中的目录。
  • 它使用节点的同步FS API将写入Emscripten文件系统的任何数据写到本地磁盘。

代码示例:

/** Copyright 2013 The Emscripten Authors.  All rights reserved.* Emscripten is available under two separate licenses, the MIT license and the* University of Illinois/NCSA Open Source License.  Both these licenses can be* found in the LICENSE file.*/#include <assert.h>
#include <stdio.h>
#include <string.h>
#include <emscripten.h>#ifdef NODERAWFS
#define CWD ""
#else
#define CWD "/working/"
#endifint main() {FILE *file;int res;char buffer[512];// write something locally with nodeEM_ASM(var fs = require('fs');fs.writeFileSync('foobar.txt', 'yeehaw'););#ifndef NODERAWFS// mount the current folder as a NODEFS instance// inside of emscriptenEM_ASM(FS.mkdir('/working');FS.mount(NODEFS, { root: '.' }, '/working'););
#endif// read and validate the contents of the filefile = fopen(CWD "foobar.txt", "r");assert(file);res = fread(buffer, sizeof(char), 6, file);assert(res == 6);fclose(file);assert(!strcmp(buffer, "yeehaw"));// write out something newfile = fopen(CWD "foobar.txt", "w");assert(file);res = fwrite("cheez nihao webassembly", sizeof(char), 20, file);assert(res == 20);fclose(file);// validate the changes were persisted to the underlying fsEM_ASM(var fs = require('fs');var contents = fs.readFileSync('foobar.txt', { encoding: 'utf8' });assert(contents === 'cheez'););puts("success");return 0;
}

编译和运行

编译: emcc test_nodefs_rw.c -o test_nodefs_rw.js -lnodefs.js -s FORCE_FILESYSTEM=1 -s INITIAL_MEMORY=64mb
运行: node test_nodefs_rw.js

3、IDBFS

  • IDBFS文件系统只运行在浏览器中
  • IDBFS文件系统实现了FS.syncfs()接口,当调用该接口时,将把任何操作持久化到IndexedDB实例。
  • 这样做是为了克服浏览器不提供持久存储同步api的限制,因此(默认情况下)所有写操作仅临时存在于内存中。

4、WORKERFS

  • WORKERFS只云习惯在worker线程中
  • 这个文件系统提供了对worker内部的file和Blob对象的只读访问,而不需要将整个数据复制到内存中,并且可以用于巨大的文件。

Emscripten中的虚拟文件系统相关推荐

  1. linux文件体系结构和虚拟文件系统

    linux中的虚拟文件系统(Virtual File System, VFS)是一种采用面向对象编程策略(尽管书写操作系统的C语言本身不支持面向对象编程,但是思想还是可以借鉴的),是对该操作系统所支持 ...

  2. Emscripten中的文件系统

    跨平台的C/C++程序常使用fopen().fread().fwrite()等Libc/LibCXX提供的同步文件访问函数.通常在文件系统方面,JavaScript程序与C/C++本地程序有巨大的差异 ...

  3. 【Linux 内核】Linux 操作系统结构 ( Linux 内核在操作系统中的层级 | Linux 内核子系统及关系 | 进程调度 | 内存管理 | 虚拟文件系统 | 网络管理 | 进程间通信 )

    文章目录 一.Linux 内核在操作系统中的层级 二.Linux 内核子系统 三.Linux 内核子系统之间的关系 一.Linux 内核在操作系统中的层级 Linux 内核 所在层级 : 整个计算机系 ...

  4. Asp.Net中虚拟文件系统的使用

    在Asp.Net的开发过程中页面文件等都是放在当前网站目录下的,其实我们可以利用.Net2.0新增的虚拟文件系统(VirtualPathProvider)将页面.图片等信息保存到数据库或其他目录中去, ...

  5. Gox语言中使用内存虚拟文件系统提升IO处理速度-GX43.1

    Gox语言中,1.06a版本以上,可以利用内置的github.com/topxeq/afero包来将内存中虚拟出一个文件系统.这样,如果内存足够大,完全可以利用它来提升一些文件IO处理的效率. 该包实 ...

  6. 虚拟文件系统(VFS)

    原文链接:http://www.orlion.ga/1008/ linux在不同的文件系统之上做了一个抽象层,使得文件.目录.读写访问等概念都成为抽象层概念,这个抽象层被称为虚拟文件系统(VFS). ...

  7. Linux虚拟文件系统简介

    本文将对Linux下的VFS做一个简单介绍,主要包括VFS里面的一些概念,以及文件系统是如何与VFS交互的. 本文所涉及的代码摘自Linux-4.4.0-59 什么是VFS VFS的全称为virtua ...

  8. Linux内核设计与实现笔记(一) 虚拟文件系统、块I/O层

    虚拟文件系统 系统内所有文件系统不但依赖VFS共存,而且也依靠VFS系统协同工作. VFS使得用户可以直接使用open/read/write等系统调用,而无需考虑具体文件系统和实际物理介质. VFS中 ...

  9. Linux虚拟文件系统解析

    概述 虚拟文件系统(Virtual Filesystem Switch,简称VFS)所有的数据结构都是在运行以后建立的,并在卸载时删除,在磁盘中并没有存储这些数据结构.虚拟文件系统只有和实际文件系统( ...

最新文章

  1. eBay测试老兵的修炼之道:如何从测试“小工”到测试“专家”?
  2. Android屏幕方向调整的两种方式
  3. 【30集iCore3_ADP出厂源代码(ARM部分)讲解视频】30-9底层驱动之USART
  4. 牛客网(剑指offer) 第十七题 树的子结构
  5. TypeScript 2.1发布
  6. 高光谱图像pca降维_高光谱图像的数据特性之探讨
  7. 操作系统之I/O管理:4、缓冲区管理(单缓冲、双缓冲、循环缓冲、缓冲池)
  8. [ERROR CRI]: unable to check if the container runtime at “/var/run/dockershim.sock“
  9. laravel 任务队列_Laravel 队列系统实现及使用教程
  10. 备战2019年数据库系统工程师从什么时候开始合适?
  11. 软件测试——全链路压测原理
  12. 在计算机中 总线简称,微机中的总线一般分为几等
  13. 详解JavaScript的五种继承方式
  14. 用循环写出九九乘法表格。
  15. Exoplayer的详细使用UI篇
  16. Python 基础部分(三)
  17. 数据分析统计学原理第十二章:多个比例的比较、独立性及拟合优度检验 | 我的统计学原理复习日记
  18. 简单的指针二叉查找树和数组二叉查找树
  19. 许一世情 陪你 浪尽天涯
  20. 2d游戏和 3d游戏的区别

热门文章

  1. SLF4J: The requested version 1.5.8 by your slf4j binding is not compatible with [1.6] SLF4J: See htt
  2. 汇编创建Win32窗体
  3. linux内核崩溃+grub,Linux内核崩溃信息分析
  4. C++中的面向对象(四大基本特征与五大原则)
  5. C语言学习笔记(十九)
  6. 【BYM】Android 仿百度搜索列表滑动效果,flutter环境搭建
  7. 支付宝APP支付Java服务端
  8. 转载--近几年的论文及其代码
  9. 嵌入式linux的软件毕设论文,嵌入式linux远程控制机器人_毕设论文.doc
  10. TensorFlow2.0--Chapter01环境搭建