Erlang NIF的使用

本文详细介绍了如何使用Erlang的Native Implemented Functions (NIF)。NIF允许开发者用C语言扩展Erlang的功能,以提高效率。通过创建niftest.c文件,编写Erlang模块niftest.erl,编译成动态库,并在Erlang中调用NIF函数,展示了NIF的实现过程和调用方法。NIF虽能避免上下文切换开销,但其错误可能导致整个Erlang进程崩溃。
摘要由CSDN通过智能技术生成

        Native Implemented Functions(NIF)可以用C来实现程序一些功能的扩展,一般用来实现一些用Erlang无法实现或者实现效率低的功能。

      C语言编译生成的动态库(*.so)在Erlang调用C模块时动态加载到Erlang的进程空间中,调用NIF不用上下文的切换开销,但是安全性不是很高,因为NIF的crash会导致整个Erlang进程crash。

NIF的实现

先按官方文档上给的例子,初次实现一下NIF的使用:

1.创建niftest.c文件

#include "erl_nif.h"

static ERL_NIF_TERM hello(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
    return enif_make_string(env, "Hello world!", ERL_NIF_LATIN1);
}

static ErlNifFunc nif_funcs[] =
{
    {"hello", 0, hello}
};

ERL_NIF_INIT(niftest,nif_funcs,NULL,NULL,NULL,NULL)

初始化NIF库:
通过初始化宏将C实现和对应的Erlang模块绑定起来;
ERL_NIF_INIT(niftest,nif_funcs,NULL,NULL,NULL,NULL)
第一个参数 : 对应erlang模块的名称
第二个参数 : 是该库中所有可供外部调用的NIF的函数描述符的静态数组

函数描述符用数据结构ErlNifFunc来表示:

typedef struct
{
    con
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值