LINUX.ORG.RU

очереди сообщений ipcs premission denied


0

0

Программа должна принимать ipcs сообщения.
Ниже представлен участок кода, отвечающий
за создание новой очереди с пом. msgget
и принятие сообщения с пом. msgrcv


#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>

#include <errno.h>


struct msgform
{
long mtype;
char mtext[10];


}msg,msg2;



int msgid;
int main()
{



int i,pid,*pint;







key_t key=ftok("./msg_server.c",1);
msgid=msgget(key,IPC_CREAT );
//printf(strerror(errno));
printf("msgid= %d\n",msgid);




{

int rcv_id=msgrcv(msgid,&msg,sizeof(msg.mtext),1,0);
printf(strerror(errno));
printf("\nrcv_id=%d\n",rcv_id);




char cmd[50];




strcpy(cmd,"echo");

strcat(cmd," ");

strcat(cmd,msg.mtext);
system(cmd);









}





return 0;
}


}

Когда прога выполняется под root, все работает так как надо.
Когда же я выполняю прогу под дкугим пользователем (lamer),
прога выдает результат.

msgid= 98307
Permission denied
rcv_id=-1


Т.е. как я понял создает очередь, но не читает из нее.
Комманда ipcs выполненная под root выдает:

----- Message Queues --------
key msqid owner perms used-bytes messages
0x0105cd28 0 root 644 0 0
0x0105cd17 32769 root 0 0 0
0x0105cd33 65538 lamer 0 0 0
0x0105cd29 98307 lamer 0 0 0

А если выполнить ipcs под lamer:

key msqid owner perms used-bytes messages
0x0105cd28 0 root 644 0 0

В общем, как я понял на очереди сообщения налагаются определенные права доступа. Но ведь lamer создал сообщение ! Он его владелец !
Почему он не может получать елементы очереди ? Что нужно сделать, чтобы lamer мог получать их ?
Объяаните мне люди умные, плиз.






Ответ на: комментарий от ananas

Еще раз снимаю шляпу перед ANANAS-ом ! Заработало. Считаю, что администрация занижает его проффесионализм наличием только лишь двух звездочек.

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

ananas ** (Score: 298 MaxScore: 298) (*) (25.05.2005 19:18:56)

:) ещё чуть-чуть

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