मैं एक संदेश कतार बनाने की कोशिश कर रहा हूं और फिर उसे एक संदेश भेज रहा हूं। मैंने जो कोशिश की है वह यहां है:

int main(){
    int myMsgQueue;
    struct msgStruct{
        long mtype;
        char mtext[LENGTH];
    };
    struct msgStruct myMsg; 
    myMsg.mtype = (long)getpid();
    strcpy(myMsg.mtext,"Hey there"); //Setting the string of the message

    if((myMsgQueue = msgget(IPC_PRIVATE,IPC_CREAT | IPC_EXCL)) == -1) //Creating the message queue
        errore(__LINE__);
    if(msgsnd(myMsgQueue,&myMsg,sizeof(myMsg) - sizeof(long),0) == -1) //Sending the message
        errore(__LINE__);
    if(msgctl(myMsgQueue,IPC_RMID,0) == -1) //Deleting the message queue
        errore(__LINE__);
}

फ़ंक्शन errore बस एक स्ट्रिंग को प्रिंट करता है जो strerror(errno) का उपयोग करके त्रुटि की व्याख्या करता है।
हालांकि, कोड काम नहीं कर रहा है: गलत msgsnd रिटर्न -1 के रूप में "अनुमति अस्वीकृत" प्रिंट करता है।
मैं यह नहीं समझ सकता कि समस्या क्या है: मैं संदेश कतार और एक पर्याप्त संदेश संरचना शुरू कर रहा हूं, फिर प्रक्रिया के अनुरूप एक प्रकार का संदेश बना रहा हूं और "अरे वहां" से संबंधित पाठ का संदेश भेज रहा हूं, फिर संदेश भेज रहा हूं।
मुझे किसकी याद आ रही है?

2
Stubborn 18 नवम्बर 2018, 23:13

1 उत्तर

सबसे बढ़िया उत्तर

मैन पेज पढ़ें मैन पेज

तर्क कुंजी के लिए एक संदेश कतार पहचानकर्ता मौजूद है, लेकिन msgflg के निम्न-क्रम 9 बिट्स द्वारा निर्दिष्ट संचालन अनुमति प्रदान नहीं की जाएगी;

1
amin saffar 18 नवम्बर 2018, 20:30