- ベストアンサー
perlのmkdirについて
perlのmkdir関数の第2引数に[MODE]というものがあるのですが、ファイルロックに使うMODEは、何が一番いいのでしょうか? それから、MODEには、どういう種類があるのでしょうか? 初心者で、今perlでカウンターを作っているのですが、このMODEで、つまづいています。どなたか、詳しく教えてもらえませんでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
mkdir に関わらずパーミッションは単なる数値なので、特に決まった桁数はありません。 よく使われる「0755」などの指定方法は、パーミッションを8進数で表記しただけのことであり、Perl を含む多くの言語ではそのまま使うことができます。 汎用的なロックということで mkdir を使われているようですが、rename を使うとより堅固なロックを実装できるようです。 詳しくは参考URLをご覧ください。 また、カウンターファイルにカウント数以外を記録しないのであれば、ファイル名自体にカウント数を含め、rename でカウントを増やす、という方法もあります。 この方法はロックが不要というメリットがあり、上記の rename ロックと同程度のコストで実装できます。 参考までに。
その他の回答 (2)
- ikspiari
- ベストアンサー率48% (29/60)
汎用性と実用性の問題は難しいですね。 汎用性があってもディレクトリを作る速度が遅くては排他制御の意味がありませんから。 # これはもちろんサーバのスペックにも依存しますが。 汎用性の実装という意味では、いろいろな手段を選択できるようにした方がいいと思います。 関係ない回答ですみません...。
お礼
お礼が遅くなってすみません。関係のない回答ではありません。確かにいろいろなCGIでのファイルロックは、複数のロック機能をつけていますね。mkdir関数だけにこだわらずに複数のロック機能をつけたほうがよさそうですね。回答とアドバイスの両方を頂きありがとうございました。これからもちょくちょく質問を載せると思いますが、そのときにはまた回答をよろしくお願いいたします。
- ikspiari
- ベストアンサー率48% (29/60)
パーミションですね。 ファイルロックはsymlinkとかflock使った方がよくないですか?
お礼
ご回答ありがとうございます。mkdir関数のMODEは、パーミッションだったのですね。でも、パーミッションだとすると、確かmkdir関数のMODEは4桁ですよね?これは、16進数に変換してから書くのでしょうか?それとも、パーミッションの数値をそのまま書けばいいのでしょうか? それから、ファイルロックではmkdir関数の方が汎用性の高いファイルロックになるとどこかのHPに書いてありましたので今は、mkdir関数にこだわっています。
お礼
御礼が遅くなってすみません。参考URLを見させて頂きました。renameというと、どうしてもMS-DOSの概念が頭の中を固めてしまって解読するのに一苦労でした。まだ完全には解読できてはいないのですが、やはりまだ長所新車のようですねf(^^;これからもたびたび質問を載せると思いますが、その時はまた回答のほうをよろしくお願いいたします。