Программа 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. Стирание сообщений с заданным уровнем приоритета.