1

C では、fread 関数は次のようになります。

size_t fread(void *buf, size_t max, FILE *file);

通常、char* 配列は buf として使用されます。人々は通常、char = 8 ビットと想定しています。しかし、それが真実でない場合はどうなりますか?8 ビットのバイト システムで書かれたファイルを 10 ビットのバイト システムで読み取るとどうなりますか? 異なるサイズのバイトを持つシステム間でのファイルとネットワーク ストリームの移植性に関する単一の標準はありますか? そして最も重要なことは、この点に関して移植可能なコードをどのように書くかということです。

4

2 に答える 2

3

ネットワーク通信に関しては、物理アクセス プロトコル (イーサネットなど) によって「情報の単位」に含まれるビット数が定義され、これを適切な型にマップするのは実装次第です。したがって、ネットワーク通信に関しては、変なアーキテクチャをサポートしても問題はありません。

ファイルへのアクセスに関しては、奇妙なアーキテクチャをサポートしたい場合、より興味深いものになります。参照する標準がなく、システムにファイルを配置する方法でさえ、ファイルへのアクセス方法に影響を与える可能性があるためです。幸いなことに、現在使用されている 8 ビット バイトをサポートしていないシステムは、ファイルシステムをまったくサポートしていない DSP や同様の小さな組み込みシステムだけであるため、この問題は本質的には問題になりません。

于 2012-12-22T17:44:21.767 に答える
1

最近では、ビットサイズが8以外のシステムは非常にまれです。ただし、他のサイズのマシンもあり、ファイルがそれらのマシンに移植可能であるとは限りません。

uberportabilityが必要な場合は、char!=8ビットに対応する何らかのエンコーディングをファイルに含める必要があります。

これがDEC10または本当に古いIBMメインフレーム、DSPなどで実行されなければならない可能性があることを念頭に置いていますか、それとも「知りたい」という目的で質問しているだけですか。後者の場合、私は単に「ケースを無視する」でしょう。これは8ビット文字を持たない非常に特殊なマシンであり、システムで「ファイル」を使用するために1文字あたりのビット数以外の問題が発生する可能性があります。 USBスティックを差し込んだりFTPで転送したりすることはおそらくできないので(おそらく後者が最も可能性が高いですが)

于 2012-12-22T16:36:57.180 に答える