Вход/Регистрация
Основы программирования в Linux
вернуться

Мэтью Нейл

Шрифт:

#endif

 if (msgrcv(cli_qid, (void *)&my_msg, sizeof(*rec_ptr), getpid, 0) == -1) {

return(0);

 }

 *rec_ptr = my_msg.real_message;

 return(1);

}

5. Для сохранения совместимости с файлом pipe_imp.c необходимо объявить четыре дополнительные функции. Но в вашей программе они будут пустыми. Операции, которые они реализовывали в случае применения каналов, больше не нужны.

int start_resp_to_client(const message_db_t mess_to_send) {

 return(1);

}

void end_resp_to_client(void) {}

int start_resp_from_server(void) {

 return(1);

}

void end_resp_from_server(void) {}

Теперь вы можете просто запустить сервер, выполняющий в фоновом режиме реальное сохранение и извлечение данных, и затем выполнить клиентское приложение для подключения к серверу с помощью сообщений.

Все, что вы должны сделать, — это заменить интерфейсные функции из главы 11 другой реализацией, применяющей очереди сообщений. Преобразование приложения для использования очередей сообщений показывает мощь этого средства IPC, т.к. вам требуется меньше функций, чем в случае применения каналов, и даже эти необходимые функции гораздо проще, чем в предыдущей версии приложения.

Команды состояния IPC

Несмотря на то, что для соответствия требованиям X/Open этого не требуется, большинство систем Linux предоставляет набор команд, обеспечивающих доступ к данным IPC в режиме командной строки и удаление потерянных средств IPC. Существуют команды

ipcs
и
ipcrm
, очень полезные при разработке программ.

Один из досадных недостатков средств IPC состоит в том, что плохо написанная программа или программа, по какой-либо причине завершившаяся аварийно, может оставить свои ресурсы IPC (например, данные в очереди сообщений) еще долго блуждающими в системе без определенной цели после завершения программы. Такое поведение может привести к аварийному завершению нового запуска программы, поскольку она рассчитывает начать выполнение в очищенной системе, а на самом деле находит эти блуждающие ресурсы. Команды состояния (

ipcs
) и удаления (
ipcrm
) позволяют проверить систему и очистить ее от ненужных средств IPC.

Отображение состояния семафора

Для проверки состояния семафоров в системе примените команду

ipcs -s
. Если какие-то семафоры присутствуют, вывод команды будет выглядеть следующим образом:

$ ipcs -s

– ----- Semaphore Arrays ------

key semid owner perms nsems

0x4d00df1a 768 rick 666 1

Для удаления семафоров, случайно оставленных программами, вы можете использовать команду

ipcrm
. Для удаления только что отображенного семафора примените (в Linux) следующую команду:

$ ipcrm -s 768

В некоторых более старых системах Linux используется несколько иной синтаксис команды:

$ ipcrm sem 768

Но этот устаревший стиль редко встречается в наше время. Формат, подходящий для вашей конкретной системы, ищите на страницах интерактивного справочного руководства.

Отображение состояния совместно используемой памяти

Многие системы предоставляют программы режима командной строки для доступа не только к сведениям о семафорах, но и к подробным данным совместно используемой памяти. К ним относятся команды

ipcs -m
и
ipcrm -m <id>
(или
ipcrm shm <id>
).

Далее приведен пример вывода команды

ipcs -m
:

$ ipcs -m

– ----- Shared Memory Segments ------

key shmid owner perms bytes nattch status

0x00000000 384 rick 666 4096 2 dest

Здесь показан единственный сегмент совместно используемой памяти объемом 4 Кбайт, присоединенный к двум процессам.

Команда

ipcrm -m <id>
позволяет удалить совместно используемую память. Она бывает полезной, когда программа завершается аварийно при попытке убрать такую память.

Отображение состояния очереди сообщений

Для очередей сообщений предназначены команды

ipcs -q
и
ipcrm -q <id
> (или
ipcrm msg <id>
).

Далее приведен пример вывода команды

ipcs -q
:

$ ipcs -q

– ----- Message Queues ------

key msqid owner perms used-bytes messages

0x000004d2 3384 rick 666 2048 2

  • Читать дальше
  • 1
  • ...
  • 319
  • 320
  • 321
  • 322
  • 323
  • 324
  • 325
  • 326
  • 327
  • 328
  • 329
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: