Linux字符设备应该以换行符结束read()

POSIX将文本文件定义为:

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

POSIX定义一行

一系列零个或多个非换行符加上一个终止换行符。

鉴于此,如果Linux字符设备驱动程序的read()函数在到达EOF时将'\n'附加到用户缓冲区中,则不再有数据?

字符驱动程序的概念类似于一个流 。 有鉴于此, read只是返回接下来可能发生的任何事情。 现在可用的通常是其驱动程序的设备定义的一部分。 如果设备返回换行符,则驱动程序也应如此。 请注意,这意味着设备将在所有平台上返回换行符,而不仅仅是Linux。

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

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

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

通常,设备驱动程序不会干扰正在传输的实际内容,只能使用设备所需的(硬件)协议(例如操纵内部控制寄存器,检查状态寄存器等)将字节或块移入/移出设备。 ..)