2012-04-15 5 views
2

Linuxのread()システムコールをソース(file、socket、pipe)から読み込む場合、返される最小データ量はブロッキングモードですか?あるいは、syscallは1バイトも返すことができますか?Linuxのread()最小データ量

パイプから1つのint(4または8バイト)を読み取る場合、readof()の戻り値をチェックしてsizeof(int)バイトよりも小さいかどうかを確認する必要がありますか?

+0

実際には、すべての単語またはバイトに対して1つの 'read(2)'システムコールを実行するのは効率的ではありません。読み込みをバッファし(たとえば、1K〜128Kバイトのバッファサイズで)、バッファリングを行うライブラリ(たとえば、 'fread'を使って' ')を使用してください。 –

+0

私はそれをIPCのために使いたいと思います。ここでは、intを別のプロセスに送るだけです。 – kuba

+0

しかし、あなたはまだ大きな量を読むことができます。複数回読み込みが必要な場合があります(たとえば、プロセスが頻繁にスケジュールされていないと、システムがビジー状態になっていたり、他の書き込みプロセスがデータを高速で流出しているなどパイプ)。 –

答えて

5

ブロックモードが最小のブロックモードデバイス以外は、最小値はありません。

常に戻り値を確認する必要があります。物事が壊れる可能性があります、あなたは破損のために計画し、短いリードとエラーを適切に処理するのではなく、相手側が常に完璧であると仮定します。

+2

ブロックデバイスから読み込む場合でも、読み込み量は少なくても、OSは基本デバイスからブロック全体を読み込み、すべてのデータを返すわけではありません。 –

関連する問題