LINUX.ORG.RU

Создание/удаление очереди сообщений

 


0

1

Изучаю IPC. Разбираю простенький пример клиент/серверного приложения из Робачевского. Сервер создает очередь, клиент подключается и записывает в неё сообщение, сервер читает, после чего клиент удаляет очередь сообщение. Так вот проблема в том, что пример работает только 1 раз. Т.е. при запуске во второй раз получаю ошибку на сервере при попытке считать сообщение получаю «Identifier removed». Хотя никаких ошибок при создании очереди сообщений не было. Такое чувство, что msgctl(msgid,IPC_RMID,0) удаляет с корнями, так что нормально создать очередь заново нельзя (Только перезагрузка). Что я не так делаю? Собственно код,сервер: http://pastebin.com/M9WWtPTs клиент: http://pastebin.com/pmEUWSvt

★★★

а нахрена ты ее удаляешь в клиенте-то? кто создал, тот пусть у удаляет. а дело клиента - послать сообщение, а не умничать с не им созданными ipc

ananas ★★★★★
()
Ответ на: комментарий от ananas

Я ж сказал - это пример из Робачевского, так что по логике должен работать.

LIKAN ★★★
() автор топика
Ответ на: комментарий от ananas

То же самое происходит, даже если перенести удаление на сервер.

LIKAN ★★★
() автор топика

Это пример 1 в 1 из книжки или вы его «оптимизировали»? Операция присваивания имеет более низкий приоритет, чем операции сравнения. В смысле, что у вас в операторах if() в переменные key и msgid заносится результат операции сравнения (0 или 1).

mky ★★★★★
()
Последнее исправление: mky (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.