2
A
回答
2
之间的共享存储环境,如果通过“阵列”你的意思是你的C/C++可以作为一个数组很容易地访问的东西,那么你要使用Erlang二进制。这些很容易以C/C++代码处理,编写为NIF或driver。例如,给定一个Erlang函数采用二进制作为参数,你可以在C作为NIF实现它,如下图所示:
-module(nif).
-export([binfunc/1]).
-on_load(init/0).
init() ->
erlang:load_nif("./nif", 0).
binfunc(_Bin) ->
{error, "nif not loaded"}.
:
#include <stdio.h>
#include "erl_nif.h"
static ERL_NIF_TERM
binfunc(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
ErlNifBinary bin;
unsigned i;
if (argc != 1 || !enif_inspect_binary(env, argv[0], &bin))
return enif_make_badarg(env);
printf("received binary of length %zu\r\ndata: ", bin.size);
for (i = 0; i < bin.size; ++i)
printf("%x ", bin.data[i]);
printf("\r\n");
return enif_make_atom(env, "ok");
}
static ErlNifFunc nif_funcs[] =
{
{"binfunc", 1, binfunc}
};
ERL_NIF_INIT(nif,nif_funcs,NULL,NULL,NULL,NULL)
Erlang的功能会这样来实现
运行它应该是这样的:
Erlang/OTP 17 [RELEASE CANDIDATE 2] [erts-6.0] [source-f91fbb2] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V6.0 (abort with ^G)
1> nif:binfunc(<<"abcdef">>).
received binary of length 6
data: 61 62 63 64 65 66
ok
这实现字符的只是一个简单的数组,但使用Erlang's powerful bit syntax可以方便地实现结构,数组,等等,你可以EXC在Erlang和C/C++之间挂起。
相关问题
- 1. IPC与共享内存的共享内存有什么区别?
- 2. 共享内存与码头
- 3. 云与共享内存
- 4. CUDA,CC 2.0卡上的共享内存限制
- 5. Erlang共享ETS表
- 6. 内存共享
- 7. ZeosLib与MYSQL的共享内存协议?
- 8. 与OpenACC共享内存的使用
- 9. CUDA共享内存
- 10. C共享内存
- 11. 在共享内存
- 12. RDMA内存共享
- 13. 共享内存段
- 14. Linux共享内存
- 15. 通过共享内存共享指针
- 16. activerecord内存共享缓存
- 17. 多进程python与共享内存
- 18. 与System V段错误共享内存
- 19. 如何与Golang共享内存?
- 20. 共享内存,并与蟒蛇
- 21. 与信号量共享内存同步
- 22. 如何与shm_open共享现有内存?
- 23. 使用共享内存与叉()
- 24. 共享内存段vs共享内存段
- 25. C++共享内存泄漏,如何清除共享内存?
- 26. 增加共享内存的内存
- 27. cuda中的共享内存
- 28. 共享内存在Unix的
- 29. OpenCL中的共享内存
- 30. DLL中的共享内存
非常感谢@Steve,但这只适用于简单的C程序。我不能将它用于大型项目。我想知道是否有一种在两个完全独立的应用程序之间共享大数据的有效方式。 –
实际上,这种技术适用于远远超出“简单C程序”范围的大型应用程序。但是放在一边,你有没有考虑使用你的应用程序之间共享的内存数据库? –
@Steve,我认为这会让事情变得更加复杂。让我再试一次。我会让你知道的。谢谢! –