• ベストアンサー

排他処理について

http://www.tryhp.net/lock.htm このサイトの排他処理を参考に組んでいるのですが、 「7.完成」のソース、「#ロックされていなければロックする」以降に出てくる$tmpfileについての質問です。 この変数$tmpfileにはテンポラリ用にこちらで用意したファイル名が入っているということでしょうか? リネームするのであれば rename($tmp_dummy,$datafile); かなと考えていたのですが…。 ソース上部でも$tmpfileのテンポラリを作成していないので不思議です。 意図が読めずに困っております。お知恵を拝借したいと思います。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

ご推察のとおり、$tmpfile には全プロセスで共通になる名前が どこかで設定されているのでしょう。 > ソース上部でも$tmpfileのテンポラリを作成していないので不思議です。 作ってますよ。 .7でいうなら if (link($tmp_dummy,$tmpfile) == 1) { この link で作ってます。 より正確には、$tmp_dummyの中身を共有する $tmpfile という名前でアクセスできるように リンクを作成している。のですが。 > リネームするのであれば > rename($tmp_dummy,$datafile); 上述のとおり、$tmp_dummyと $tmpfileの実体は同じです。 ここで$tmp_dummyを使って renameしようとすると、 このrename を囲む foreach を renameして抜けたときに $tmp_dummyという名前のファイルがなくなってしまうので > unlink $tmp_dummy; #プロセステンポラリーを削除する ここでちょっと引っかかります。 なので > rename($tmpfile,$datafile); $tmpfileからrenameしているというわけです。

その他の回答 (1)

  • bgbg
  • ベストアンサー率53% (94/175)
回答No.1

$tmpfileはロックの有無を判定するためだけのファイルなので、他のファイルと名前がかぶらなければどんな名前でもいいです。

関連するQ&A