| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Программирование под Unix/Linux > msgsnd Invalid argument |
| Автор: Anark1 17.12.2009, 14:06 | ||
| Здравствуйте, имеется две программы - клиент и сервер, подзадача - отправка клиентом сообщений серверу, при попытке отправки получаю ошибку 22 Invalid argument код клиента ниже, соединение с очередью корректно. Также стоит заметить что пишу под XP с Cygwin.
Вообще в man'e написана другая структура, но я так понимаю главное - наличие типа long в начале структуры. Константа MSG_FIRST описана в заголовке. Как только не менял структуру сообщения - никак. Подскажите что делаю не так. |
| Автор: bsa 17.12.2009, 17:23 |
| Я не знаю, что за MSG_FIRST ты используешь (у меня ни в одном стандартном хидере такого нет), может он отрицательный? Попробуй вместо него использовать что-то заведомо положительное. |
| Автор: GrayCardinal 17.12.2009, 19:15 | ||
Вы тут явно не правы |
| Автор: svlary 18.12.2009, 06:48 | ||||||
В данном случае НЕ правы все-таки Вы. И ф-ция msgsnd и функция msgrcv вторым параметром (буфер сообщения) имеют void *msgbuf. Единственное, что требуют соглашения System V - что бы в начале этого буфера было место под long mtype.
Глядя на Ваш исходный код, могу предположить, что единственный аргумент, который может быть НЕправильным (т.е. может иметь НЕправильное значение!) - это msid вот тут :
И сразу вопрос - а Вы проверяете его значение ? В смысле, после вызова
Анализируете результат ? Здесь Вы не пытаетесь создать очередь. Значит - она уже должна существовать. А что говорит команда "ipcs -q" ? |