问题标签 [erlang-nif]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
813 浏览

c - 在 C NIF Erlang 中操作二进制文件

我是 Erlang 爱好者和新手 Erlang Prorammer。

我最近不得不面对 Erlang 中的数据处理问题。因此,我决定使用 NIF。我有两个 proplists 列表,我必须根据一个术语返回两个 proplists 的哈希连接。

为了实现它,我决定学习 C 中的二进制操作。此外,我正在使用 nifpp 库(C++11)来简化我的学习体验。来源:https ://github.com/goertzenator/nifpp

以下是我能想到的用于提取二进制文件并将其复制到另一个有据可查的 ErlNifBinary 的代码。但我无法操纵它。

我在 bin_term.data 中有一个指向 unsigned char 的指针。如何更改 bin_term.data 中的内容?

此外,如果我返回现有的复制二进制文件,我会为相同的输入获得不同的输出,并且考虑到我刚刚处理了来自输入的数据这一事实,并且不等于输入。 return enif_make_binary(env, &bin_term);

在 erlang REPL 中,如果我使用参数 <<7>> 或任何其他二进制文件执行函数,我得到的结果为 <<7,127,128,29,0,0,0,0,1,0,0,0,24 ,1,0,0>> 或一些随机动态值。有人可以指出代码中的错误是什么。

0 投票
1 回答
382 浏览

erlang - erlang可以使用命名管道而不是套接字吗?

NGINX 和其他服务器提供使用命名管道 (mkfifo) 的选项。

erlang 可以使用这些而不是端口进行 nif 交互。如果我想与我的 NIF 建立 70,000 个连接怎么办(不要判断)。

0 投票
2 回答
473 浏览

c - NIF 调用 Erlang 后二进制变化的值

我打算使用 NIF 为我打算在 Erlang 中编写代码的应用程序操作二进制文件。下面给出了 NIF 的 cpp 文件和 erl 文件的要点链接。

[Erl 要点链接] https://gist.github.com/abhijitiitr/3a5bc97184d6dd32f97b

[C++ 要点链接] https://gist.github.com/abhijitiitr/24d2b780f2cdacebfb07

基本上我正在尝试做一个简单的测试。在 NIF 调用之间共享二进制文件,并通过连续的 NIF 调用成功地操作它们。

如果您通过以下方式测试 erlang REPL 中的代码

二进制文件存储了 NIF 调用之间的更改。第三个命令的 REPL 输出是

<<1>>在初始化阶段通过了。为什么改成<<60>>? 我无法弄清楚这里发生了什么。有人可以指出错误吗?

C++编译指令

在我的 Mac 上。

我还想询问有关在 NIF 中操作共享资源的并发进程。这是可能的还是有一个规则是必须在单个 Erlang 进程中访问 NIF。

0 投票
3 回答
1112 浏览

c - Erlang:阻止 C NIF 调用行为

当许多 Erlang 进程同时调用 C NIF 时,我观察到它们的阻塞行为。可以做到无阻塞吗?这里有mutex我无法理解的工作吗?

PS 一个基本的“Hello world”NIF 可以通过将其设为sleep100来进行测试microseconds,以防特定PID调用它。可以观察到,调用 NIF 的其他 PID 在执行之前等待该睡眠执行。

在并发可能不会造成问题的情况下(例如数组推送、计数器增量),非阻塞行为将是有益的。

我正在分享 4 个要点的链接,这些要点分别由 a和spawnermodule组成。我试图修改 的值,并且确实观察到了非阻塞行为。这可以通过为函数分配一个大整数参数来确认。conc_nif_callerniftestValspawn_multiple_nif_callers

链接 spawner.erlconc_nif_caller.erlniftest.erl和最后的 niftest.c

下面的行是由我的 Mac 上的 Erlang REPL 打印的。

0 投票
1 回答
77 浏览

erlang - Erlang:在 64 位 VM 下使用 32 位 NIF

有没有办法从 64 位 Erlang(在 Windows 下)使用 32 位 NIF?

似乎不可能,但也许有办法做到这一点?

0 投票
1 回答
317 浏览

erlang - Erlang:NIF 和透析器警告

在实施 NIF 时,Dialyzer 给了我

函数 crc16/1 没有本地返回

可能是因为我确实退出了 .erl 模块(就像官方文档推荐的那样):

通常,似乎使用exit/1总是使 Dialyzer 抱怨此消息(-spec .. -> no_return()无济于事)。

如何解决这个问题?

0 投票
1 回答
437 浏览

c - Erlang NIF:线程锁定

NIF 实现可以使用常规的 C/C++ 线程锁定原语还是必须使用 NIF API(enif_mutex_lock(..), enif_mutex_create(..),等)

0 投票
1 回答
186 浏览

ubuntu - 无法在 ubuntu 中加载 aerospike erlang 客户端的 .nif 模块

我在 Ubuntu(12.04) 机器上安装了 aerospike 和 erlang(OTP17)。Aerospike 服务运行良好。我已经安装了 aerospike erlang 驱动程序。我无法使用 erlang 驱动程序连接到 aerospike,它无法加载 .nif 文件

我尝试了多种方法,将 /usr/lib/x86_64-linux-gnu 链接到 /usr/lib64 但到目前为止没有任何帮助。

错误信息如下

0 投票
1 回答
1111 浏览

macos - Elixir NIF - x64 Mac OSX 上的 Hello World 示例

嗨,我正在尝试获取此处 http://www.erlang.org/doc/man/erl_nif.html显示的 Erlang NIF(本机实现功能)的Hello World示例,以便 在 OSX 64 位上从 Elixir 工作。

首先,我创建 C 代码:

然后我按照这里建议的Erlang NIF Test -- OS X Liongcc成功地使用64 位架构 编译它

它产生了niftest.so我应该能够从 Erlang/Elixir 接口到的必要文件。我的 Elixir (niftest.ex) 看起来像这样(受此处报告的更复杂示例的启发):

现在在同一个目录中使用 niftest.so 和 niftest.ex 我启动 elixiriex并输入,Niftest.hello我得到的只是:“NIF 库未加载”

我错过了重要的一步吗?- 请帮忙!

0 投票
1 回答
642 浏览

pointers - 内部可变结构的原始指针类型

我正在为 Erlang NIF API 做一些 Rust FFI 工作,我有这些:

这个 ErlNifEnv 指针被传递给各种其他函数,但用户永远不会取消引用该指针。此外,此指针不是线程安全的(在多个线程中使用需要互斥锁)。这种类型的朴素 Rust 表示将是..

但是,我认为我可以将这种类型视为具有“内部可变性”,这将导致……</p>

即使底层 C 代码将其视为非常量,我是否应该将此指针视为 const?