POSIX 将文本文件定义为:
包含组织成一行或多行的字符的文件。
POSIX 将一行定义为
零个或多个非换行符加上终止换行符的序列。
鉴于此,Linux字符设备驱动程序的功能是否应该在到达EOF/没有更多数据时read()
附加到用户缓冲区?'\n'
在经典的 Unix 中,字符设备和块设备之间的区别在于块设备支持查找,这意味着它们是可寻址的,以固定大小的磁盘块为单位。字符设备不支持查找,它们只是传递或接受字符流。
在 linux 中,设备驱动程序被实现为一个结构,包含一些标志和参数以及一组函数指针,实现 read()/write()/etc 的方法。块(磁盘)驱动程序也将实现 seek(),甚至可能实现 mmap()。
通常,设备驱动程序不会干扰正在传输的实际内容,它们仅使用设备所需的(硬件)协议(例如操作内部控制寄存器、检查状态寄存器、.. ..)
char 驱动程序的概念类似于流。在这种情况下,read
只需返回接下来发生的任何可用内容。现在可用的通常是其驱动程序的设备定义的一部分。如果设备返回换行符,那么驱动程序也应该如此。请注意,这意味着设备将在所有平台上返回换行符,而不仅仅是 Linux。
一般来说,解释返回的字节read
是一个更高层次的抽象问题。在策略与机制方面,char 驱动程序可以被认为是提供机制,将策略留给更高层。