BEAM Wisdoms — Virtual Machine Knowledge Base Help

In Depth: 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 others.

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

Last modified: 10 June 2024