[erlang-questions] Passing a C array to the emulator as an ErlIOVec

Vance Shipley <>
Fri Dec 14 22:31:51 CET 2007


Joel,

I have some drivers which marshall C structs into binaries
and deal with them in erlang.  It's a bit tedious to put
together but I think I've done a good job of having autotools
(autoconf,automake,etc.) handle the portability and some of
the library changes (e.g. changes to array sizes).  The first
thing to be sure of is that you've handled word alignment
padding.

An example driver is here:

http://netaccess-erldrv.googlecode.com/svn/trunk/c_src/netaccess_drv.c
http://netaccess-erldrv.googlecode.com/svn/trunk/include/iisdn.hrl.in
http://netaccess-erldrv.googlecode.com/svn/trunk/src/iisdn.erl

For each C struct in the API I implement a function:

	foo(#foo{}) -> binary()
	foo(binary()) -> #foo{}

It's tedious to implement bt I've moved between Solaris 32 and 64
and to Linux automatically just by rerunning autotools.

Hope that helps.

	-Vance



More information about the erlang-questions mailing list