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