`
mryufeng
  • 浏览: 982371 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

未公开的ram_file 内存文件

阅读更多
Ram_file是erlang未公开的一个模块, 是在内存文件的一个实现,erts的内置驱动ram_file_drv提供底层快速的内存访问。它的用途是需要文件访问接口的模块如erl_tar之类的可以在内存里面提供高速的文件访问服务。 所以ram_file提供file所提供的正常接口以外,还支持以下接口:
%% Specialized file operations                                                                                                     
-export([get_size/1, get_file/1, set_file/2, get_file_close/1]).
-export([compress/1, uncompress/1, uuencode/1, uudecode/1]).
主要用于zip压缩.

root@yufeng-desktop:~/otp_src_R13B/lib/stdlib/src# erl
Erlang R13B (erts-5.7.1) [source] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.7.1  (abort with ^G)
1> erl_ddll:loaded_drivers().
{ok,["efile","tcp_inet","udp_inet","zlib_drv",
     "ram_file_drv","tty_sl"]}
2> f(R),{ok,R}=ram_file:open("hello", []).
{ok,{file_descriptor,ram_file,#Port<0.453>}}
3> ram_file:get_size(R).                 
{ok,5}
4> ram_file:get_file(R).                 
{ok,"hello"}
5> ram_file:compress(R).
{ok,25}
6> ram_file:get_file(R).
{ok,[31,139,8,0,0,0,0,0,0,3,203,72,205,201,201,7,0,134,166,
     16,54,5,0,0,0]}
7> ram_file:uncompress(R).
{ok,5}
8> ram_file:get_file(R). 
{ok,"hello"}
9> ram_file:close(R).
ok

CTRL+C o可以看到ram_file的port的信息:

=port:#Port<0.456>
Slot: 456
Connected: <0.63.0>
Links: <0.63.0>
Port controls linked-in driver: ram_file_drv

注意ram_file:open的文件名实际上是个数据。

另外如果file:open(xxx, [ram]) 方式打开的话,其返回的实际上是ram_file的handle.
分享到:
评论
2 楼 mryufeng 2009-05-04  
前几天看到ejabberd用ram_file做ejabber_logger的动态编译 这算一个应用吧。
1 楼 litaocheng 2009-05-04  
哦。内存文件,很好,这些设施也是很有必要的...

相关推荐

    LPM_RAM.rar_RAM VERILOG_lpm_lpm_ram_verilog 调用LPM_verilog的ram模块

    压缩包中的"LPM_RAM"文件可能是包含了实现上述功能的Verilog源代码、仿真测试平台或者经过综合后的网表文件。使用这些文件,设计者可以在实际项目中直接调用并定制RAM模块。 综上所述,LPM RAM在Verilog设计中扮演...

    System_File_Code.rar_system_file

    在这样的环境中,开发者需要了解如何操作硬件资源,如RAM、ROM、I/O端口以及中断服务程序,来实现文件系统的功能,例如读取、写入、创建和删除文件。这可能涉及到FAT16或FAT32文件系统,这是AVR平台常见的文件系统...

    leaderboard_ram.zip_ram_database

    标题中的"leaderboard_ram.zip_ram_database"暗示了这个压缩包可能包含一个与内存数据库相关的项目,其中可能有一个名为"leaderboard"的组件或数据表。内存数据库是一种将数据存储在RAM(随机存取存储器)中的数据库...

    xxjyjy4.rar_LINUX 内存管理_Linux 内存管理_linux_内存管理

    - **文件映射内存**(File-Mapped Memory):与磁盘文件关联,可以直接从磁盘读写。 4. **内存区域(Memory Areas)**: - **堆(Heap)**:动态分配的内存区域,由`malloc`等函数管理。 - **栈(Stack)**:...

    scatter_file.doc

    **Scatter File**(分散加载描述文件)是嵌入式软件开发中一种重要的配置文件,主要用于指导链接器(例如 ARM 的 **armlink** 工具)如何将程序的不同部分(如代码和数据)放置在目标系统的内存中。通过 Scatter ...

    DA14580 扩展内存 RAM38K_40K_42K配置方法.pdf

    根据提供的文件内容,我们可以详细探讨DA14580芯片如何扩展内存至38K、40K、42K的具体配置方法。以下内容详细介绍了DA14580的内存扩展原理、步骤及相关注意事项。 ### 内存扩展原理 DA14580芯片在上电后会扫描端口...

    VxWorks环境下内存文件系统的应用.pdf

    内存文件系统(Memory File System)是一种特殊的文件系统,其数据不存储在传统的非易失性存储介质上,而是保存在计算机的随机存取存储器(RAM)中。这种系统的主要优势在于可以快速访问存储在内存中的数据,并且...

    MemStatus.rar_物理内存

    2. **虚拟内存**:当物理内存不足时,Windows会使用硬盘上的空间来模拟内存,这就是虚拟内存,也称为页面文件(Page File)。虽然虚拟内存比物理内存慢得多,但它能扩展系统的可用内存,避免程序因内存不足而崩溃。 ...

    RAMMap 查看内存占用

    4. **Page File**:页面文件页面则展示了虚拟内存的使用情况,包括系统页面文件的大小、分配和使用状态。这对于理解系统如何处理内存不足的情况至关重要。 5. **Superfetch**:超级预读取页面展示了Windows的Super...

    RAMMap.zip_RamMap_exe_zip

    用户可以通过各种视图来分析内存,例如“Overview”(概览)显示总的内存使用情况,“Physical”(物理)显示内存页的分布,“File System Cache”(文件系统缓存)揭示系统如何存储文件和目录信息,“Executive”...

    C2000_CMD_file_config.rar_c2000_c2000 cmd_c2000 伪指令_memory

    `section`伪指令用于定义程序中的各个部分,如代码、初始化数据、未初始化数据等,并将其映射到特定的内存区域。例如: ``` .text : { *(.text) *(.text*) *(.rodata*) } &gt; ROM .data : { *(.data) *(....

    sd.rar_STM32 创建文件_读写SD 文件

    4. **内存管理**:由于STM32的内存有限,你需要合理管理内存,确保在读写文件时不会耗尽RAM。这可能涉及到动态内存分配、内存池管理等技术。 5. **错误处理**:在进行文件操作时,可能会遇到各种错误,如SD卡未正确...

    MDK scatter file 连接文件

    MDK scatter file,全称是Memory Descriptors Keyword (MDK) 散装加载描述文件,是Keil uVision集成开发环境中用于指定微控制器程序映像布局的重要文件。它定义了程序的不同部分如何被加载到内存中,以及这些部分在...

    实验六 Windows 2000虚拟内存.rar_虚拟内存_虚拟实验

    1. **页面文件(Page File)**:也称为交换文件或虚拟内存,是Windows用来扩展物理内存的机制。当物理RAM不足时,操作系统会将不常用的数据或程序页存储到硬盘上的页面文件中,以便腾出物理内存供其他程序使用。页面...

    infineon_编译链接文件解析1

    在LSL文件中,对应的`lsl`指令会映射到内存的相应位置,编译器生成的映射文件(map file)会展示实际的内存分配情况。 - `#pragma`用于函数定位:同样地,可以使用`#pragma function = "label"`来指示函数的存储位置...

    CMD文件的原理_dsp_cmd_文件

    CMD文件,全称为Command File,是德州仪器(TI)的数字信号处理器(DSP)开发过程中不可或缺的一部分。在深入了解CMD文件的原理之前,我们先要理解为何在DSP开发中需要使用CMD文件,以及它如何帮助开发者管理和优化...

    VxWorks环境下内存文件系统的应用

    为了适应这一趋势,本文介绍了一种应用于VxWorks环境下的内存文件系统(Memory File System, MFS)。VxWorks是由美国Wind River Systems公司开发的一款实时操作系统(RTOS),以其高度的可靠性和出色的实时性能,在...

    S32K144的hello_interrupt移植到MDK

    MDK会自动生成分散加载描述文件(S32K144_64_flash.sct和S32K144_64_ram.sct),这些文件用于定义程序在内存中的分布情况。 编译是移植过程的关键步骤。开发者可能会遇到编译错误,如无法找到S32K144.h头文件的问题...

    file_func.rar_pic18f2550_sdcard

    这个压缩包可能包含了一个名为“file_func.c”的源代码文件,该文件包含了实现这种功能的函数。 在描述中,“PIC18F2550 SDCARD DRIVER”指出了这个项目是为微控制器 PIC18F2550 设计的一个SD卡驱动程序。PIC18F...

Global site tag (gtag.js) - Google Analytics