UNIX:描述符和文件结构

对于一个打开的文件,UNIX提供了三种数据结构来表示。

1)进程地址空间中的进程表项中的描述符表。其实就是一个数组,每一项就是一个k-v,k是fd,v是该描述符对应的打开文件在内核中的文件表项的地址。

2)文件表项。包括文件状态标志当前文件偏移量、v节点的地址。文件状态标志位提供一些文件操作的选项、文件偏移量提供当前文件在内核中的读写初识位置、v节点地址是指向v节点的指针。

3)v节点和i节点。v节点包含了文件的类型和对于此文件进行操作的各种函数指针集合、i节点指针指向i节点。i节点包括文件的所有者、文件长度、指向文件实际数据块在磁盘上的位置

一般来说,一个进程中的文件描述符对应于一个内核中的文件表项。这是因为每个进程都有各自的对该文件的一个当前偏移量。一个给定的文件,在unix系统中对应于一个v节点表项。

多个文件表项可以对应于同一个v节点表项。但是当多个进程同时对这一个临界区(文件)进行写操作的时候会发生不同步带来的混乱。因此应当保证一个进程对于当前文件的操作是原子的。例如O_APPEND标志就是表示当前进程对于该文件的追加是原子的。

多个文件表项在dup或者fork调用情况下,会使得多个进程表项共同指向同一份文件表项。dup用来复制现有的文件描述符。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值