Linux设备文件和普通文件

欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入

  很多人认为文件是一些存储在磁盘上的数据,但是Linux采用了一种更为抽象的方法。将设备抽象成文件。设备文件和普通文件一样具有文件名、另一个i节点号、一个文件所有者、一个权限位集合和最近修改时间。平时了解的和文件有关的所有内容都将被运用于终端和其他的设备。

  普通文件,即常用的磁盘文件由字节组成,磁盘文件中的字节数就是文件大小。而设备文件是链接,不是容器。键盘和鼠标不存储点击数:)设备文件的i节点存储的是指向内核的子程序的指针,而不是文件的大小和存储列表。内核中传输设备数据的子程序被称为设备驱动程序。

  文件类型的区别体现在i节点上:

  磁盘文件的i节点包含指向数据块的指针列表

  设备文件的i节点包含一个指向内核中设备驱动程序的指针

  磁盘连接和设备连接

  与磁盘文件的连接通常包含内核缓冲区,即磁盘连接具有缓冲区这样一个属性。到终端的连接则不同,进程需要尽快的将数据传送出去。

  也就是说,二者的连接属性不同,针对于某一个特定的文件与设备的连接,可以思考:1.连接有哪些属性?2.如何检测当前属性?3.如何改变当前属性?

  关于2和3的答案,是使用系统调用fcntl,文件描述符的属性被编码在一个整数的位中。fcntl通过读写该整数位来控制文件描述符。

  如:

  #include<fcntl.h>

  int s;

  s = fcntl(fd, F_GETFL);

  s |= OSYNC;

  result = fcntl(fd, F_SETFL, s);

  从内核中读取设置到变量,修改变量值,将设置返回内核,是Linux中读取和修改连接属性的典型方法。

  fcntl并不是仅有的用来设置文件描述符属性的方法。通常在打开一个文件时,应该知道需要怎样的设置。可以通过系统调用open的第二个参数的一部分来设置文件描述符的属性。

  如: fd = open(FILE, OWRONLY | O_APPEND | O_SYNC );

往往为了自己的不能失败,而处心积虑前怕狼后怕虎,

Linux设备文件和普通文件

相关文章:

你感兴趣的文章:

标签云: