def touch(fs: FileSystem, name: str): """ 新建文件 :param fs: :param name: :return: """ if name == '-h': print(""" 新建文件 touch file_name 不可跨目录层级调用 """) return pwd_cat = fs.load_pwd_obj() # 当前目录 flag, info = pwd_cat.check_name(name) if not flag: print(info) return new_inode = fs.get_new_inode(user_id=fs.current_user_id) new_inode.target_type = 0 # 文件 pwd_cat.add_new_file(name, new_inode.i_no) fs.write_back(fs.pwd_inode, bytes(pwd_cat)) new_inode.write_back(fs.fp)
def mkdir(fs: FileSystem, name: str): """ 新建目录 新建索引对象-->新建目录对象-->将前两者作为键值对加入当前索引对应的目录-->申请空间存放新建的目录 :param fs: :param name: 文件夹名称 :return: """ if name == '-h': print(""" 新建文件夹 mkdir dirname 只可以在当前目录的新建不可跳级新建 获得当前目录对象pwd_obj 检查命名冲突,pwd_obj.check_name(name) 获取新的inode对象 将新建文件夹的名字和inode号作为键值对写回pwd_obj 写回新建的目录对象new_obj,并且将其开辟的新的地址块号添加到对应的inode对象中 写回新的inode对象 """) return pwd_cat = fs.load_pwd_obj() # 当前目录 flag, info = pwd_cat.check_name(name) if not flag: print(info) return new_inode = fs.get_new_inode(user_id=fs.current_user_id) pwd_cat.add_new_cat(name=name, inode_id=new_inode.i_no) new_cat = fs.get_new_cat(name=name, parent_inode_id=fs.pwd_inode.i_no) fs.write_back(new_inode, bytes(new_cat)) # 写回新建目录 fs.write_back(fs.pwd_inode, bytes(pwd_cat)) # 写回当前目录,因为新建的目录挂载当前目录也被修改了 new_inode.write_back(fs.fp)
def useradd(fs: FileSystem, *args): """ 添加用户,并将用户目录挂载到base/home/下 :param fs: :return: """ if args and args[0] == '-h': print(""" 添加用户 使用方法直接输入useradd不需要参数 只有root用户可以使用此命令 添加完用户后会在base/home/下新建对应的用户文件目录 命名为用户名 """) return if fs.current_user_id != ROOT_ID: print("非root用户无权添加账户") return user_name, user_id = fs.add_user(fs.current_user_id) # 通过base目录切换到home目录 base_cat = fs.load_base_obj() home_id = base_cat.get_dir('home') home_inode = fs.get_inode(home_id) home_cat = home_inode.get_target_obj(fs.fp) if not home_cat: return # 获取新的目录的inode,并添加到home目录中 new_inode = fs.get_new_inode(user_id=user_id) home_cat.add_new_cat(name=user_name, inode_id=new_inode.i_no) # 新建新的用户目录 new_cat = fs.get_new_cat(name=user_name, parent_inode_id=home_id) # 写回新建的目录,和home目录 fs.write_back(new_inode, bytes(new_cat)) fs.write_back(home_inode, bytes(home_cat)) # 写回对应的被修改的节点 new_inode.write_back(fs.fp) home_inode.write_back(fs.fp)