2

fread() の構文は次のとおりです。

size_t fread(void *buf,size_t size, size_t, count, FILE *stream);

一方、 read() の場合は

ssize_t read(int fd, void *buf, size_t len);

どちらもバッファを使用して読み取りデータを配置します。これら2つはどのように異なりますか?私の質問は、「システム コールではなく、fread()/fwrite() stdio 呼び出しに使用されるバッファリングされた I/O」という用語から生じます。

4

1 に答える 1

3

freadは独自のバッファを持つことができますが、指定readしたもの以外のバッファはありません。したがって、readバッファリングされていません。読み取りが発生する可能性のあるメモリの場所を提供しているだけですが、stdio関数は(通常)バッファリングされています。

たとえば、 はfgetsバイト単位で読み取りません (非効率的であるため)。代わりに、チャンクで読み取り、改行を超えて読み取りすぎる場合があります。fread次に、システムコールなしですぐに返される可能性のある読み取りバッファーで待機しているデータがいくつかあります。

于 2013-04-29T09:22:51.680 に答える