سؤال

أحاول إنشاء قائمة انتظار ، لكنني أحصل على خطأ تم رفضه. لقد حصلت على هذا الخطأ من قبل ، ولكن بعد ذلك أضفت رمزًا للخطأ في إنشاء إنشاء المفاتيح وكان يعمل. الشيء الوحيد الذي قمت بتغييره منذ ذلك الحين هو وضع رمز إنشاء قائمة الانتظار في وظيفة منفصلة. هذا شيء مثل ما يبدو عليه رمزتي:

key_t key1;
int msqid1;

int main(int arc, char *argv[])
{
        getKeys();            
        queueCreate();         
}

void getKeys()                  
{
        if ((key1 = ftok(".", '1')) == -1)  
        {
                perror("key1 creation");
                exit(1);
        }
}

void queueCreate()
{
        if ((msqid1 = msgget(key1, 0666 | IPC_CREAT)) == -1)
        {
                perror("msqid1 creation");
                exit(1);
        }
}

الخطأ الذي تم إلقاؤه هو "إنشاء MSQID1: تم رفض الإذن". أيه أفكار؟

هل كانت مفيدة؟

المحلول

على الأرجح أنك لم تدمر قائمة انتظار الرسائل في المناسبة التي تم إنشاؤها بنجاح ، لذا لا يمكنك الآن إعادة إنشائها لأنها لا تزال موجودة.

أنت لا تشير إلى النظام الأساسي الذي أنت عليه. كلاسيكيا ، كنت تستخدم ipcs أمر للحصول على حالة أنظمة IPC المختلفة (الذاكرة المشتركة ، والرملة ، وقوائم الرسائل) ، و ipcrm لإزالة أنظمة IPC التي لم تعد مطلوبة.

نصائح أخرى

يبدو أن خطأك EACCES و لا EEXIST. تقول صفحة Linux Man:

eacces توجد قائمة انتظار رسالة للمفتاح ، لكن عملية الاتصال لا تحتوي على إذن للوصول إلى قائمة الانتظار ، وليس لديها قدرة CAP_IPC_ONNER.

هل قمت بالتحقق من هذه الشروط؟

أنت تستخدم الدليل الحالي كمسار ل ftok. ربما تتغير إلى ملف محلي عادي في "/TMP" وليس في مجلد منزلك (NFS؟).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top