2

POSIX 将文本文件定义为:

包含组织成一行或多行的字符的文件。

POSIX 将一行定义为

零个或多个非换行符加上终止换行符的序列。

鉴于此,Linux字符设备驱动程序的功能是否应该在到达EOF/没有更多数据时read()附加到用户缓冲区?'\n'

4

2 回答 2

1

在经典的 Unix 中,字符设备和块设备之间的区别在于块设备支持查找,这意味着它们是可寻址的,以固定大小的磁盘块为单位。字符设备不支持查找,它们只是传递或接受字符流。

在 linux 中,设备驱动程序被实现为一个结构,包含一些标志和参数以及一组函数指针,实现 read()/write()/etc 的方法。块(磁盘)驱动程序也将实现 seek(),甚至可能实现 mmap()。

通常,设备驱动程序不会干扰正在传输的实际内容,它们仅使用设备所需的(硬件)协议(例如操作内部控制寄存器、检查状态寄存器、.. ..)

于 2016-10-19T10:51:35.370 回答
1

char 驱动程序的概念类似于。在这种情况下,read只需返回接下来发生的任何可用内容。现在可用的通常是其驱动程序的设备定义的一部分。如果设备返回换行符,那么驱动程序也应该如此。请注意,这意味着设备将在所有平台上返回换行符,而不仅仅是 Linux。

一般来说,解释返回的字节read是一个更高层次的抽象问题。在策略与机制方面,char 驱动程序可以被认为是提供机制,将策略留给更高层。

于 2016-10-19T10:09:50.730 回答