0

この呼び出しは、Solaris で EACCES を使用して一般ユーザーとして実行すると失敗します。

sem_open(fileName.c_str(), O_CREAT, S_IRWXU | S_IRWXG | S_IRWXO, 1);

プロセスがルートとして開始されると、正常に実行されます。これは予想される動作ですか?

環境:

$ uname -a
SunOS solaris 5.11 11.0 i86pc i386 i86pc

$ g++ --version
g++ (GCC) 4.5.2
4

1 に答える 1

1

コマンドラインで次を試してください:

prctl $$

これらは、システムが強制するプロセスのリソース制限です。あることに注意してください

process.max-sem-ops
process.max-sem-nsems
project.max-sem-ids

これらは数のある制限です。表示されない場合 (または制限に既に達している場合) は、アカウントのプロファイルにそれらを追加するprojaddprojmod、プロジェクトが既に存在する場合はそれらを増やす必要があります。

これができない場合 (root アクセスがない場合) は、システム管理者に相談してください。おそらく、セマパホア アクセスを許可しない何らかの理由があります。

慎重に注意してください:

セマフォはカーネル永続的です。コードを何度も実行した場合、作成したセマフォはまだそこにある可能性があります。

既存のセマフォを見るにはipcs -as

コードで削除する必要がある長引くセマフォを削除するには、次を使用しますipcrm

于 2013-06-17T13:41:16.460 に答える