IO in Erlang

How a Driver Looks Like

A port driver is a C module with several functions defined (see ErlDrvEntry in emulator/beam/erl_driver.h:

  • Start/stop, finish, process exit/emergency close functions
  • IO events (async/input/output)
  • Timeout handler
  • Call function, which passes commands to the port
  • Control function, which changes options in the port
  • Flush function, which ensures that all data is written

Making a Port Driver

Define an erl_drv_entry variable (a struct) and fill it with pointers to callback functions. You will need to cover things such as starting your driver, stopping it, opening a port, sending commands and receiving data, and few other.

BEAM Wisdoms: Interfacing Erlang with the Outer World

Load your port driver and register it in the system under a name (add_driver_entry).

Erl Dynamic Driver Loader Linker

this goes to indepth section