Linux字符设备 - 如果读取缓冲区太小,该怎么办?

时间:2016-06-09 21:49:29

标签: linux linux-kernel linux-device-driver android-kernel

我正在创建一个创建角色设备的linux设备驱动程序。 它在读取时返回的数据在逻辑上被分为16个字节的单位。

我计划通过返回许多适合读取缓冲区的单元来实现这种划分,但是如果读取缓冲区太小(<16字节),我不知道该怎么办。

我该怎么办?或者,有没有更好的方法来实现我想要代表的分工?

1 个答案:

答案 0 :(得分:5)

您可以像数据报套接字设备驱动程序一样:它始终只返回一个数据报。如果读取缓冲区较小,则丢弃多余的内容 - 调用者有责任为整个数据报提供足够的空间(通常,应用程序协议指定最大数据报大小)。

设备的文档应指定它以16字节为单位工作,因此调用者没有理由想要提供小于此的缓冲区。因此,由于上述丢弃而导致的任何丢失数据都可能被视为调用应用程序中的错误。

但是,如果呼叫者要求,一次返回超过16个也是合理的 - 这表明应用程序会将其拆分为单元本身。这可能会提高性能,因为它可以最大限度地减少系统调用。但如果缓冲区不是16的倍数,则可以丢弃最后一个单元的剩余部分。只要确保这是记录在案的,所以他们知道要使它成为一个倍数。

如果您担心像cat这样的通用应用程序,我认为您不需要这样做。我希望他们使用非常大的输入缓冲区,仅仅是出于性能原因。