LINUX.ORG.RU

ftok+msgget


0

0

Пытаюсь сгенерировать ключ c пом. ftok и создать очередь сообщений

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

int main() {

int msgid; char *pathname="./key"; char proj='a'; int key=ftok(pathname,proj); msgid = msgget(key,0777);

printf("%d",msgid );

return 0; }

Печатает -1. Т. е. очередь не создана. Почему ?

Re: ftok+msgget

А файл ./key существует?

Die-Hard ★★★★★ ()
Ответ на: Re: ftok+msgget от Die-Hard

Re: ftok+msgget

Господа гуру ! Хватит издеваться над новичками :) Я может и не очень опытен но не на столько. Если я допиликал до программирования с IPC неужели я не посмотрю есть ли такой файл ?

constant_arapov ()

Re: ftok+msgget

> Печатает -1. Т. е. очередь не создана. Почему ?

ответ - вполне возможно - лежит в errno.

> Если я допиликал до программирования с IPC неужели я
> не посмотрю есть ли такой файл ?

да запросто. люди (и я в том числе) делают гораздо
более глупые ошибки, допиликивая ло гораздо более
нетривиальных вещей.

idle ★★★★★ ()
Ответ на: Re: ftok+msgget от idle

Re: ftok+msgget

пожалуй, сначала стоит errno для ftok посмотреть. здесь более часто ошибки возникают

ananas ★★★★★ ()
Ответ на: Re: ftok+msgget от ananas

Re: ftok+msgget

printf(strerror(errno))

(для fork) выдает что No such file or directory. Но он есть !!!!! Я пробовал и абсолютный путь к файлу и другие заведомо СУЩЕСТВУЮЩИЕ файлы в качестве pathname. Пробовал самые разные варианты. Дохло...

constant_arapov ()

Re: ftok+msgget

man msgget

чуть внимательнее читать абзацы содержащие описание флагов IPC_*

lb ()
Ответ на: Re: ftok+msgget от constant_arapov

Re: ftok+msgget

(victor@pts/1)~ $> cat t.c                                                             [sh]
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>

#include <stdio.h>

int main ()
{
  key_t k;
  int m;

  if ((k = ftok ("./", 1)) == -1)
        {
          perror ("ftok");
          return 1;
        }

  if ((m = msgget (k, IPC_CREAT)) == -1)
        {
          perror ("msgget");
          return 1;
        }

  printf ("Message Id - %d\n", m);
  sleep (10);
  msgctl (m, IPC_RMID, NULL);

  return 0;
}
(victor@pts/1)~ $> gcc t.c                                                             [sh]
(victor@pts/1)~ $> ./a.out                                                              [sh]
Message Id - 32768
(victor@pts/1)~ $> ./a.out                                                              [sh]
Message Id - 65536
(victor@pts/1)~ $>                                                                       [sh]

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