(* Программа sendmessage - пересылка сообщений через FIFO *)
uses linux,stdio,strings;

const
  MSGSIZ=63;
  fifo  = 'fifo';


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


var
  fd,j:integer;
  nwrite:longint;
  msgbuf:array [0..MSGSIZ] of char;
begin
  if paramcount=0 then
  begin
    writeln (stderr, 'Применение: sendmessage сообщение');
    halt (1);
  end;
  (* Открыть канал fifo, установив флаг Open_NONBLOCK *)
  fd := fdopen (fifo, Open_WRONLY or Open_NONBLOCK);
  if fd < 0 then
    fatal ('Ошибка вызова open для fifo');
  (* Посылка сообщений *)
  for j := 1 to paramcount do
  begin
    if length(paramstr(j)) > MSGSIZ then
    begin
      writeln('Слишком длинное сообщение ', paramstr(j));
      continue;
    end;
    strpcopy(msgbuf, paramstr(j));
    nwrite := fdwrite (fd, msgbuf, MSGSIZ + 1);
    if nwrite = -1 then
      fatal ('Ошибка записи сообщения');
  end;
  halt(0);
end.
