質問

私はキューを作成しようとしているが、私は許可拒否エラーを取得しています。私は前にこのエラーを得たが、その後、私はエラーが鍵の作成にキャッチし、それが働いていたためにコードを追加しました。私はそれ以来、変更しただけの事は、私は別の関数に私のキュー作成コードを入れています。

:好きな私のコードのようになります。ここの何か
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作成:アクセス許可が拒否されました」です。任意のアイデア?

役に立ちましたか?

解決

ほとんどは、おそらくあなたはそれがまだ存在しているので、あなたはそれを再作成することはできませんので、今、それが正常に作成された1時にメッセージキューを破棄しませんでした。

あなたは、あなたがしているどのプラットフォーム示すものではありません。古典的には、あなたはもはや求められていIPCシステムを除去するために、種々のIPCシステム(共有メモリ、セマフォ、メッセージキュー)、およびipcsのステータスを取得するためにipcrmコマンドを使用すると思います。

他のヒント

あなたのエラーはEACCESなくEEXISTのようです。私のLinuxのmanページは述べています:

  

EACCES Aメッセージキューは、キーのために存在するが、呼び出し元プロセスはありません   キューにアクセスする権限を持っていない、と持っていません   CAP_IPC_OWNERケーパビリティます。

あなたはこれらの条件をチェックしましたか?

あなたはftokのためのパスとしてカレントディレクトリを使用しています。多分「を/ tmp」ではなく、あなたのホームフォルダにプレーンローカルファイルへの変更(NFS?)ます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top