日期:2014-05-16  浏览次数:20596 次

块设备与字符设备 怎么回事
这两个设备操作有点不明白了

首先在/dev/目录下 c开始的是字符设备 b开始的是块设备

问题1:是/dev目录下,显示这些字符设备和块设备文件名有什么作用(都不能直接对这些设备文件进行操作 比如  
  cat /dev/tty0都不行)

查一下 块设备的操作 要用mount挂载之后进行操作  
问题2:那么将块设备挂载到某个目录下如/mnt/sd目录下 此时往/mnt/sd目录下考文件 是不是直接就已经拷到设备中了?  
  对应的/dev/目录下的此块设备文件会有什么变化么?

问题3:字符设备是不是只能用open,read等函数进行操作,那可不可以用open,read函数操作块设备呢?

问题比较多,确实不太明白,请赐教!

------解决方案--------------------
问题2:那么将块设备挂载到某个目录下如/mnt/sd目录下 此时往/mnt/sd目录下考文件 是不是直接就已经拷到设备中了?
是的。比如我要把一个文件拷贝到u盘上,步骤是这样:
# mount /dev/sdb1 /mnt/usb/
# cp abc.txt /mnt/usb
# ls /mnt/usb 可以看到/mnt/usb里面多了一个abc.txt文件。
# umount /mnt/usb
然后把u盘拿到windows里面,就可以看到abc.txt文件已经被拷贝到u盘里了。

对应的/dev/目录下的此块设备文件会有什么变化么?
应该不会吧。我觉得这种设备文件其实不是真正的文件,只不过是记录了一些信息,比如主设备号、次设备号等等。比如u盘,从设备文件看到的只是一个关于这个盘的总体信息,和盘里的内容没关系。
------解决方案--------------------
//问题1:是/dev目录下,显示这些字符设备和块设备文件名有什么作用?
设备文件名是对应着这个设备的驱动在注册时的名称的。设备文件不同于普通文件,它存储着这个设备的主、次设备号,在操作设备时需要这些信息,只是设备文件和文件系统把这些都做好了,应用层可以认为操作设备文件就是在操作设备。一般设备要打开是需要open对应的设备文件的,但有的可能不是这样的,然后是read,write.....等。cat /dev/tty0应该是不行的。

//问题3:字符设备是不是只能用open,read等函数进行操作,那可不可以用open,read函数操作块设备呢?
这个是可以的,字符设备和块设备在应用层的接口是一样的,只是在驱动内部实现上不一样,这个具体的就看块设备和字符设备的区别了。
------解决方案--------------------
设备文件是设备的“代表”,当你用open,read操作设备文件的时候,实际访问的是设备。

关于三种设备,我的理解是:
所有设备都可以当作字符设备,这是最基础的,就是对某个地址读/写数据,
但是存储和网络传输是两类最常用的功能,各自有许多共同点,所以就抽象出了块设备和网络设备,以便于使用。

以上仅供参考。