私はC++プロジェクト用のセマフォ配列を作る必要があります。私はsemget()
をmain()
から呼び出していません。 main.cpp
のメソッドでも、簡単にするための別の方法があります。プログラムがsemget(semkey,nsems,0666|IPC_CREAT)
に達すると、明らかに "key
のセマフォー識別子が存在しますが、semflg
の下位9ビットで指定された操作許可は与えられません"という意味のEACCES errnoで-1を返します。セマフォを*作成*するときにsemget()がEACCESエラーを引き起こすのはなぜですか?
GDBでコードを繰り返し実行しました。 semget()
の3つのパラメータはすべて正しく見えますが、これはプログラムがsemget()
を呼び出す最初のポイントなので、セマフォはすでに存在しません。私は確かにipcs -s
を実行しました。私は#include <sys/sem.h>
をmain.cpp
の先頭に持っています。
ここでは何が起こっていますか?私は既に共有メモリセグメントを作成して接続しました。これはそれと関係がありますか?どのように私は見ることができません。マニュアルから
それが正しく再起動後初めて動作しますか? –
私は試していません。それはそれに影響します。どうして? –
さて、 'ipcs'でクリーンアップするのはやったはずですが、システムをリブートすると残っている共有リソース(セマフォ、共有メモリなど)はきれいにクリーンアップされます。 –