BugTrack/2166
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
* [flock] バッファ操作関連のまとめ [#rcf7f135]
- ページ: [[BugTrack2]]
- 投稿者: [[henoheno]]
- 優先順位: 普通
- 状態: 着手
- カテゴリー: 本体バグ
- 投稿日: 2006-03-20 (月) 00:02:44
- バージョン:
#contents
** メッセージ [#j4ad2ce5]
flock()周辺のバッファ操作(バッファのon/off、フラッシュ等)...
*** 参考文献: set_file_buffer() [#j8545212]
- ソース: ext/standard/file.c
PukiWiki 1.4.x は少なくともPHP4.1.2以降ターゲットにしてい...
- PHPマニュアル: [[set_file_buffer()>PHPfunc:set_file_bu...
- PHPマニュアル: [[stream_set_write_buffer()>PHPfunc:str...
-- バッファのサイズを0にする事で、書き込みの最中にブロッ...
- STACK*:PHP中級 http: //www.stackasterisk.jp/tech/php/ph...
-- 説明の仕方としては以下引用の通り
バッファがあると、せっかく flock を使ってロックしても、...
データをディスクから読み出してしまうことがあるわけです
- (PHP開発版のトピック) [PHP-users 14972]PHP 4.3.2RC2のst...
-- http: //ns1.php.gr.jp/pipermail/php-users/2003-April/0...
-- http: //ns1.php.gr.jp/pipermail/php-users/2003-May/015...
PHP 4.3.2RC*ではローカルファイルへのユーザレベルIOバッフ...
*無い*ので、set_file_bufferはするだけ無駄
-- Bug #23201 http:// bugs.php.net/bug.php?id=23201 (Fixe...
*** 参考文献: fflush() [#e5387b9f]
- ソース: ext/standard/file.c
- PHPマニュアル: [[fflush()>PHPfunc:fflush]]
-- 一回の実行の間に「ファイルに書き込んでそれを再び読む」...
** ステータスキャッシュ関連 [#a73af28d]
ファイル操作上のステータスキャッシュの問題 (このページと...
- PHPマニュアル: [[fflush()>PHPfunc:fflush]]
-- 一回の実行の間に「ファイルに書き込んでそれを再び読む」...
- 再現コード (by someone)
$filename = 'testdata.txt';
$fp = fopen($filename, 'w+'); // ファイルサイズは強制的...
//set_file_buffer($fp, 0);
echo filesize($filename)."\n"; // 0バイトであるはず
fputs($fp, str_repeat('a', 10)); // 10バイト書き込み
fflush($fp);
fclose($fp);
echo filesize($filename)."\n"; // 10バイトであるはず
clearstatcache();
echo filesize($filename)."\n"; // 10バイトであるはず
- fflush使わずset_file_bufferでも同じ結果にならないですか...
- 再現しない(同じ数値が表示される)けど、PHP本体のバージョ...
- 全部10ならclearstatcacheする必要はないのかな -- &new{2...
- 一回目のfilesize取得が間違っていたので直しました。0,0,1...
-- filesize()を使わないでfeofなどファイルポインタを使えば...
- そのサンプルコード、あっても無くても関係のないset_file_...
-- fflush()やset_file_buffer()の問題ではなくステートキャ...
//#comment
--------
([[BugTrack2/151]]より移動)
** コメント: バッファ操作? [#bdd30207]
- [[cvs:lib/file.php]](1.51)の変更ではファイル書き込みの...
-- こんにちは :) コードの機能分割については放っておいても...
-- コードの機能分割云々は意味がよく分からないのでバッファ...
-- いえ。そのバッファ操作(切る場合、フラッシュする場合で...
-- 具体的なコードは下のものですよ。set_file_bufferへのコ...
- こんにちは。これで、最初のコメントで、どのように思われ...
-- set_file_buffer() は万一のファイルの破壊を防ぐべく、出...
--- [[cvs:Attic/file.php]] (r1.40) -- 当時 [[ぱんだ]]さん...
--- PHPマニュアル: [[set_file_buffer()>PHPfunc:set_file_...
--- STACK*:PHP中級 http: //www.stackasterisk.jp/tech/php/...
- 私がここで明確にさせていただきたかったのは、「その提案...
-- (1) flock() の直後で set_file_buffer() を使ってバッフ...
-- (2) このシチュエーションでは set_file_buffer() は絶対...
-- (3) このシチュエーションなら、fflush() をこう使って(以...
- 取り扱うデータの量の大小でデータの破壊が左右されるはず...
- 確認しておいたほうがいいようですので、まず最初に下のコ...
- それから、set_file_buffer()はバッファリングを切るために...
//#comment
----------------
([[BugTrack2/151]])
** コメント: fputs()のコール回数を減らす案 [#wca28f53]
- ファイル書き込みを短縮するだけならこれを試してください(...
--- file.1.51.php Fri Mar 10 21:45:44 2006
+++ file.1.51.test.php Fri Mar 10 21:51:22 2006
@@ -303,7 +303,10 @@
arsort($recent_pages, SORT_NUMERIC);
// Cut unused lines
- $recent_pages = array_splice($recent_pages, 0, $maxsho...
+// $recent_pages = array_splice($recent_pages, 0, $maxs...
+ $data = '';
+ foreach ($recent_pages as $page=>$time)
+ $data .= $time . "\t" . $page . "\n";
// Create recent.dat (for recent.inc.php)
$file = 'recent.dat';
@@ -315,10 +318,12 @@
set_file_buffer($fp, 0);
flock($fp, LOCK_EX);
rewind($fp);
- foreach ($recent_pages as $page=>$time)
- fputs($fp, $time . "\t" . $page . "\n");
+// foreach ($recent_pages as $page=>$time)
+// fputs($fp, $time . "\t" . $page . "\n");
+ fputs($fp, $data);
flock($fp, LOCK_UN);
fclose($fp);
+ unset($data);
// Create RecentChanges
$fp = fopen(get_filename($whatsnew), 'w') or
- コメントありがとうございます。fputs() のコール回数を減...
//#comment
** (STACK*の) set_file_buffer($fp, 0) の説明に疑問... [#q...
長文で申し訳ありません. 引用されている set_file_buffer($...
疑問を感じたため、手元で確認した結果をこちら記載します.
検証方法の不備や、さらに提供すべき設定内容があれば、お知...
上には set_file_buffer() の説明として以下のような記述が掲...
STACK*:PHP中級
- 説明の仕方としては以下引用の通り
バッファがあると、せっかく flock を使ってロックしても...
データをディスクから読み出してしまうことがあるわけです
PHP のマニュアルによると、set_file_buffer($fp,0) は strea...
であり、『書き込み操作はバッファされなくなります』 とあり...
ちなみに、PHP5.1.2 の stream_set_write_buffer() のコード...
抜粋すると以下のようになっています.
// if buff is 0 then set to non-buffered
if( buf == 0 ) {
ret = php_stream_set_option(stream, PHP_STREAM_OPTION_...
} else {
ret = php_stream_set_option(stream, PHP_STREAM_OPTION_...
}
これを検証するために以下のようなコードを準備してみました.
- 書き込み(書き込みを数回行うケース): writer1.php
- 書き込み(書き込みを1回で行うケース): writer2.php
- 読み込み(writer1.php あるいは writer2.php で書き出され...
以下の結果を確認することで、『set_file_buffer() が 読み込...
確認してみたいと思います.
- writer1.php と reader.php を同時に起動させる. : set_fil...
- writer2.php と reader.php を同時に起動させる. : set_fil...
テスト環境/テストデータ は以下の通り.
- OS: FedoraCore4
- PHP: PHP 5.0.4 (cli) (built: Nov 8 2005 08:27:12)
- writer1.php writer2.php の元データ (rdata) : 適当に作成...
*** writer1.php [#z8715497]
<?php
print("writer1.start\n");
$rfile = "rdata";
$rlines = file($rfile)
or die_message("$rfile isnot exist");
$wfile = "wdata";
$fp = @fopen( $wfile, file_exists($wfile) ? "r+": "w")
or die_message("$wfile cannot create.");
set_file_buffer($fp, 0);
foreach( $rlines as $line_num => $line)
{
print("check\n");
fwrite($fp,$line);
}
fclose($fp);
print("writer1.end\n");
?>
*** writer2.php [#e842d5df]
<?php
print("writer2.start\n");
$rfile = "rdata";
$contents = file_get_contents($rfile)
or die_message("$rfile not exist");
$wfile = "wdata";
$fp = @fopen( $wfile, file_exists($wfile) ? "r+": "w")
or die_message("$file cannot create.");
set_file_buffer($fp, 0);
fwrite($fp, $contents);
print("writer2.write.finish\n");
fclose($fp);
print("writer2.end\n");
?>
*** reader.php [#v8a2e95a]
<?php
print("reader.start\n");
$rfile = "wdata";
while( ! $contents = @file_get_contents($rfile) )
;
print("reader: read finish.\n");
$wfile = "wdata2";
$fp = @fopen( $wfile, file_exists($wfile) ? "r+": "w")
or die_message("$wfile not exist");
print("reader.output.start\n");
fwrite($fp,$contents);
print("reader.output.end\n");
fclose($fp);
print("reader.end\n");
?>
*** set_file_buffer_test1.pl とその結果 [#i25bf7bf]
#!//usr/bin/perl
unlink("wdata");
unlink("wdata2");
system("php -q writer1.php &");
# busy loop
for($i=0;$i<6000;$i++){
;
}
system("php -q reader.php &");
exit;
- 結果
以下のように書き込み処理の後に読み込み処理が行われること...
writer1.start
check
check
:
check
writer1.end
reader.start
reader: read finish.
reader.output.start
reader.output.end
reader.end
読み込み処理が書き込み処理中に行われることもあります.
reader.start
writer1.start
check
reader: read finish.
check
reader.output.start
reader.output.end
reader.end
check
check
:
check
check
writer1.end
*** set_file_buffer_test2.pl とその結果 [#c56c24da]
#!//usr/bin/perl
unlink("wdata");
unlink("wdata2");
system("php -q writer2.php &");
# busy loop;
for($i=0;$i<6000;$i++) {
;
}
system("php -q reader.php &");
exit;
- 結果
こちらも、以下のように書き込み処理の後に読み込み処理が行...
writer2.start
writer2.write.finish
writer2.end
reader.start
reader: read finish.
reader.output.start
reader.output.end
reader.end
writer2.start
reader.start
writer2.write.finish
writer2.end
reader: read finish.
reader.output.start
reader.output.end
reader.end
こちらも、以下のように書き込み処理の後に、読み込み処理が...
writer2.start
reader.start
reader: read finish.
reader.output.start
reader.output.end
reader.end
writer2.write.finish
writer2.end
最後の場合だけ申し訳ありませんが、この時のファイルサイズ...
- writer2 の読み込みデータ rdata のサイズ : 2142150
- writer2 が書き出した wdata のサイズ : 2142150
- reader が書き出した wdata2 のサイズ : 8192
*** 結論. [#kee64b6f]
『 set_file_buffer() は 書き込みバッファに対する処理であ...
読み込み処理をブロックすることはない. 』
と考えます.
- 中途半端な書き込み中のデータを読み込まないようにするに...
- でも、PHPマニュアルには『flock()はNFS及び他の多くのネッ...
-- %%phpのflockはfcntl()が使用可能かコンパイル時に調べて...
- 結論で言われている事(読み込む側がブロックするわけじゃな...
-- プロセスに対する「ブロック」という用語について。あるプ...
-- [[set_file_buffer() のマニュアル>PHPfunc:stream_set_wr...
「fwrite() による出力は、通常では 8K バイトがバッファ ...
これは、もし同じストリームに対し出力を行おうとするプ...
あったとき、 いずれかのプロセスは、他方のプロセスが出...
ように 8K バイト分 データを書き出したところで停止する...
示しています。」
-- 書き込みの途中でプロセスがブロック(停止)するという事は...
-- (必要があれば明日以降につづく) 別に STACK* で言ってい...
--- ブロックの用語の使い方が誤っている件はすいませんでし...
- この件(このjjyunさんのトピック)であれば、そのケチをつけ...
- PHPの実装を少しばかり調べてみたので、一時的に[[ここ>htt...
- 私がSTACK*の記事やPHPマニュアルの行間を読み違えたために...
-- ko-zu さんの説明と私の認識と違うところ: STACK*の カウ...
- ftruncate(が無いこと)を見落としていました。修正加筆しま...
- [[ko-zu]]さんとこの最後にある STACK* 向けの検証コードは...
- flockの影響を検証するかのような文面になってしまっていた...
- お疲れ様です。この話題(STACK* に書かれている事の検証)は...
- 久々にPHPソースを読む時間が出来たので[[ドキュメント再考...
-- 個人的な意見としては、set_file_buffersは巨大なファイル...
//#comment
** ところで (引用が一部無くなっている?) [#ldc7f623]
- ところで『set_file_buffer()』と『ブロック』を結びつける...
-- 「ブロック」という単語でこの[[jjyun]]さんのトピックを...
-- このページのpreの部分にSTACKの記事から引用した書きこみ...
-- ここはヒアリング大会の会場ではないので、可能な限り明確...
-- で、どこにいったのですか?バックアップにも無いですが?...
-- set_file_buffer() と ブロックを結び付けて考えるきっか...
-- あいまいな方>まだ踏み込みが浅い様ですね。set_file_buf...
//#comment
** コメント: PHP 5.3.2以降のfclose() [#p462c7e4]
- [[PHP Manual のflock関数>PHP関数:flock]]より
>変更履歴
|バージョン|説明|h
|5.3.2|ファイルのリソースハンドルを閉じたときにロックを自...
<だそうです。「fclose 前にアンロックしている」は、むしろ...
- こんにちは。PHPのソースを見ないでコメントしますが、PHP ...
-- Version 5.3.2 "Removed automatic file descriptor unloc...
-- 提示されたPHPのChangeLogですが、こちらに転載された文は...
- こちらは、マニュアルのコメント欄よりも前までだけしか読...
- 後から追えるようにこの件のSVNをメモしておきます。http: ...
- PHPAPI int php_flock http: //svn.php.net/viewvc/php/php...
- PHP_FUNCTION(flock), PHP_FUNCTION(fclose) http: //svn...
- この件は、ここまでの推測(本来不要な処理を取っただけ)が...
//#comment
終了行:
* [flock] バッファ操作関連のまとめ [#rcf7f135]
- ページ: [[BugTrack2]]
- 投稿者: [[henoheno]]
- 優先順位: 普通
- 状態: 着手
- カテゴリー: 本体バグ
- 投稿日: 2006-03-20 (月) 00:02:44
- バージョン:
#contents
** メッセージ [#j4ad2ce5]
flock()周辺のバッファ操作(バッファのon/off、フラッシュ等)...
*** 参考文献: set_file_buffer() [#j8545212]
- ソース: ext/standard/file.c
PukiWiki 1.4.x は少なくともPHP4.1.2以降ターゲットにしてい...
- PHPマニュアル: [[set_file_buffer()>PHPfunc:set_file_bu...
- PHPマニュアル: [[stream_set_write_buffer()>PHPfunc:str...
-- バッファのサイズを0にする事で、書き込みの最中にブロッ...
- STACK*:PHP中級 http: //www.stackasterisk.jp/tech/php/ph...
-- 説明の仕方としては以下引用の通り
バッファがあると、せっかく flock を使ってロックしても、...
データをディスクから読み出してしまうことがあるわけです
- (PHP開発版のトピック) [PHP-users 14972]PHP 4.3.2RC2のst...
-- http: //ns1.php.gr.jp/pipermail/php-users/2003-April/0...
-- http: //ns1.php.gr.jp/pipermail/php-users/2003-May/015...
PHP 4.3.2RC*ではローカルファイルへのユーザレベルIOバッフ...
*無い*ので、set_file_bufferはするだけ無駄
-- Bug #23201 http:// bugs.php.net/bug.php?id=23201 (Fixe...
*** 参考文献: fflush() [#e5387b9f]
- ソース: ext/standard/file.c
- PHPマニュアル: [[fflush()>PHPfunc:fflush]]
-- 一回の実行の間に「ファイルに書き込んでそれを再び読む」...
** ステータスキャッシュ関連 [#a73af28d]
ファイル操作上のステータスキャッシュの問題 (このページと...
- PHPマニュアル: [[fflush()>PHPfunc:fflush]]
-- 一回の実行の間に「ファイルに書き込んでそれを再び読む」...
- 再現コード (by someone)
$filename = 'testdata.txt';
$fp = fopen($filename, 'w+'); // ファイルサイズは強制的...
//set_file_buffer($fp, 0);
echo filesize($filename)."\n"; // 0バイトであるはず
fputs($fp, str_repeat('a', 10)); // 10バイト書き込み
fflush($fp);
fclose($fp);
echo filesize($filename)."\n"; // 10バイトであるはず
clearstatcache();
echo filesize($filename)."\n"; // 10バイトであるはず
- fflush使わずset_file_bufferでも同じ結果にならないですか...
- 再現しない(同じ数値が表示される)けど、PHP本体のバージョ...
- 全部10ならclearstatcacheする必要はないのかな -- &new{2...
- 一回目のfilesize取得が間違っていたので直しました。0,0,1...
-- filesize()を使わないでfeofなどファイルポインタを使えば...
- そのサンプルコード、あっても無くても関係のないset_file_...
-- fflush()やset_file_buffer()の問題ではなくステートキャ...
//#comment
--------
([[BugTrack2/151]]より移動)
** コメント: バッファ操作? [#bdd30207]
- [[cvs:lib/file.php]](1.51)の変更ではファイル書き込みの...
-- こんにちは :) コードの機能分割については放っておいても...
-- コードの機能分割云々は意味がよく分からないのでバッファ...
-- いえ。そのバッファ操作(切る場合、フラッシュする場合で...
-- 具体的なコードは下のものですよ。set_file_bufferへのコ...
- こんにちは。これで、最初のコメントで、どのように思われ...
-- set_file_buffer() は万一のファイルの破壊を防ぐべく、出...
--- [[cvs:Attic/file.php]] (r1.40) -- 当時 [[ぱんだ]]さん...
--- PHPマニュアル: [[set_file_buffer()>PHPfunc:set_file_...
--- STACK*:PHP中級 http: //www.stackasterisk.jp/tech/php/...
- 私がここで明確にさせていただきたかったのは、「その提案...
-- (1) flock() の直後で set_file_buffer() を使ってバッフ...
-- (2) このシチュエーションでは set_file_buffer() は絶対...
-- (3) このシチュエーションなら、fflush() をこう使って(以...
- 取り扱うデータの量の大小でデータの破壊が左右されるはず...
- 確認しておいたほうがいいようですので、まず最初に下のコ...
- それから、set_file_buffer()はバッファリングを切るために...
//#comment
----------------
([[BugTrack2/151]])
** コメント: fputs()のコール回数を減らす案 [#wca28f53]
- ファイル書き込みを短縮するだけならこれを試してください(...
--- file.1.51.php Fri Mar 10 21:45:44 2006
+++ file.1.51.test.php Fri Mar 10 21:51:22 2006
@@ -303,7 +303,10 @@
arsort($recent_pages, SORT_NUMERIC);
// Cut unused lines
- $recent_pages = array_splice($recent_pages, 0, $maxsho...
+// $recent_pages = array_splice($recent_pages, 0, $maxs...
+ $data = '';
+ foreach ($recent_pages as $page=>$time)
+ $data .= $time . "\t" . $page . "\n";
// Create recent.dat (for recent.inc.php)
$file = 'recent.dat';
@@ -315,10 +318,12 @@
set_file_buffer($fp, 0);
flock($fp, LOCK_EX);
rewind($fp);
- foreach ($recent_pages as $page=>$time)
- fputs($fp, $time . "\t" . $page . "\n");
+// foreach ($recent_pages as $page=>$time)
+// fputs($fp, $time . "\t" . $page . "\n");
+ fputs($fp, $data);
flock($fp, LOCK_UN);
fclose($fp);
+ unset($data);
// Create RecentChanges
$fp = fopen(get_filename($whatsnew), 'w') or
- コメントありがとうございます。fputs() のコール回数を減...
//#comment
** (STACK*の) set_file_buffer($fp, 0) の説明に疑問... [#q...
長文で申し訳ありません. 引用されている set_file_buffer($...
疑問を感じたため、手元で確認した結果をこちら記載します.
検証方法の不備や、さらに提供すべき設定内容があれば、お知...
上には set_file_buffer() の説明として以下のような記述が掲...
STACK*:PHP中級
- 説明の仕方としては以下引用の通り
バッファがあると、せっかく flock を使ってロックしても...
データをディスクから読み出してしまうことがあるわけです
PHP のマニュアルによると、set_file_buffer($fp,0) は strea...
であり、『書き込み操作はバッファされなくなります』 とあり...
ちなみに、PHP5.1.2 の stream_set_write_buffer() のコード...
抜粋すると以下のようになっています.
// if buff is 0 then set to non-buffered
if( buf == 0 ) {
ret = php_stream_set_option(stream, PHP_STREAM_OPTION_...
} else {
ret = php_stream_set_option(stream, PHP_STREAM_OPTION_...
}
これを検証するために以下のようなコードを準備してみました.
- 書き込み(書き込みを数回行うケース): writer1.php
- 書き込み(書き込みを1回で行うケース): writer2.php
- 読み込み(writer1.php あるいは writer2.php で書き出され...
以下の結果を確認することで、『set_file_buffer() が 読み込...
確認してみたいと思います.
- writer1.php と reader.php を同時に起動させる. : set_fil...
- writer2.php と reader.php を同時に起動させる. : set_fil...
テスト環境/テストデータ は以下の通り.
- OS: FedoraCore4
- PHP: PHP 5.0.4 (cli) (built: Nov 8 2005 08:27:12)
- writer1.php writer2.php の元データ (rdata) : 適当に作成...
*** writer1.php [#z8715497]
<?php
print("writer1.start\n");
$rfile = "rdata";
$rlines = file($rfile)
or die_message("$rfile isnot exist");
$wfile = "wdata";
$fp = @fopen( $wfile, file_exists($wfile) ? "r+": "w")
or die_message("$wfile cannot create.");
set_file_buffer($fp, 0);
foreach( $rlines as $line_num => $line)
{
print("check\n");
fwrite($fp,$line);
}
fclose($fp);
print("writer1.end\n");
?>
*** writer2.php [#e842d5df]
<?php
print("writer2.start\n");
$rfile = "rdata";
$contents = file_get_contents($rfile)
or die_message("$rfile not exist");
$wfile = "wdata";
$fp = @fopen( $wfile, file_exists($wfile) ? "r+": "w")
or die_message("$file cannot create.");
set_file_buffer($fp, 0);
fwrite($fp, $contents);
print("writer2.write.finish\n");
fclose($fp);
print("writer2.end\n");
?>
*** reader.php [#v8a2e95a]
<?php
print("reader.start\n");
$rfile = "wdata";
while( ! $contents = @file_get_contents($rfile) )
;
print("reader: read finish.\n");
$wfile = "wdata2";
$fp = @fopen( $wfile, file_exists($wfile) ? "r+": "w")
or die_message("$wfile not exist");
print("reader.output.start\n");
fwrite($fp,$contents);
print("reader.output.end\n");
fclose($fp);
print("reader.end\n");
?>
*** set_file_buffer_test1.pl とその結果 [#i25bf7bf]
#!//usr/bin/perl
unlink("wdata");
unlink("wdata2");
system("php -q writer1.php &");
# busy loop
for($i=0;$i<6000;$i++){
;
}
system("php -q reader.php &");
exit;
- 結果
以下のように書き込み処理の後に読み込み処理が行われること...
writer1.start
check
check
:
check
writer1.end
reader.start
reader: read finish.
reader.output.start
reader.output.end
reader.end
読み込み処理が書き込み処理中に行われることもあります.
reader.start
writer1.start
check
reader: read finish.
check
reader.output.start
reader.output.end
reader.end
check
check
:
check
check
writer1.end
*** set_file_buffer_test2.pl とその結果 [#c56c24da]
#!//usr/bin/perl
unlink("wdata");
unlink("wdata2");
system("php -q writer2.php &");
# busy loop;
for($i=0;$i<6000;$i++) {
;
}
system("php -q reader.php &");
exit;
- 結果
こちらも、以下のように書き込み処理の後に読み込み処理が行...
writer2.start
writer2.write.finish
writer2.end
reader.start
reader: read finish.
reader.output.start
reader.output.end
reader.end
writer2.start
reader.start
writer2.write.finish
writer2.end
reader: read finish.
reader.output.start
reader.output.end
reader.end
こちらも、以下のように書き込み処理の後に、読み込み処理が...
writer2.start
reader.start
reader: read finish.
reader.output.start
reader.output.end
reader.end
writer2.write.finish
writer2.end
最後の場合だけ申し訳ありませんが、この時のファイルサイズ...
- writer2 の読み込みデータ rdata のサイズ : 2142150
- writer2 が書き出した wdata のサイズ : 2142150
- reader が書き出した wdata2 のサイズ : 8192
*** 結論. [#kee64b6f]
『 set_file_buffer() は 書き込みバッファに対する処理であ...
読み込み処理をブロックすることはない. 』
と考えます.
- 中途半端な書き込み中のデータを読み込まないようにするに...
- でも、PHPマニュアルには『flock()はNFS及び他の多くのネッ...
-- %%phpのflockはfcntl()が使用可能かコンパイル時に調べて...
- 結論で言われている事(読み込む側がブロックするわけじゃな...
-- プロセスに対する「ブロック」という用語について。あるプ...
-- [[set_file_buffer() のマニュアル>PHPfunc:stream_set_wr...
「fwrite() による出力は、通常では 8K バイトがバッファ ...
これは、もし同じストリームに対し出力を行おうとするプ...
あったとき、 いずれかのプロセスは、他方のプロセスが出...
ように 8K バイト分 データを書き出したところで停止する...
示しています。」
-- 書き込みの途中でプロセスがブロック(停止)するという事は...
-- (必要があれば明日以降につづく) 別に STACK* で言ってい...
--- ブロックの用語の使い方が誤っている件はすいませんでし...
- この件(このjjyunさんのトピック)であれば、そのケチをつけ...
- PHPの実装を少しばかり調べてみたので、一時的に[[ここ>htt...
- 私がSTACK*の記事やPHPマニュアルの行間を読み違えたために...
-- ko-zu さんの説明と私の認識と違うところ: STACK*の カウ...
- ftruncate(が無いこと)を見落としていました。修正加筆しま...
- [[ko-zu]]さんとこの最後にある STACK* 向けの検証コードは...
- flockの影響を検証するかのような文面になってしまっていた...
- お疲れ様です。この話題(STACK* に書かれている事の検証)は...
- 久々にPHPソースを読む時間が出来たので[[ドキュメント再考...
-- 個人的な意見としては、set_file_buffersは巨大なファイル...
//#comment
** ところで (引用が一部無くなっている?) [#ldc7f623]
- ところで『set_file_buffer()』と『ブロック』を結びつける...
-- 「ブロック」という単語でこの[[jjyun]]さんのトピックを...
-- このページのpreの部分にSTACKの記事から引用した書きこみ...
-- ここはヒアリング大会の会場ではないので、可能な限り明確...
-- で、どこにいったのですか?バックアップにも無いですが?...
-- set_file_buffer() と ブロックを結び付けて考えるきっか...
-- あいまいな方>まだ踏み込みが浅い様ですね。set_file_buf...
//#comment
** コメント: PHP 5.3.2以降のfclose() [#p462c7e4]
- [[PHP Manual のflock関数>PHP関数:flock]]より
>変更履歴
|バージョン|説明|h
|5.3.2|ファイルのリソースハンドルを閉じたときにロックを自...
<だそうです。「fclose 前にアンロックしている」は、むしろ...
- こんにちは。PHPのソースを見ないでコメントしますが、PHP ...
-- Version 5.3.2 "Removed automatic file descriptor unloc...
-- 提示されたPHPのChangeLogですが、こちらに転載された文は...
- こちらは、マニュアルのコメント欄よりも前までだけしか読...
- 後から追えるようにこの件のSVNをメモしておきます。http: ...
- PHPAPI int php_flock http: //svn.php.net/viewvc/php/php...
- PHP_FUNCTION(flock), PHP_FUNCTION(fclose) http: //svn...
- この件は、ここまでの推測(本来不要な処理を取っただけ)が...
//#comment
ページ名: