読み書き用の「+」と同様に、Unixでバイナリアクセス用にファイルを開くのが「無意味」なのはなぜですか?

読み書き用の「+」と同様に、Unixでバイナリアクセス用にファイルを開くのが「無意味」なのはなぜですか?

私はCプログラミング言語(第2版)を読んでいます。 157ページと158ページでは、著者はfopenUnixシステムのコードを提供しています。著者は彫刻の最後に次のように付け加えた。

特にfopenバイナリアクセスの場合、「b」は認識できません。無意味UNIX システムでは、「+」を読み書きできません。

著者はなぜそれが無意味であると言うのですか? (ここで言及されている「b」と「+」はファイルアクセスモードです)

答え1

一部の非Unixシステムでは、バイナリファイルとテキストファイルを異なる方法で処理します。たとえば、DOS、Windows、およびOS / 2(設計上は関係ありませんが、fopen例として役に立ちます)でテキストモードでファイルを開き、ここに書き込むと、「C」ルール行の終わり(\n)がプラットフォームに関係なく変換されます。必要です。他のシステムでは、バイナリモードでファイルを開くと、ロギングで処理されます。これがfopen「b」フラグが制御するものです。このフラグなしで開かれたファイルはテキストモードで開き、このフラグで開かれたファイルはバイナリモードで開きます。 Unixスタイルのシステムはこれらの区別をしないので、「b」は無視されます(エラーは発生しません)。

fopen私の本には「+」は言及されていませんが、当時はサポートされていなかったようです(今は本当にそうです)。

答え2

~によるとPOSIX仕様fopen()(その本が書かれたときは存在しませんでした):

これらの文字はb何の影響もありませんが、ISO C規格に準拠することは許可されています。

このbモードは許可する必要がありますが、POSIXシステムには影響しません。

また、この+モデルは次のとおりです。

+更新モード(mode引数の2番目または3番目の文字)を使用してファイルを開くと、関連ストリームで入出力を実行できます。

したがって、これはPOSIXシステムにも確実に影響を与えます。

K&R ブックが執筆されてから C プログラミング言語が数回変更されたことに注意してください。

関連情報