К отличному ответу Зеда я бы добавил open_port()
. Это позволяет вам запускать внешнюю программу и общаться с ней из Erlang, используя ее стандартные входы и выходы. Вы можете использовать его как каналы Unix, задав параметр {line, L}, или есть также параметр {package, N} с префиксом длины, который я считаю более безопасным и более эффективным.
Преимущество этого по сравнению с NIF и драйверами портов в том, что ваш код Erlang полностью изолирован от кода C. Программа на C может разбить свой собственный стек, освободить двойные блоки памяти, войти в бесконечный цикл, что угодно. Ничто из этого не останавливает ваш код Erlang. В худшем случае вы закрываете порт Erlang и снова открываете его, если все становится грушевидным.