(* Программа rcvmessage - получение сообщений из канала fifo *)
uses linux,stdio;

const
  MSGSIZ=63;
  fifo  = 'fifo';


function fatal (s:pchar):integer;
begin
  perror (s);
  halt (1);
end;


var
  fd:integer;
  msgbuf:array [0..MSGSIZ] of char;
begin
  (* Создать канал fifo, если он еще не существует *)
  if not mkfifo (fifo, octal(0666)) then
    if linuxerror <> Sys_EEXIST then
      fatal ('Ошибка приемника: вызов mkfifo');

  (* Открыть канал fifo для чтения и записи. *)
  fd := fdopen (fifo, Open_RDWR);
  if fd < 0 then
    fatal ('Ошибка при открытии канала fifo');

  (* Прием сообщений *)
  while true do
  begin
    if fdread (fd, msgbuf, MSGSIZ + 1) < 0 then
      fatal ('Ошибка при чтении сообщения');
    (*
     * вывести сообщение; в настоящей программе
     * вместо этого могут выполняться какие-либо
     * полезные действия.
     *)

    writeln('Получено сообщение: ', msgbuf);
  end;
end.
