2017-04-28 5 views
0

read()をLinuxで使用する場合とWindowsで使用する場合とで違いはありますか?LinuxとWindowsでの読み取りシステム

Windowsでは、通常は私が要求するものよりも少なく読んでいる可能性はありますか?Linuxでは、通常は要求どおりに読み込みますか?

答えて

5

readは標準のc関数ではありません。歴史的には、それはPOSIXのシステムコールです。そのため、ウィンドウ(Windowsと仮定するとMSVCを意味します)は、それをまったく実装する必要はありません。それでも、彼らは試しました。そして、我々は2つの実装を比較することができます。

のlinux:

成功したhttp://man7.org/linux/man-pages/man2/read.2.html

は、バイト数は(ゼロはファイルの終わり を示す)が返され、読み取り、およびファイルの位置が進んでいますこの数だけ。この番号が要求されたバイト数 より小さい場合、エラーはありません。 です。これは、例えば、read()が以前のバージョンの (実際に現在利用可能だったバイト数が に近いか、またはパイプや端末から読み取ったため)または だった可能性があります。信号によって中断される。 NOTESも参照してください。

窓:

https://msdn.microsoft.com/en-us/library/ms235412.aspx

またはファイルに残っているバイトを数えるよりも少ない場合数えるほどであるかもしれない読み込まれたバイト数を返します_read https://msdn.microsoft.com/en-us/library/wyssk1bs.aspx

ファイルがテキストモードで開かれている場合、各キャリッジリターンラインフィード(CR-LF)のペアは1行の改行文字に置き換えられます。 1つのラインフィード文字だけが戻り値でカウントされます。置き換えはファイルポインタに影響しません。

したがって、両方の実装が要求されたバイト数よりも少なくなることを期待する必要があります。さらに、テキストモードでファイルを読むときには明確な違いがあります。

関連する問題