小编Ami*_*min的帖子

Erlang,在函数之间传递一个 nif 对象

C nif code在函数中写了一个and new,它创建了一个堆栈结构enif_alloc_resource并返回它。当我使用 function 时enif_make_resources,它总是<<>>以 erlang返回。

这是我的 C 代码:

#include "erl_nif.h"


static ErlNifResourceType *MEM_RESOURCE;



typedef struct
{
    int n;
    int ps;
    int pe;
    ERL_NIF_TERM *data;
} Stack;



Stack *new(ErlNifEnv *env, int size)
{
    Stack *s = (Stack*) enif_alloc_resource(MEM_RESOURCE, sizeof(Stack));
    s->n = size;
    s->ps = 0;
    s->pe = size - 1;
    s->data = enif_alloc(sizeof(ERL_NIF_TERM) * size);
    return s;
}



static ERL_NIF_TERM new_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
    int size; …
Run Code Online (Sandbox Code Playgroud)

c erlang alloc erlang-nif

5
推荐指数
0
解决办法
429
查看次数

Erlang,是否可以在不重新启动外壳的情况下重新加载或升级nif库?

我有一个nif库,每次重新编译它时,都必须重新启动外壳程序才能重新加载或升级该库。

这是我的erlang代码:

-module(q4).
-export([init/0]).

-on_load(init/0).


init() ->
    erlang:load_nif("./q4_nif", reload).
Run Code Online (Sandbox Code Playgroud)

每次我编译erlang模块时,都会发生此错误:

`The on_load function for module q4 returned {error,
                                         {upgrade,
                                          "Upgrade not supported by this NIF library."}}`
Run Code Online (Sandbox Code Playgroud)

当我调用init/0函数时,会发生此错误: {error,{reload,"Reload not supported by this NIF library."}}

无论如何,有没有解决此问题并加载新的nif库,而无需重新启动Shell?

c erlang erlang-nif

5
推荐指数
1
解决办法
811
查看次数

erlang secure tcp中的{active,N}模式

我用ssltcp编写这个简单的代码:

ssl:start().
{ok, ListenSocket} = ssl:listen(9999, [{certfile, "cert.pem"}, {keyfile, "key.pem"},{reuseaddr, true}]).
{ok, Socket} = ssl:transport_accept(ListenSocket).
ssl:ssl_accept(Socket).
ssl:setopts(Socket, [{active, once}]).
Run Code Online (Sandbox Code Playgroud)

它工作正常,但是当我更换{active, once}使用{active, 3},返回此错误:

{错误,{选项,{socket_options,{活性,3}}}}

如何{active, N}在安全tcp中使用模式?

erlang ssl tcp

4
推荐指数
1
解决办法
109
查看次数

Erlang从Pem文件生成rsa密钥

我在shell中使用以下命令生成私有rsa密钥证书文件: openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days XXX -nodes

现在,我尝试将这些文件转换为rsa公钥和私钥。我使用下面的代码,但不起作用。我觉得PrivateKey变量必须#RSAPrivateKey{}根据http://erlang.org/doc/apps/public_key/using_public_key.html但它是#PrivateKeyInfo{}。如何从key.pem和cert.pem生成ras公钥和私钥?

erlang shell:

1> {ok, PemBin} = file:read_file("key.pem").
{ok,<<"-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDMd0dnMS9t27wo\nhloldtGYbT3C/uR"...>>}
2> [RSAEntry] = public_key:pem_decode(PemBin).
[{'PrivateKeyInfo',<<48,130,4,189,2,1,0,48,13,6,9,42,134,
                     72,134,247,13,1,1,1,5,0,4,130,4,167,
                     ...>>,
                   not_encrypted}]
3> PrivateKey = public_key:pem_entry_decode(RSAEntry).
{'PrivateKeyInfo',v1,
                  {'PrivateKeyInfo_privateKeyAlgorithm',{1,2,840,113549,1,1,1},
                                                        {asn1_OPENTYPE,<<5,0>>}},
                  <<48,130,4,163,2,1,0,2,130,1,1,0,204,119,71,103,49,47,109,
                    219,188,40,134,90,37,...>>,
                  asn1_NOVALUE}
4> {ok, CertBin} = file:read_file("cert.pem").        
{ok,<<"-----BEGIN CERTIFICATE-----\nMIIDVzCCAj+gAwIBAgIJAKBDxdUZ8v9/MA0GCSqGSIb3DQEBCwUAMEIxCzAJBgNV\nBAYTAlhYMRUwEwY"...>>}
5> [CertEntry] = public_key:pem_decode(CertBin).      
[{'Certificate',<<48,130,3,87,48,130,2,63,160,3,2,1,2,2,9,
                  0,160,67,197,213,25,242,255,127,48,13,
                  ...>>,
                not_encrypted}]
6> Cert = public_key:pem_entry_decode(CertEntry).     
{'Certificate',{'TBSCertificate',v3,11548291388562145151,
                                 {'AlgorithmIdentifier',{1,2,840,113549,1,1,11},<<5,0>>},
                                 {rdnSequence,[[{'AttributeTypeAndValue',{2,5,4,6},
                                                                         <<19,2,88,88>>}],
                                               [{'AttributeTypeAndValue',{2,5,4,7},<<"\f\fDefault City">>}],
                                               [{'AttributeTypeAndValue',{2,5,4,10}, …
Run Code Online (Sandbox Code Playgroud)

encryption erlang ssl rsa public-key

3
推荐指数
1
解决办法
446
查看次数

erlang,将元组列表转换为json

我在mnesia中有一个查询,它返回一个像这样的元组列表:

[{"str", 10}, {"str2", 20}]
Run Code Online (Sandbox Code Playgroud)

我想将它转换为json使用,jiffy但它似乎jiffy:encode/1无法做到.反正有没有解决我的问题?!

erlang json jiffy

2
推荐指数
1
解决办法
611
查看次数

标签 统计

erlang ×5

c ×2

erlang-nif ×2

ssl ×2

alloc ×1

encryption ×1

jiffy ×1

json ×1

public-key ×1

rsa ×1

tcp ×1