kolibrios/programs/develop/libraries/framework/trunk/libIPC/ipc.txt
vkos 42f40b69fb 1) First commit of libIPC
2) Kobra (0.1.1) uses libIPC, compilation changed, files with non-kobra functions moved to framework



git-svn-id: svn://kolibrios.org@1286 a494cfbc-eb01-0410-851d-a64ba20cac60
2009-11-25 18:23:48 +00:00

59 lines
3.2 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

LibIPC -- библиотека межпотокового взаимодействия
=================================================
Интерфейс
---------
**LibIPC** будет предоставлять следующие функции:
int **IPCInit**\(void);
Инициализация IPC. При этом должна быть инициализирована куча для динамического
выделения памяти под буфер. Возвращает 0 = **SUCCESS** в случае удачи, в противном
случае код ошибки:
- **NO_MEMORY** (=1) -- невозможно получить память
- **CANNOT_SET_MASK** (=2) -- невозможно установить маску событий
- *n* + 2 -- системная функция завершилась с ошибкой *n*
int **IPCSend**\(int *tid*, void *\*message*, int *length*);
Послать сообщение. Если произошла системная ошибка 2 или 3, будут произведены
дополнительные попытки (не больше какой-то константы). В случае успеха
возвращает 0, коды ошибок:
- **IPC_NO_AREA** (=1) -- поток не определил область IPC
- **IPC_BUFFER_LOCKED** (=2) -- были ошибки 2 и 3, при последней попытке -- ошибка 2 (поток заблокировал буфер)
- **IPC_OVERFLOW** (=3) -- то же, что и 2, только последняя ошибка 3 (переполнение буфера)
- **IPC_NO_TID** (=4) -- единственная или последняя ошибка была 4, т.е. отсутствие потока с заданным TID
bool **IPCCheck**\(void);
Проверить, не пришло ли новое сообщение.
Message \*\ **IPCGetNextMessage**\(void);
Получить следующее сообщение. То же самое, что **IPCWaitMessage**\(0).
Message \*\ **IPCWaitMessage**\(int *time*);
Ждать сообщения не больше time миллисекунд (-1 = ждать вечно). При этом
сообщение удаляется из буфера и копируется в динамически выделяемую область
памяти. Если сообщения нет (или произошла ошибка выделения памяти),
возвращается **NULL**, если есть -- адрес на структуру Message::
typedef struct Message {
int tid;
int length;
//void msg;
} Message;
void **IPCLock**\(void);
Функция ручной блокировки буфера (в большинстве случаев не нужна, т.к.
библиотека сама блокирует буфер в нужных случаях).
void **IPCUnclock**\(void);
Функция, обратная **IPCLock**\();
Форма реализации
----------------
- Язык: **C**
- Формат: .o -- поддержка C, asm и т.д. Динамичность библиотеки в данном случае бессмысленна.