SysFn60/ru

From KolibriOS wiki
Revision as of 15:44, 10 April 2010 by Kogemyaka (talk | contribs) (Created page with ''''Функция 60 - Inter Process Communication (IPC).''' IPC применяется для посылок сообщений от одного процесса/потока ...')
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Функция 60 - Inter Process Communication (IPC).

IPC применяется для посылок сообщений от одного процесса/потока другому. При этом следует предварительно договориться о том, как интерпретировать конкретное сообщение.

Подфункция 1 - установить область для получения IPC

Вызывается процессом-приёмником. Параметры:

 * eax = 60 - номер функции
 * ebx = 1 - номер подфункции
 * ecx = указатель на буфер
 * edx = размер буфера

Возвращаемое значение:

 * eax = 0 - всегда успешно

Формат IPC-буфера:

 * +0: dword: если здесь не 0, то буфер считается заблокированным;
   блокируйте/разблокируйте буфер, когда вы с ним активно работаете
   и вам надо, чтобы извне не изменялись данные буфера
   (не поступали новые сообщения)
 * +4: dword: занято места в буфере (в байтах)
 * +8: первое сообщение
 * +8+n: второе сообщение
 * ...

Формат сообщения:

 * +0: dword: PID процесса/потока, пославшего сообщение
 * +4: dword: длина сообщения (не считая этот заголовок)
 * +8: n*byte: данные сообщения

=== Подфункция 2 - послать сообщение IPC. ===- Вызывается процессом-инициатором. Параметры:

 * eax = 60 - номер функции
 * ebx = 2 - номер подфункции
 * ecx = PID приёмника
 * edx = указатель на данные сообщения
 * esi = длина сообщения (в байтах)

Возвращаемое значение:

 * eax = 0 - успешно
 * eax = 1 - приёмник не определил буфер для IPC-сообщений
   (может быть, ещё не успел, а может быть, это не тот поток,
   который нужен)
 * eax = 2 - приёмник заблокировал IPC-буфер;
   попробуйте немного подождать
 * eax = 3 - переполнение IPC-буфера приёмника
 * eax = 4 - процесса/потока с таким PID не существует

Замечания:

 * Система сразу после записи IPC-сообщения в буфер посылает
   потоку-приёмнику событие с кодом 7 (см. коды событий).