2011-01-20 7 views
1

Linuxマシンの場合write()またはwritev()の書き込みが、指定されたバイト数より少なくなる理由は何ですか?write返り値c

私はあなたが書き込みコールに与えるが、私はなぜこれがすべてで起こるはず興味サイズを0>の有効な戻り値は返すために知っていると< ....

答えて

5

含むthe documentationに記載されているいくつかの理由、あります

  • は、(例えば、プロセスのファイルサイズ制限や物理の余地があるより多くのバイトが書き込まれるwrite()要求した場合媒体の終わり)は、余裕のあるバイト数だけ書かなければならない。

  • write()は、データの書き込みに成功した後に信号で中断​​された場合、書き込まれたバイト数を返します。

+1

この回答にはいくつかの問題があります。 1)シグナルは、シグナルハンドラをセットアップしてSA_RESTARTを指定しなければ中断することができません。 2)通常のファイルの場合、 'write'はディスクがいっぱいでない限り短い書き込みを返してはいけません。しかし、ソケット、パイプ、デバイスの場合、バッファサイズが制限されている理由のように、 'write'があなたが要求したものより少なく送る理由がたくさんあります。これらの理由は、ノンブロッキングモードでのみ適用されることがあります。完全な答えは複雑です。 –

+0

@R:あなたが投稿したいなら、私は完全な答えに興味があります。私はPOSIXの専門家ではないことを認めます。 –

+0

それはスペースが足りなくなったためです。私は、空きディスク容量についてちょっと混乱していました。スーパーユーザーのディスク容量と他のユーザーとの区別があります...明らかに、スーパーユーザーの方が他のユーザーよりも "空きディスク容量"が多いです... –

0

場合に発生することができますボリュームの容量が不足しているか、ユーザーがクォータを超えています。