Linux 関数のかなり高いレベルでは、write()
長さ 0 のバッファーへの書き込み要求を除外します。これは理にかなっています。実行すべき作業がないと判断するためだけに、OS がレイヤーを掘り下げて時間を無駄にしたいと思う人がいるでしょうか?
ええと...私。
これは、Linux カーネルの I2C 書き込み確認ポーリングに関連しています。また、ハンドシェイクが間違っている場合、アドレス (データの前にバスで送信される) がエラーを返す場合、ビットバンされた I2C ドライバーが潜在的に有用な戻りコードを返すという発見。
アドレスの後にダミーデータを送信できますが、私が使用しているデバイスでは送信できません。(たぶん私は読んでみます...)。
問題は、カーネルがゼロ (0) の長さの書き込みを許可した場合、どのような地獄が解き放たれるかということです。