在 Linux 中处于相当高的水平write()
函数,它会过滤掉写入 0 长度缓冲区的请求。这是有道理的。谁愿意操作系统浪费时间钻探各层只是为了确定没有任何工作要做?
嗯……我。
这与Linux 内核中的 I2C 写入确认轮询 https://stackoverflow.com/questions/1195659/i2c-write-acknowledge-polling-in-linux-kernel;并且发现,如果握手错误,地址(在数据之前在总线上发送)将给出错误,则位绑定的 I2C 驱动程序将给出潜在有用的返回代码。
人们可以在地址之后发送虚拟数据,但不能使用我正在使用的设备。 (也许我会尝试阅读......)。
所以问题是:如果内核允许零 (0) 长度写入,将会引发什么样的地狱?
您所描述的内容本质上与感染多个需要不可预测的内存量的 Windows API 的邪恶行为相同。实践是在没有缓冲区来放置工作的情况下调用它们,无论如何它们都会完成工作,不存储结果,而是计算沿途所需的字节数。然后分配该大小的缓冲区,并在知道大小的情况下再次使用该缓冲区调用该函数。
这是无法形容的邪恶。这是相当于腐朽的官僚机构的计算机编程,每个部门都要求您填写一份表格,其中的信息与您提供给前一个部门的信息大部分相同,但由于每个表格上都有一些不同的信息,他们不会只是拿走你给其他人的表格的副本。噗!
程序员的时间很昂贵,CPU 的时间很便宜。要求程序员编写相同的 API 调用 N 次,以弄清楚 API 本身可以自行解决的某种世界状态,试图颠覆这一现状。
那么,最佳实践是让驱动程序尽一切努力确保 write() 成功。如果可以通过检查世界的某些状态来提前预测它无法成功,那么也许应该是 ioctl()。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)