-3

I wanna create a message queue but getting an error in id creation.Can someone provide me a better solution for msgget to create id.

 msgid=msgget((key_t)1234,0666 | IPC_CREAT);

I'm getting msgid==-1

  #include<stdio.h>
    #include<stdlib.h>
    #include<sys/ipc.h>
    #include<sys/msg.h>
    struct msg_buf{
        long msg_type;
        char msg_txt[100];
    }message;

    int main()
    {
        //key_t key;
        int msgid;
        //key=ftok("progfile",65);
        msgid=msgget((key_t)1234,0666 | IPC_CREAT);
        if(msgid==-1)
        {
            printf("[-]Error in creating id:\n");
            exit(1);
        }
        printf("[+]MSGID created:\n");
        message.msg_type=1;
        printf("Write data:");
        scanf("%s",message.msg_txt);
        if(msgsnd(msgid,&message,sizeof(message),0)==-1)
        {
            printf("[-]Error while semnding message:\n");
            exit(1);
        }
        printf("Data send is: %s \n",message.msg_txt);
        return 0;
    }

Output:

root@DESKTOP-UFTQBQ8:/mnt/c/Users/BRAHMA JAISWAL/Desktop# ./b
[-]Error in id creation:   
Brahma
  • 58
  • 8

1 Answers1

0

I wanna create a message queue but getting an error in id creation ? I don't see any error in your code in creation of message queue part. Once delete the message queue by ipcrm -q id & again run your code.

Alternatively you can use POSIX IPC mq_open, mq_send, mq_receive as all POSIX IPC are thread safe. From the manual page of mq_open

mq_open() creates a new POSIX message queue or opens an existing queue. The queue is identified by name. For details of the construction of name, see mq_overview(7).

Sample code

int main(void) {
        mqd_t fd;
        char buf[30];

        printf("\nEnter message you wanna send :\n");
        fgets(buf,sizeof(buf),stdin);
        fd = mq_open("/my_mq",O_RDWR|O_CREAT,0777,NULL);
        if(fd == -1){
                perror("mq_open");
                exit(0);
        }
        if(mq_send(fd,buf,sizeof(buf),0) == -1){
                perror("mq_send");
                exit(0);
        }
        return 0;
}

Read this difference between msgget() and mq_open and System V IPC vs POSIX IPC

Achal
  • 11,821
  • 2
  • 15
  • 37