为新文件分配索引节点(Inode的偏移量,编号)和活动索引节点,并把索引节点编号与文件分量名组成新目录项,记到目录中(相当于是写操作)。
在新文件所对应的活动索引节点中置初值,如置存取权限i_mode,连接计数i_nlink等。
分配用户打开文件表项和系统打开文件表项,置表项初值。包括在f_flag中置“写”标志,读写位移f_offset清零。
把各表项及文件对应的活动索引节点用指针连接起来,把文件描述字返回给调用者
把指定文件对应的目录项从所在的目录文件中除去,同时将目录项中i_link分量减1,如果i_link为零,则还要将此文件占用的存储空间释放。
检索目录,把对应的外存索引节点复制到活动索引节点表中。
根据输入参数mode值核对权限,如果非法,则打开失败。
为文件分配用户已打开表项和系统已打开表项,并为表项设置初值。通过指针建立表项与活动索引节点间联系。最后,返回用户已打开文件表项的序号(即文件描述字)。
一次打开就会有一个系统已打开表项,多个进程在打开这个文件的时候由f_count指示,close对应减小这个值
根据fd找到用户已打开文件表项,再找到系统已打开表项。释放用户已打开文件表项;
将系统已打开文件表项中的f_count减1,若非零,则还有进程共享此表项,直接返回;否则,释放此表项,并找到与之关联的活动索引节点;
将活动索引节点中的i_count减1,若非零,则还有用户进程正使用该文件,直接返回,否则,讲活动索引节点内容写回磁盘索引节点分区,并释放该活动索引节点。
根据f_flag中的信息,检查读操作是否合法,再根据当前位移量f_offset值,需读出的字节数,以及活动索引节点中i_addr指出的文件物理块存放地址,计算出相应的物理块地址,并读到缓冲区中,然后拷贝到bufp指向的用户主存区。
文件描述字fd必须指向一个用读或写方式打开的文件,当whence=0时,则f_offset被置为offset值,当whence=1时,则f_offset被置为文件当前位置加上offset值
静态共享(用户角度)
- 链接
- 符号链接共享(能够跨越不同的文件系统)
动态共享(进程角度)
检索目录找到oldnamep所指向文件的索引节点编号;
再次检索目录找到newnamep所指文件的父目录文件,并把上一步中获得的索引节点编号与newnamep构成一个新的目录项,加入到此目录文件中;
将对应索引节点连接计数分量i_nlink加一。