2017-06-24 6 views
0

perlでは、Cのfread()のようにread関数を使ってファイルをバッファリングして読み込むことができます。しかし、perlのwrite関数は "残念なことに"と反対ではなく "書式付きレコードをファイルに書き込む"(http://www.perlfect.com/articles/perlfile.shtml)。そのリンクは代わりに印刷物を使うことを提案している。しかし、読み書きされたアイテムの数を返すreadおよびfwrite()とは異なり、printは出力が成功したかどうかを示すブール値(https://perldoc.perl.org/functions/print.html)だけを返します。Cのfwrite()のように、perlのread()の反対側にはありますか?

また、Cのfwrite()は結果的に役に立たないのですが、パーツがバッファに正常に書き込まれた可能性がありますが、まだ実際にはファイルに書き出されていない可能性があります。これはperlのreadとCのfread()と比較して非対称であると思われます。返される項目の数が実際にファイルからバッファに正常に読み込まれることを保証します。したがって、fwrite()の戻り値は、すべての項目が正常に書き込まれたことを報告する場合、信頼できません。一方、戻り値は、実際にファイルにフラッシュしようとしている間にエラーが発生していなければならないため、短い書き込みを報告する場合には少なくとも有用であると主張するかもしれません。短いとはいえ、報告された項目は実際にファイルに正常に書き込まれました。

答えて

1

syswrite()およびsysread()は、取得しようとしているものとほぼ同じです。これらの関数は、フードの下でwrite(2)とread(2)を使用します。

引数シグネチャは、既知のサイズのn個の要素ではなく、生のバイトを処理するという点で、Cのread()/ write()関数と似ています。

標準注意:あなたが苦痛や深刻な魔法に陥っていない限り、perlの通常のフォーマットされたI/Oとsysread()/ syswrite()を同じハンドルに混ぜてはいけません。

関連する問題