write システム コールのプロトタイプは次のとおりです。
ssize_t write(int fd, const void *buf, size_t count);
count パラメータは符号なしで、戻り値は符号付きです。
ヘルプページには次のように書かれています:
成功すると、書き込まれたバイト数が返されます (ゼロは何も書き込まれていないことを示します)。エラーの場合は -1 が返され、errno
適切に設定されます。
ただし、count パラメーターの制限については言及されていません。count が より大きい場合の動作についてはまだ述べていませんSSIZE_MAX
。
write が汎用デバイス/ファイル/その他に使用できるシステム コールであることを考慮すると、デバイスが SSIZE_MAX より大きい書き込み操作をサポートしている場合、戻り値の型は実際の書き込みバイト数を処理できません。
符号なしのバイト数を渡して、結果として符号付きのバイト数を返すことができるのは、私には意味がありません。署名された番号を渡さないのはなぜですか?
エラーが発生しやすい書き込み関数のプロトタイプのように感じられるか、少なくともパスに穴が残る可能性があります。
誰かがそれについての詳細を知っていますか、またはどこでこの情報を見つけることができますか?