Есть в Линуксе такое понятие как ИМЕНОВАННЫЕ ПОТОКИ (пайпы).
Создаешь пайп, открываешь его одним демоном на чтение, другим на запись.
То, что один туда пнет - на другом конце второй получит.
###создание пайпа
unless (-p PIPENAME)
{
unlink PIPENAME;
system('mknod', PIPENAME, 'p') && die "can't create pipe: $!";
}
###откртие пайпа
sysopen(RDO, PIPENAME, O_RDONLY|O_NONBLOCK);
###использование пайпа
sysread(RDO,$data,BYTES);
на другом конце то-же самое но на запись.
Использовать один и тот же пайп для чтения/записи с обоих сторон не рекомендуется.
Наиболее часты глюк - можно прочитать то что сам туда вписал, если на той стороне не успели вычитать первее.