私はCプログラミング言語(第2版)を読んでいます。 157ページと158ページでは、著者はfopen
Unixシステムのコードを提供しています。著者は彫刻の最後に次のように付け加えた。
特に
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 プログラミング言語が数回変更されたことに注意してください。