我正在创建一个创建字符设备的 linux 设备驱动程序。它在读取时返回的数据在逻辑上分为 16 字节单元。
我计划通过返回许多适合读取缓冲区的单元来实现此划分,但我不确定如果读取缓冲区太小(<16 字节)该怎么办。
我应该在这里做什么?还是有更好的方法来实现我想要代表的部门?
我正在创建一个创建字符设备的 linux 设备驱动程序。它在读取时返回的数据在逻辑上分为 16 字节单元。
我计划通过返回许多适合读取缓冲区的单元来实现此划分,但我不确定如果读取缓冲区太小(<16 字节)该怎么办。
我应该在这里做什么?还是有更好的方法来实现我想要代表的部门?
您可以像数据报套接字设备驱动程序一样行事:它总是只返回一个数据报。如果读取缓冲区较小,则丢弃多余的缓冲区——调用者有责任为整个数据报提供足够的空间(通常,应用程序协议指定最大数据报大小)。
您设备的文档应指定它以 16 字节为单位工作,因此调用者没有理由想要提供比这更小的缓冲区。因此,由于上述丢弃而丢失的任何数据都可能被视为调用应用程序中的错误。
但是,如果调用者要求,一次返回超过 16 个也是合理的——这表明应用程序本身会将其拆分为单元。这可能会提高性能,因为它可以最大限度地减少系统调用。但如果缓冲区不是 16 的倍数,您可以丢弃最后一个单元的剩余部分。只需确保记录在案,以便他们知道将其设为倍数。
如果您担心诸如 之类的通用应用程序cat
,我认为您不需要这样做。出于性能原因,我希望他们使用非常大的输入缓冲区。