示例#1
0
def chDir(file_name, current_inode, currentUser):

    if file_name == "..":
        if len(ram.user_space[currentUser][1]) == 0:
            return 0

        new_inode = ram.user_space[currentUser][1].pop(-1)
        ram.user_space[currentUser][0] = new_inode
        return 0

    dir_table = get_dir_table(current_inode)

    if file_name not in dir_table:
        # file_not_found()
        return -11


    new_inode = dir_table[file_name]
    if ram.inode_table[new_inode][1] == 0:
        ram.user_space[currentUser][1].extend([current_inode])
        ram.user_space[currentUser][0] = new_inode
        return 0
    else:
        # file_not_a_dir()
        return -5
示例#2
0
def blocksConsumedByFile(filename, current_inode):
    filename = filename
    dir_table = get_dir_table(current_inode)
    if filename in dir_table:
        return 0, ram.inode_table[dir_table[filename]][9]
    else:
        # file_not_found()
        return -11, -11
示例#3
0
def ls(current_inode):
    current_dir = get_dir_table(current_inode)
    dirs = " "
    files = " "
    for fil in current_dir:
        if ram.inode_table[current_dir[fil]][1] == 0:
            dirs = dirs + fil + " ";
        else:
            files = files + fil + " ";

    # dirs on left of -
    return dirs + "-" + files
示例#4
0
def Open(fname, current_inode):
    current_dir_table = get_dir_table(current_inode)

    if fname not in current_dir_table:
        return -11, -11
    file_inode = current_dir_table[fname]
    if ram.inode_table[file_inode][1] == 0:
        return -10, -10

    return 0, OpenFile(fname=fname,
                       mode="this para is no longer needed here",
                       parent_inode=current_inode,
                       file_inode=file_inode)
示例#5
0
def trwt( fname, method, current_inode, arguments ,currentUser, delay = 0):

    thread_data_title = fname + "  " + str(method)
    current_file_table = get_dir_table(current_inode)
    if fname not in current_file_table:
        return -4

    file_inode = current_file_table[fname]

    name = fname
    status, call = Open(fname, current_inode);
    oft_tname = str(file_inode) + "_t"
    if oft_tname not in ram.oft:
        ram.oft[oft_tname] = [0, call];
    
    if file_inode in ram.ofp_count:
        ram.ofp_count[file_inode] = ram.ofp_count[file_inode] + 1
    else:
        ram.ofp_count[file_inode] = 1

    if method == 0:
        while True:
            if ram.oft[oft_tname][0] == 0 :
                break
        start, end = arguments[0], arguments[1]
        t = threading.Thread(target=pread, args=(file_inode, start, end, thread_data_title, currentUser, delay),daemon=True)
        t.start()
        return 0

    if method == 1:
        # dont allow while semaphore 
        while True:
            if ram.oft[oft_tname][0] == 0:
                break
        loc, text = arguments[0], arguments[1]
        ram.oft[oft_tname][0] =  1

        t = threading.Thread(target=pwrite, args=(file_inode, loc, text, thread_data_title, currentUser, delay))
        t.start()
        return 0

    if method == 2:
        while True:
            if ram.oft[oft_tname][0] == 0:
                break
        size = arguments[0]
        ram.oft[oft_tname][0] =  1
        t = threading.Thread(target=ptruncate, args=(file_inode, size, thread_data_title,  currentUser, delay))
        t.start()
        return 0
示例#6
0
def move(fil1, fil2, parent_dir_inode):

    dir_table = get_dir_table(parent_dir_inode)
    if fil2 not in dir_table:
        # fname_not_in_dir();
        return -4

    if fil1 not in dir_table:
        # fname_not_in_dir();
        return -4
    fil2_inode = dir_table[fil2]

    if ram.inode_table[fil2_inode][1] != 0:
        # file_not_a_dir()
        return -5
    else:
        fil1_inode = update_file_link_n_parent_dir(fil1, parent_dir_inode)
        if fil1_inode == None:
            # fname_not_in_dir();
            return -4
        add_link2file(fil1, fil1_inode, fil2_inode)
        return 0