I’m trying to write a Golang driver for Erlang, accesible via an Erlang port. If the port owner terminates, so does the port and the external program, if it is written correctly. It is not a good idea to use a global variable as the port driver can be spawned by multiple Erlang processes. Some additional BIFs that apply to port drivers: The linked-in driver looks like a port from the Erlang programmer’s point of view and is called a port driver. And as you’d have guessed the full HTML of erlang. I’ve started with the Erlang C port example, which works fine:
|Date Added:||14 March 2011|
|File Size:||48.71 Mb|
|Operating Systems:||Windows NT/2000/XP/2003/2003/7/8/10 MacOS 10/X|
|Price:||Free* [*Free Regsitration Required]|
Data is received from the external program. The solution I chose was to bridge erlang with libcurl by way of an erlang “linked-in driver”.
I’ve started with the Erlang C port example, which linled fine: If the port owner terminates, so does the port and the external program, if it is written correctly. All communication to and from the port must go through the port owner.
The external program resides in another OS process. An erroneous port driver will cause the entire Erlang runtime system to leak memory, hang or crash.
See my comments for explanation. This section outlines an example of how to solve the example problem in Problem Example by using a linked-in port driver. The C driver is a module that is linkwd and linked into a shared library.
Terminating this process closes the port driver. Hence, this is not to be an issue for an Erlang program communicating with ports, unless false assumptions about ports have been made.
Erlang – Drivers
Sign up or log in Sign up using Google. Like a port program, the port communicates with an Erlang process. Sign up using Email and Password. It is possible to write a driver in C according to certain principles and dynamically link it to the Erlang runtime system. I came accross this situation recently when porting my webcrawler to erlang. Before the port is created, the driver must be loaded. I have the sense that the message is being passed OK to the driver, but that I am somehow returning the response incorrectly.
It is customary to use an allocated driver-defined structure for this one, and to pass a pointer back as a reference.
Erlang truly is a useful language. When a kinked has been created, Erlang can communicate with it by sending and receiving lists of bytes, including binaries. Data is received from the external program.
Young risk taker.: Tutorial for how to create Erlang linked-in driver.
Like all C code there’s plenty of plumbing. Justin 1, 5 21 If Command is found, that driver is started. Justin can you post working code as answer porrt mark it as answer.
The linked-in driver looks like a port from the Erlang programmer’s point of view and is called a port driver.
Posting this answer based on Justin’s follow-up question herewhich contains a slightly different but working answer. The Erlang process which creates a port is said to be the port owneror the connected process of the port. C from erlang via linked-in driver Erlang truly is a useful language.
The BIFs mentioned are as usual documented in erlang 3. The linked-in driver looks like a port from the Erlang programmer’s point of view and is called a port driver.