<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="Content-Style-Type" content="text/css">
<title></title>
<meta name="Generator" content="Cocoa HTML Writer">
<meta name="CocoaVersion" content="1265">
<style type="text/css">
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 15.0px; font: 12.0px Helvetica}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 15.0px; font: 12.0px Helvetica; min-height: 14.0px}
p.p3 {margin: 0.0px 0.0px 0.0px 12.0px; font: 16.0px Times; color: #011892; min-height: 19.0px}
p.p4 {margin: 0.0px 0.0px 0.0px 12.0px; font: 16.0px Times; color: #011892}
p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 14.0px; font: 12.0px Helvetica; min-height: 14.0px}
span.s1 {direction: ltr; unicode-bidi: embed}
span.s2 {text-decoration: underline ; direction: ltr; unicode-bidi: embed}
span.s3 {text-decoration: underline}
</style>
</head>
<body>
<p class="p1">Besides what Steve suggested I'd recommend writing a port (going the "not really wanting the C library running with the VM" path).</p>
<p class="p2"><br></p>
<p class="p1">Ports are external processes which comunicate via I/O. <span class="Apple-converted-space">  </span>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.<span class="Apple-converted-space">  </span>This will keep your fault tolerance.</p>
<p class="p2"><br></p>
<p class="p1">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.<span class="Apple-converted-space">  </span>It easier to pack everything C friendly in binaries than decode general Erlang terms in the port.</p>
<p class="p2"><br></p>
<p class="p1">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).</p>
<p class="p2"><br></p>
<p class="p1">Also be aware: NIFs look easier than linked in drivers but are actually hard to do right.<span class="Apple-converted-space">  </span>Problem is that a long running NIF blocks the Erlang scheduler it runs on. <span class="Apple-converted-space">  </span>This counteracts often the faster performance of the C code and results in a less responsive system.</p>
<p class="p2"><br></p>
<p class="p1">Cheers,</p>
<p class="p1">-- Peer</p>
<p class="p2"><br></p>
<p class="p1">On 2014-01-31 21:42:02 +0000, Steve Vinoski said:</p>
<p class="p2"><br></p>
<p class="p3"><br></p>
<p class="p3"><br></p>
<p class="p3"><br></p>
<p class="p4">On Fri, Jan 31, 2014 at 4:35 PM, kraythe . <span class="s1"><<a href="mailto:kraythe@gmail.com"><span class="s2">kraythe@gmail.com</span></a>></span> wrote:</p>
<p class="p4">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. </p>
<p class="p3"><br></p>
<p class="p4">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.</p>
<p class="p3"><br></p>
<p class="p4"><span class="s3"><a href="http://www.erlang.org/doc/tutorial/nif.html">http://www.erlang.org/doc/tutorial/nif.html</a></span></p>
<p class="p4"><span class="s3"><a href="http://www.erlang.org/doc/man/erl_nif.html">http://www.erlang.org/doc/man/erl_nif.html</a></span></p>
<p class="p4"><span class="s3"><a href="http://www.erlang.org/doc/apps/erts/driver.html">http://www.erlang.org/doc/apps/erts/driver.html</a></span></p>
<p class="p4"><span class="s3"><a href="http://www.erlang.org/doc/man/erl_driver.html">http://www.erlang.org/doc/man/erl_driver.html</a></span></p>
<p class="p3"><br></p>
<p class="p4">--steve</p>
<p class="p5"><br></p>
</body>
</html>