加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

发布时间:2020-12-14 01:13:32 所属栏目:Linux 来源:网络整理
导读:在 Linux write()函数中处于相当高的级别,它会过滤掉写入0个长度缓冲区的请求.这是有道理的.谁想要操作系统浪费它的时间钻孔层只是为了确定没有工作要做? 好吧……我 它与这个question有关;如果握手错误的话,如果地址(在数据之前在总线上发送)会产生错误,那
在 Linux write()函数中处于相当高的级别,它会过滤掉写入0个长度缓冲区的请求.这是有道理的.谁想要操作系统浪费它的时间钻孔层只是为了确定没有工作要做?

好吧……我

它与这个question有关;如果握手错误的话,如果地址(在数据之前在总线上发送)会产生错误,那么发现bit-banged I2C驱动程序将提供一个可能有用的返回码.

可以在地址之后发送虚拟数据,但不能发送我正在使用的设备. (也许我会尝试阅读……).

所以问题是:如果内核允许零(0)长度写入,会释放什么样的地狱?

解决方法

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

这是难以形容的邪恶.这是计算机编程相当于一个腐朽的官僚机构,每个部门要求你填写一个表格,其中包含与你给前一个部门相同的大部分信息,但由于每个表格上有不同的信息,他们不会只是复制你给其他人的表格. Ptui!

程序员时间很贵,CPU时间便宜.要求程序员编写相同的API调用N次以消除API本身可以自行解决的一些世界状态尝试将其翻转.

因此,最佳做法是让驱动程序尽一切可能确保write()成功.如果可以预先通过检查世界的某个状态来预测它不能成功,那么可能应该是ioctl().

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读