关闭

Linux设备文件和普通文件

发表于:2014-5-15 09:46

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:ONIM    来源:51Testing软件测试网采编

  很多人认为文件是一些存储在磁盘上的数据,但是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 );
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号