-
功能:获取当前工作目录。
-
实现:调用 ip->i_op->igetdents。
-
功能:创建管道。
-
实现:
- 调用 pipealloc 分配两个管道文件;
- 给当前进程分配两个文件描述符来代指那两个管道文件;
- 将文件描述符拷贝到用户空间。
- 功能:复制文件描述符。
- 实现:调用 f->f_op->dup。
-
功能:复制文件描述符,并指定了新的文件描述符。
-
实现:调用 assist_setfd,如果新的文件描述符已经打开,
则会关闭该文件。然后使用新文件描述符绑定文件
(注意:在多线程环境关闭和重用打开文件表项应做到原子性)。
最后调用 f->f_op->dup 将文件引用计数增加。
-
功能:切换工作目录。
-
实现:调用 namei 查找文件的 inode,然后将进程
当前目录修改为该 inode。
-
功能:打开或创建一个文件。
-
实现:如果传入了
O_CREAT,则调用 assist_create,
该函数最后调用 dp->i_op->icreate 尝试创建一个 inode
(如果已经存在则相当于做查找);否则,调用 find_inode
进行查找。然后为 inode 文件分配一个 file 结构体并填充,
为进程分配一个文件描述符,最后返回该文件描述符。
-
功能:关闭一个文件描述符。
-
实现:调用 generic_fileclose。
-
功能:获取目录的条目。
-
实现:动态申请一个空间作为缓冲区,调用 ip->i_op
->igetdents 将该目录中所有条目信息填充到该缓冲区,
再调用 either_copyout 将缓存区的内容拷贝到用户空间,
最后归还申请的空间。
-
功能:从一个文件描述符中读取。
-
实现:调用 f->f_op->read。
-
功能:从一个文件描述符中写入。
-
实现:调用 f->f_op->write。
-
功能:移除指定文件的链接(可用于删除文件);
-
实现:调用 do_unlinkat,该函数会调用 dp->i_op
->ientrydelete 删除父目录中的该文件的 fcb,然后
调用 dp->i_op->iunlock_put,该操作会导致文件的
磁盘数据被删除。
-
功能:创建目录。
-
实现:调用 assist_icreate,创建一个目录类型的文件。
- 功能:获取文件状态;
- 实现:调用 f->f_op->fstat。