LINUX.ORG.RU

проблеммы сиспользованием очереди сообщений


0

0

создаю очередь сообщений а потом пытаюсь в нее записать и считать данные? если все это запускать под рутом то все работает если под пользователем то очередь создается но использовать ее не получается

//создание очереди
int n_msqid_out=201;
int msqid_out;
int opperm;
int msgflg;

opperm=666;
msgflg = (opperm | IPC_CREAT | IPC_EXCL);
msqid_out = msgget (n_msqid_out, opperm | IPC_CREAT);


//чтение параметров
if(msgctl(msqid_out,IPC_STAT,&stat_buf_out)<0)
{perror("msgctl failed");
exit(1);}

//чтение
msgrcv(msqid_out,&message_b,100,0,IPC_NOWAIT);
//отправка
msgsnd (msqid_out, &message_b ,msgsize,IPC_NOWAIT);


>opperm=666;

это неправильно: преобразуй 666 с основания 8 в десятичную систему

>msgflg = (opperm | IPC_CREAT | IPC_EXCL); >msqid_out = msgget (n_msqid_out, opperm | IPC_CREAT);

похоже что здесь тоже не всё в порядке но до конца не вник.

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

Права на операции Восьмеричное значение
Чтение для владельца 0400
Запись для владельца 0200
Чтение для группы 0040
Запись для группы 0020
Чтение для остальных 0004
Запись для остальных 0002

В каждом конкретном случае нужная комбинация прав задается как результат побитного ИЛИ значений, соответствующих элементарным правам.

msqid = msgget (key, (IPC_CREAT | 0644));

http://skif.bas-net.by/bsuir/base/node214.html

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

я о томже только вы в своей программе вместо восьмеричных 0666 указали десятичные 666 откудова и полезла часть граблей

cvv ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.