Автор FAQ
 Аватар для Чистый
2733 / 1429 / 89
Регистрация: 08.09.2011
Сообщений: 3,746
Записей в блоге: 1

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

23.05.2013, 23:40. Показов 2056. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Автозаполнение реквизита Организации (тип Справочник. Организации): Если НЕ. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
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
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru