私はCでファイル管理のトレーニングをしています.a、rなどの単語を使用してfopenでファイルを開く方法はたくさんあることがわかりました。すべて問題ありませんが、その単語にbを追加すると、それも読みましたバイナリファイルになります。どういう意味ですか?通常のファイルとの違いは?
5 に答える
ファイルをテキスト モードで開くと、C ライブラリはテキストに固有の処理を行います。たとえば、Windows と Unix/Linux では改行が異なりますが、C がその違いを処理しているため、単純に '\n' と書くことができます。
バイナリ モードでファイルを開くと、この特別な処理は行われず、生のバイトとして扱われるだけです。これについては、C FAQにもう少し長い説明があります。
これは Windows でのみ重要であることに注意してください。Unix/Linux システムでは、テキスト モードとバイナリ モードを区別する必要はありませんが、'b' フラグを含めることはできます。
通常のファイルをバイナリ モードで開くと、すべてのデータがそのまま取得され、書き込んだ内容が表示されます。
OTOH、テキストモードで通常のファイルを開くと、行末などが特別な扱いを受けることがあります。たとえば、値が 13 (CR
または'\r'
) と 10 (LF
または'\n'
) のバイト シーケンスは、読み取り時に 10 という 1 バイトに切り捨てられたり、書き込み時に 10 が 13 に展開され、その後に 10 が続く場合があります。この処理はプラットフォーム固有です (読み取り、コンパイラ/OS 固有)。
テキスト ファイルの場合、これは多くの場合重要ではありません。ただし、テキスト モードを非テキスト ファイルに適用すると、データが破損する危険があります。
また、テキスト モードで開かれたファイルの任意のオフセットでのバイトの読み取りと書き込みは、その特別な処理のためにサポートされていません。
b
バイナリファイルを操作するためのものです。ただし、これは POSIX 準拠のオペレーティング システムには影響しません。
fopenのマンページから:
The mode string can also include the letter 'b' either as a last char‐
acter or as a character between the characters in any of the two-char‐
acter strings described above. This is strictly for compatibility with
C89 and has no effect; the 'b' is ignored on all POSIX conforming sys‐
tems, including Linux. (Other systems may treat text files and binary
files differently, and adding the 'b' may be a good idea if you do I/O
to a binary file and expect that your program may be ported to non-UNIX
environments.)
違いはここで説明されています
バイナリ ファイルは一連の 1 と 0 です。これは、マイクロプロセッサが 1 の信号を送信するか、0 の信号を送信しないことでこれを解釈できるため、機械語と呼ばれます。これははるかにコンパクトですが、人間には判読できません。
このため、テキスト ファイルはバイナリ信号の文字列であり、バイナリよりもはるかに優れた言語に適した、よりわかりやすい文字として表示されるように指定されています。ASCII は、そのような指定の 1 つの例です。これにより、問題の真相が明らかになります。すべてのファイルは、最下位レベルでバイナリです。
しかし、バイナリは、私たち下等な人間にとってテキストが判読可能である必要のないアプリケーションに適しています =] バイナリが好まれるアプリケーションの例は、サウンド ファイル、画像、およびコンパイルされたプログラムです。バイナリがテキストよりも好まれる理由は、イメージをテキストで記述するよりもマシン語で記述した方が効率的だからです (いずれにしても機械語に翻訳する必要があります)。
ファイルには、テキスト ファイルとバイナリ ファイルの 2 種類があります。
バイナリ ファイルには、テキスト ファイルとは異なる 2 つの機能があります。ファイル内の任意のレコードに即座にジャンプできるため、配列のようにランダム アクセスが可能です。また、いつでもファイルのどこでもレコードの内容を変更できます。また、バイナリ ファイルは通常、テキスト ファイルよりも読み取りと書き込みの時間が短くなります。これは、レコードのバイナリ イメージがメモリからディスクに (またはその逆に) 直接格納されるためです。テキスト ファイルでは、すべてを前後にテキストに変換する必要があり、これには時間がかかります。
詳細はこちら