0

キューを作成しようとしていますが、許可が拒否されたというエラーが発生します。以前にこのエラーが発生しましたが、キーの作成時にエラーをキャッチするためのコードを追加したところ、機能していました。それ以来、私が変更した唯一のことは、キュー作成コードを別の関数に入れたことです。私のコードは次のようになります。

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 の作成: 権限が拒否されました」です。何か案は?

4

2 に答える 2

3

メッセージキューが正常に作成されたときにメッセージキューを破棄しなかった可能性が高いため、メッセージキューはまだ存在しているため、再作成できません。

使用しているプラ​​ットフォームを指定する必要はありません。従来は、このコマンドを使用してipcs、さまざまなIPCシステム(共有メモリ、セマフォ、およびメッセージキュー)のステータスを取得し、ipcrm不要になったIPCシステムを削除していました。

于 2010-11-19T06:17:15.420 に答える
0

あなたのエラーはEACCESではないようEEXISTです。私のLinuxのマニュアルページには次のように書かれています:

EACCES キーのメッセージ キューが存在しますが、呼び出しプロセスにはキューにアクセスする権限がなく、CAP_IPC_OWNER 機能がありません。

これらの条件を確認しましたか?

現在のディレクトリを のパスとして使用していますftok。ホームフォルダーではなく、「/ tmp」のプレーンローカルファイルに変更する場合があります(nfs?)。

于 2010-11-19T07:25:17.610 に答える