2016-09-21 4 views
1

私はK & RハンドブックからCを学んでいます。私は、fopenの呼び出しがバイナリアクセスを通知する 'b'を知っている(そして読んでいる)。 UNIXシステムではこの(バイナリアクセス)が無意味であると言われています。UNIXシステムで「バイナリアクセスが意味をなさない」のはなぜですか?

Windowsでは意味があるということです。

私の質問は、Windowsがテキストとバイナリの区別をするのはなぜですか。UNIXはそうではありません。また、区別は何ですか?

私はそれに答えるの近くに来るいくつかのことを見つけましたが、まだかなり私を満たしていない:事前に

Is there any difference between text and binary mode in file access?

http://perlmaven.com/what-is-a-text-file

感謝を。

+0

関数の引数を意味のないものにするのは簡単です。それを無視して、そこにあるかどうかに関わらず同じことをすることができます。バイナリアクセスがWindows上で何を意味するのか、もっと聞いているようですね。 –

+0

異なるモードでは 'fseek()'が異なる動作をします – Toby

+0

そして、 'fprintf()'、 'fscanf()'、 'fputc()'というバイナリで 'fread () 'と' fgetc() 'にはテキスト – Toby

答えて

2

従来のWindowsシステムでは、テキストとバイナリファイルの表現が異なります。テキストファイルにはファイルマーカーの終わり(^ -Zマーカー)があります。そのため、テキストモードで開くとその文字を読み取ることができません.IOレイヤーはそれを検出し、ファイルの最後に戻ってきます。バイナリモードでは、Unixシステムのように動作します。

UNIXはファイルの内容を気にせず、そのような意味を提供しません。 Unixでは、ファイルの終わりは、ストリームの長さを超えて何かを読み取ろうとするだけです。これは、テキストやバイナリモードがUnixの世界では重要ではないため、どんな文字もあらゆる種類の通常のファイルに現れることがあります。

+0

UNIXは文字列の長さを超えて読み込もうとしていることをどのように知っていますか?ファイルアドレスにエンコードされたファイル/データ長は何とかしていますか? – Aidenhjj

+0

各ファイルには、長さが最後の変更日、所有者、アクセス権などのメタデータが関連付けられています。したがって、開いているストリームの現在の位置が長さを超えていれば、ファイルの最後にあります。 –

+0

ブリリアント。ありがとうございました。 – Aidenhjj

関連する問題