gpt4 book ai didi

io - 以零长度调用 write() 的后果是什么?

转载 作者:行者123 更新时间:2023-12-04 17:59:34 27 4
gpt4 key购买 nike

在 Linux 中处于相当高的水平 write()函数,它过滤掉写入 0 长度缓冲区的请求。这是有道理的。谁会希望操作系统浪费时间钻探层只是为了确定没有工作要做?
嗯……我。
它与I2C write acknowledge polling in Linux Kernel有关;并且发现如果地址(在数据之前在总线上发送)将在握手错误时给出错误,则位碰撞 I2C 驱动程序将给出一个潜在有用的返回代码。
可以在地址后发送虚拟数据,但不能使用我正在使用的设备。 (也许我会尝试阅读...)。
所以问题是:如果内核允许零 (0) 长度的写入,将会释放什么样的 hell ?

最佳答案

您所描述的内容基本上与感染需要不可预测内存量的几个 Windows API 相同。实践是在没有缓冲区的情况下调用它们来放置它们的工作,无论如何它们都会完成工作,而不存储结果,而是计算它们沿途需要的字节数。然后您分配一个该大小的缓冲区,并在知道大小的情况下再次使用该缓冲区调用该函数。

这是不可描述的邪恶。这是计算机编程相当于腐朽的官僚机构,其中每个部门都要求您填写一份表格,其中包含与您提供给前一个部门的大部分信息相同的信息,但由于每个表格上都有一些不同的信息,他们不会只是复制你给其他人的表格。噗!

程序员时间很贵,CPU 时间很便宜。要求程序员编写 N 次相同的 API 调用来推测 API 本身可以自行解决的一些世界状态,试图将其颠倒过来。

那么,最佳实践是让驱动程序尽其所能确保您的 write() 成功。如果可以通过检查世界的某些状态来提前预测它无法成功,那么也许应该使用 ioctl()。

关于io - 以零长度调用 write() 的后果是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1255307/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com