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
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
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
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)
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
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