2012-01-27 11 views
1

Cでキューを作成しようとするmq_openに問題がありますが、次のエラーENOMEMが表示されます。私は、それらをリンク解除せずに多くのキューを作成しようとしている可能性があり、今では許可された数を超えていると感じています。これらのキューを表示して削除する方法はありますか?これは、アプリケーションが終了した後でも、後で作成しようとするすべての試行が失敗しても持続するようです。メッセージキューENOMEM

sprintf(idTmp->name, "/%08x%d", (uint32_t) idTmp, rand()); 
if ((idTmp->mq = mq_open(idTmp->name, O_CREAT, 0x666, NULL)) == -1) 
+0

'mq_close'を呼び出す何か*がありますか? – spraff

+0

私はしますが、ヒットする前にコードが失敗します。 – JohnB

+0

私の答えのように '/ dev/mqueue'をマウントしようとするとどうなりますか? – pilcrow

答えて

3

あなたが尋ねる:

方法の表示がありますし、論文キューを削除しますか?

これは簡単ではありません。通常の容疑者(ipcsipcrm)は、POSIX IPC(mq_open(...))ではなくSystem V IPC(msgget(...))用に設計されています。

mq_overview(7)マンページを確認してください - Linuxのバージョンによって、仮想ファイルシステム上にメッセージキューが作成される可能性があります。これは一般的な管理ツールで検査できます。そのファイルシステムは、マンページごとに次のように公開されています。

[root]# mkdir /dev/mqueue 
[root]# mount -t mqueue none /dev/mqueue 
... now ls and rm your way around ... 
+0

ありがとう、これが解決しました。正しいmq_openはipcsによって表示されません。私は/ dev/mqueueディレクトリを持っていませんでしたが、すべてのキューが一度作成されただけで、それは単なるケースであったり、エントリを削除していました。ありがとう – JohnB

関連する問題