#include <mqueue.h> // определена стуктура mq_attr
#include <errno.h>
mqd_t mqd;
char qname[32] = “/msgq.0”;
struct mq_attr attr;
attr.mq_maxmsg = 256; // кол-во сообщений в очереди
attr.mq_msgsize = 5; // длина сообщения
// по умолчанию mq_maxmsg = 10, mq_msgsize = 8192
// параметры по умолчанию не подходят!
if ( mqd = mq_open(qname, O_CREAT | O_RDWR, 0644, &attr) == –1 ){
perror ("MQ_OPEN");
}
Результат работы : MQ_OPEN: Bad file descriptor
Тоже самое, но без атрибутов, никаких ошибок не выдает
if ( mqd = mq_open(qname, O_CREAT | O_RDWR, 0644, 0) == –1 ){
perror ("MQ_OPEN");
}
Есть подозрение на то, что у процесса нет прав, так как не под root-ом запускается прога. Попробовали запустить под root-ом все получилось. Вопрос: можно ли изменять непривелигированным пользователям атрибуты очереди ?
м... может быть что-то можно сделать ?
что-нить типа dev.rtc.max-user-freq только для интересующего параметра? Если нет - запускать процесс от root, устанавливать нужные параметры и сбрасывать привелегии с помощь setuid
Опыт растет прямо пропорционально выведенному из строя оборудованию
afaik без предварительных попущений со стороны root-а или свистелок типа suid и sudo - нет. Предложу man capabilities - way (linuxcaps имхо то что надо по сабжу).