Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
Автор FAQ
 Аватар для Чистый
2733 / 1429 / 89
Регистрация: 08.09.2011
Сообщений: 3,746
Записей в блоге: 1

Очередь сообщений. Не могу поставить в очередь

23.05.2013, 23:40. Показов 2054. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
День добрый, стоит задача обмениваться данными между двумя процессами по средствам очереди сообщений, написал вот такой код:
C
1
2
3
4
5
6
7
8
9
10
11
#define B_S 125
#define MESSAGE_QUEUE "/msgQueue"
 
  struct mq_attr *attr = malloc(sizeof(attr));
                attr->mq_flags =0;
                attr->mq_maxmsg = 10;
                attr->mq_msgsize = B_S;
....
 
 mqd_t queue = mq_open(MESSAGE_QUEUE, O_CREAT, S_IRWXU, attr);
 int ppp = mq_send(queue, buffer, B_S,1);
но вот при попытке отправить получаю ошибку 9, не могу понять в чем проблема.... Подскажите где не прав
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.05.2013, 23:40
Ответы с готовыми решениями:

Очередь сообщений posix
как известно для создания новой очереди сообщений существует вызов mq_open(qmd_t *qds,o_flag,file_mode,struct mq_attr *attr) при этом...

Очередь сообщений
В очередь сообщений необходимо поместить сообщение, содержащее список файлов из текущего каталога. Как лучше всего извлечь эту инфу? Все,...

очередь сообщений
Помогите, пожалуйста, написать программу на Си. Клиент отправляет сообщения через сокеты или SysV (или POSIX) message queue, сервер...

4
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
24.05.2013, 01:15
9 — это EBADF. EBADF — это mq_send() передан невалидный дескриптор очереди. Гляньте errno после вызова mq_open(). Наверняка недозаполняли структурку attr (там целая куча правил в man mq_open).

Не по теме:

И зачем её в куче-то создавать?..

0
Автор FAQ
 Аватар для Чистый
2733 / 1429 / 89
Регистрация: 08.09.2011
Сообщений: 3,746
Записей в блоге: 1
24.05.2013, 01:19  [ТС]
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
9 — это EBADF. EBADF — это mq_send() передан невалидный дескриптор очереди. Гляньте errno после вызова mq_open(). Наверняка недозаполняли структурку attr (там целая куча правил в man mq_open).

Не по теме:

И зачем её в куче-то создавать?..

errno после открытия 0

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 struct mq_attr *attr = malloc(sizeof(attr));
                attr->mq_flags =0;
                attr->mq_maxmsg = 10;
                attr->mq_msgsize = B_S;
                mqd_t queue = mq_open(MESSAGE_QUEUE, O_CREAT, S_IRWXU|S_IRWXG, attr);
                switch(queue)
                {
                    case EACCES:
                    fprintf(stderr, "The message queue exists and the permissions specified by oflag are denied, or the message queue does not exist and permission to create the message queue is denied.");break;
                    case EEXIST:
                    fprintf(stderr, "O_CREAT and O_EXCL are set and the named message queue already exists.");break;
                    case EINTR:
                    fprintf(stderr, "The mq_open() function was interrupted by a signal.");break;
                    case EINVAL:
                    fprintf(stderr, "The mq_open() function is not supported for the given name.");
                    fprintf(stderr, "O_CREAT was specified in oflag, the value of attr is not NULL, and either mq_maxmsg or mq_msgsize was less than or equal to zero.");break;
                    case EMFILE:
                    fprintf(stderr, "Too many message queue descriptors or file descriptors are currently in use by this process.");break;
                    case ENAMETOOLONG:
                    fprintf(stderr," The length of the name argument exceeds {PATH_MAX} or a pathname component is longer than {NAME_MAX}.");break;
                    case ENFILE:
                    fprintf(stderr,   "Too many message queues are currently open in the system.");
                    case ENOENT:
                    fprintf(stderr,"O_CREAT is not set and the named message queue does not exist.");break;
                    case     ENOSPC:
                    fprintf(stderr,   " There is insufficient space for the creation of the new message queue.");break;
                    default:
                    fprintf(stderr, " %d  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n",errno);break;
                }
вывод:
0 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
0
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
24.05.2013, 01:21
errno. Это переменная такая. Глобальная. что mq_open возвращает -1, если у неё проблемы, но мало ли...

И, опять же:
EINVAL O_CREAT was specified in oflag, and attr was not NULL, but
attr->mq_maxmsg or attr->mq_msqsize was invalid. Both of
these fields must be greater than zero. In a process that is
unprivileged (does not have the CAP_SYS_RESOURCE capability),
attr->mq_maxmsg must be less than or equal to the msg_max
limit, and attr->mq_msgsize must be less than or equal to the
msgsize_max limit. In addition, even in a privileged process,
attr->mq_maxmsg cannot exceed the HARD_MAX limit. (See
mq_overview(7) for details of these limits.)
0
Автор FAQ
 Аватар для Чистый
2733 / 1429 / 89
Регистрация: 08.09.2011
Сообщений: 3,746
Записей в блоге: 1
24.05.2013, 01:49  [ТС]
переменная queue получает 5 а не -1

Добавлено через 25 минут
так я же заполняю эти атрибуты
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.05.2013, 01:49
Помогаю со студенческими работами здесь

Очередь сообщений
Здравствуйте. Изучаю межпроцессорное взаимодействие, наткнулся на проблему: имеются 3 программы, первая читает цифру с консоли, 2 или 3...

Потоки и очередь сообщений
Здравствуйте, форумчане. Есть необходимость в вашей помощи, натолкнуть на истину так сказать) В общем постановка задачи такая: есть...

Очередь сообщений mouse_event
LRESULT CALLBACK WndProc(HWND hwnd,UINT iMsg,WPARAM wParam,LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; static int ccc=0; ...

Очередь сообщений в сложной системе
Доброго времени! Нужно спроектировать достаточно сложную систему. У меня нет пока чёткой глобальной схемы. Надеюсь она появится в...

Очередь сообщений в отдельном потоке
В продолжение темы https://www.cyberforum.ru/csharp-net/thread811472.html Мне нужно работать с устройством COM-USB на низком уровне...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru