Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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)