Системное программирование в UNIX средствами Free Pascal

Программа stest


(* Программа stest - простой сервер для очереди *)

uses ipc,linux,stdio,sysutils;

{$i q.inc}

function proc_obj (msg:pq_entry):integer;

begin

  writeln(#$a'Приоритет: ',msg^.mtype,' имя: ',msg^.mtext);

end;

var

  pid:longint;

begin

  pid := fork;

  case pid of

    0:                (* дочерний процесс *)



      serve;

    -1:                 (* сервер не существует *)

      warn ('Не удалось запустить сервер');

    else

      writeln('Серверный процесс с идентификатором ', pid);

  end;

  if pid <> -1 then

    halt (0)

  else

    halt (1);

end.

Ниже следует пример использования этих двух простых программ. Перед запуском программы stest в очередь вводятся четыре простых сообщения при помощи программы etest. Обратите внимание на порядок, в котором выводятся сообщения:

$ etest objname1 3

$ etest objname2 4

$ etest objname3 1

$ etest objname4 9

$ stest

Серверный процесс с идентификатором 2545

$

Приоритет 1 имя objname3

Приоритет 3 имя objname1

Приоритет 4 имя objname2

Приоритет 9 имя objname4

Упражнение 8.3. Измените процедуры enter и serve так, чтобы можно было посылать серверу управляющие сообщения. Зарезервируйте для таких сообщений единичный тип сообщения (как это повлияет на расстановку приоритетов?). Реализуйте следующие возможности:

1. Остановка сервера.

2. Стирание всех сообщений из очереди.

3. Стирание сообщений с заданным уровнем приоритета.



Содержание раздела