read()の戻り値がcount値を超えることはありますか?

read()の戻り値がcount値を超えることはありますか?

次の関数署名があります

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

マニュアルページに基づいて成功すると、戻り値が次の値より小さい可能性があることを理解していますが、計算ただし、戻り値は以下を超えることがあります。計算とにかく?

ベストアンサー1

呼ぶread()バックグラウンドで要求されたものよりも多くのデータを読み取ることができます(例えばリポジトリからブロック全体を読み取るか、次のブロックを最初に読み込みますread()いいえ要求されたよりも多くのデータが返されました(count)。その場合、buf通常はバイトだけがサイズ変更countされるため、結果はバッファオーバーフローである可能性が高くなります。

POSIX(上記のリンクを参照)は、この制限を明示的に指定します。

正常に完了した後、バイト0より大きい、読む()更新されたファイルの最後のデータアクセスタイムスタンプをスタンプし、読み取ったバイト数を返す必要があります。この数字は以下より大きくすることはできません。バイト

Linuxのマニュアルページそれほど明確ではありませんが、次のように言います。

read()読んでくださいに従って計算バイトファイル記述子からFD 次に始まるバッファを入力してください。バッファー

(ハイライトが追加されました.)

おすすめ記事