Linux中I/O设备分为两类:块设备和字符设备。两种设备本身没有严格限制,但是,基于不同的功能进行了分类。
(1) 字符设备:提供连续的数据流,应用程序可以顺序读取,通常不支持随机存取。相反,此类设备支持按字节/字符来读写数据。举例来说,调制解调器是典型的字符设备。
(2) 块设备:应用程序可以随机访问设备数据,程序可自行确定读取数据的位置。硬盘是典型的块设备,应用程序可以寻址磁盘上的任何位置,并由此读取数据。此外,数据的读写只能以块(通常是512B)的倍数进行。与字符设备不同,块设备并不支持基于字符的寻址
简单来讲,块设备可以随机存取,而字符设备不能随机存取.磁盘、内存、显示器都是块设备,字符设备如键盘和串口。块设备一般都有缓存,而字符设备一般都没有缓存。
例如:
#include#include #include int main(void){ int i; for(i=0; i<2; i++){ fork(); printf("-"); } return 0;}
最终输出8个"-"
就是因为块设备有缓存的原因
有趣有爱有价值: