Linux字符设备是否应使用换行符终止read()

时间:2016-10-19 09:23:05

标签: linux linux-kernel posix chardev

POSIX将text file定义为:

  

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

POSIX将line定义为

  

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

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

2 个答案:

答案 0 :(得分:1)

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

通常,解释read返回的字节是更高级别的抽象问题。在策略与机制方面,可以将char驱动程序视为提供机制,将策略留给更高层。

答案 1 :(得分:1)

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

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

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