[PHP-dev 1394] Re: [PHP-doc 708] Re: flock について

SHIMOOKA Hideyuki shimooka @ doyouphp.jp
2008年 4月 30日 (水) 13:56:53 JST


下岡です。

#マルチポストすみません。。。

---- TAKAGI Masahiroさん曰く...

>>  英語版では上のように読めます。ですが、関数の説明で
>>
>>  bool flock ( resource $handle , int $operation [, int &$wouldblock ] )
>>
>>  とあるように返り値は、int(1) でしたが、表現としては TRUE で合っている
>>  のでしょうか。

PHP5.2.5のext/standard/file.cを見てみる限り、戻り値はboolとして
定義されているようです。実際の戻り値もRETURN_TRUE、RETURN_FALSEが
使われていますね。


>>  また、第3引数に int(1) が返るのは、LOCK_NB を指示してロックしようと
>>  したら、既に(誰かから)ロックされていた場合だけなんでしょうか?
>>  NFS や、FAT16 な環境が無いのでこれらは未確認ですが、手元の
>>  Vine4.2 php5.2.5 ではそんな感じですけど。
>>  (ご存知の方がいらっしゃいましたら教えていただけませんでしょうか)
>>
>このへんは後でソースを見てみないと判断できないのですが、だれかご存知の方
>はいらっしゃいますかねぇ?

この辺

 http://www.linux.or.jp/JM/html/LDP_man-pages/man2/flock.2.html

の話だと思いますが、実装上で$wouldblockに1がセットされるのは、ext/standard/file.c
の350行目付近にある

    if (operation && errno == EWOULDBLOCK && arg3 && PZVAL_IS_REF(arg3)) {
        Z_LVAL_P(arg3) = 1;
    }

の部分です。EWOULDBLOCKが返されるのは

 「指定したファイルがロックされており、 LOCK_NB フラグが指定されている」

なので、多分大西さんの仰る通りじゃないかと思います。

-- 
SHIMOOKA Hideyuki


PHP-dev メーリングリストの案内