linux普通文件的指针,Linux 普通文件与设备文件

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

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

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

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

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

磁盘连接和设备连接

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

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

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

如: #include

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 );

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值