Unix domain sockets are your friend.
A Unix domain socket or IPC socket
(inter-process communication socket)
is a data communications endpoint that
is similar to an Internet socket, but
does not use a network protocol for
communication. It is used in POSIX
operating systems for inter-process
communication.
You reserve a name for your communications channel, such as /myapp/ipc
, and then both processes open that address using a UNIX socket:
struct sockaddr_un local;
int len;
s = socket(AF_UNIX, SOCK_STREAM, 0);
local.sun_family = AF_UNIX;
strcpy(local.sun_path, "/myapp/ipc");
len = strlen(local.sun_path) + sizeof(local.sun_family);
bind(s, (struct sockaddr *)&local, len);
Now you can use listen
or connect
or whatever else in the socket family. It's a little bit of work, but is the best way to achieve IPC on Linux.
Since Erlang is just a nice language for specifying little servers (processes) that communicate over named pipes (processes), this model should feel comfortable to you.