[erlang-questions] Documentation on Binding a C library to Erlang

Peer Stritzinger <>
Sun Feb 2 14:03:03 CET 2014


Besides what Steve suggested I'd recommend writing a port (going the 
"not really wanting the C library running with the VM" path).

Ports are external processes which comunicate via I/O.   This is a bit 
slower than the other posibilities butit has a huge advantage: if your 
port program crashes, your Erlang node will live on its easy to have a 
supervisor restart your Port.  This will keep your fault tolerance.

When writing a C port program, I usually use a very simplistic protocol 
(framing with {packet, 2} or {packet, 4} ) which keeps especially the C 
code easy.  It easier to pack everything C friendly in binaries than 
decode general Erlang terms in the port.

Since when my C code will be restarted when it crashes it accomodates a 
C style with lots of assert() macros in it (which are enabled in 
production).

Also be aware: NIFs look easier than linked in drivers but are actually 
hard to do right.  Problem is that a long running NIF blocks the Erlang 
scheduler it runs on.   This counteracts often the faster performance 
of the C code and results in a less responsive system.

Cheers,
-- Peer

On 2014-01-31 21:42:02 +0000, Steve Vinoski said:

> 
> 
> 
> On Fri, Jan 31, 2014 at 4:35 PM, kraythe . <> wrote:
> Greetings, I am a newbie to erlang. I am interested in binding a c 
> library that I have as source (that I have written) to Erlang. In Java 
> I would use JNI. In Erlang I don't know. Can anyone point me at where 
> the docs are for this? Especially a tutorial. Google has been 
> unrevealing and i have been through hundreds of dead ends. 
> 
> If you really want the C library running together with the Erlang VM, 
> you'll write either a set of native implemented functions (NIFs) or a 
> linked-in driver. See the links below.
> 
> http://www.erlang.org/doc/tutorial/nif.html
> http://www.erlang.org/doc/man/erl_nif.html
> http://www.erlang.org/doc/apps/erts/driver.html
> http://www.erlang.org/doc/man/erl_driver.html
> 
> --steve
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20140202/ad361216/attachment.html>


More information about the erlang-questions mailing list