第五章 文件系统的系统调用

文件描述符表、文件表、索引节点表

文件描述符:用于内核访问文件,打开或者新建文件时,会返回一个文件描述符,内核使用文件描述符访问文件
分配原则:最小分配
取值范围:非负整数,0~MAX-1 其中默认是0、1、2用于系统标准输入、标准输出、标准错误

系统调用open

系统调用open是进程要存取一个文件中的数据所必须采取的第一步,因为只有通过系统调用open才能返回对应的文件描述符。文件描述符标志特定进程正在访问的文件。每运行一个进程,内核会默认为其打开三个进程描述符,0:标准输入,1:标准输出,2:标准错误。

fd=open(pathname,flags,modes);

例如

int fd = open("/Users/hupac/Public/k.c", 0666, O_RDWR);

其中pathname为路径名,0666为访问权限,O_RDWR给出文件的访问许可权,这里是仅读写。由代码可见,open系统调用返回的整数称为文件描述符。其他与文件操作相关的系统调用如读read,写write,定位lseek都要使用系统调用open返回的文件描述符。
open系统调用过程:

  1. 内核用算法namei在文件系统中查找文件名参数。若文件不存在或不允许存取,则返回错误。
  2. 内核找到内存中的索引节点后,它检查打开文件的许可权,然后为该文件在文件表中分配一个表项,设置引用数+1和文件内部偏移量。
    文件表中存放着文件中的字节偏移量和指向文件索引节点的指针。
  3. 内核分配用户文件描述符表项,将指针指向文件表项。
  4. 最后返回文件描述符。
    每个open调用都导致用户描述符表和内核文件表中分配一个唯一表项,但在内核的内存索引节点表中,对每个文件只有一个表项。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值