コード例 #1
0
ファイル: shell.py プロジェクト: kitsully/PFS
def rmdir(directory): 
    inum = file_name_layer.lookup(directory, path_name_layer._wd)
    i = inode_number.inode_number_to_inode(inum)
    if (i.inode_type == FileType.directory):
        blockLayer.release_block(i.blocks[0])
        inode_number.release_inode(inum)
        inode_directory = inode_number.inode_number_to_inode(path_name_layer._wd)
        block_directory = blockLayer.block_number_to_block(inode_directory.blocks[0])
        buf = [""] * block_directory.size
        buf = block_directory.read(0, buf, 0, block_directory.size)
        buf = "".join(buf)
        search = directory + "|" + str(inum) + ","
        buf = buf.replace(search, "")
        clear = "_" * 512
        block_directory.write(0, clear, 0, len(clear))
        block_directory.write(0, buf, 0, len(buf))
        if(len(buf) == 0): # checks to see if the directory is now empty
            block_directory.size = 0
    else:
        raise Exception("Inode %r is not of type directory." % inum)
コード例 #2
0
ファイル: shell.py プロジェクト: kitsully/PFS
def rm(filename): 
    num = 0
    inum = file_name_layer.lookup(filename, path_name_layer._wd)
    i = inode_number.inode_number_to_inode(inum)
    for b in i.blocks:
        if (b != -1):
            blockLayer.release_block(i.blocks[num])
        num += 1
    inode_number.release_inode(inum)
    inode_directory = inode_number.inode_number_to_inode(path_name_layer._wd)
    block_directory = blockLayer.block_number_to_block(inode_directory.blocks[0])
    buf = [""] * block_directory.size
    buf = block_directory.read(0, buf, 0, block_directory.size)
    buf = "".join(buf)
    search = filename + "|" + str(inum) + ","
    buf = buf.replace(search, "")
    clear = "_" * 512
    block_directory.write(0, clear, 0, len(clear))
    block_directory.write(0, buf, 0, len(buf))
    if(len(buf) == 0): # checks to see if the directory is now empty
        block_directory.size = 0    
コード例 #3
0
ファイル: shell.py プロジェクト: afanslau/unix_file_system
def rm(name,rmdir=False):
	#get the directory which contains the file by parsing the path
	#find the last slash in the path
	slashPos = []
	for i in range(len(name)):
		if name[i] == '/':
			slashPos.append(i)
	#if no slashes are found, use wd
	if len(slashPos) == 0:
		dir = FileNameLayer.wd
		matchName = name 
	elif slashPos[-1]==0:
		#if the last slash is the first char, use root dir
		dir = FileNameLayer.rootDirectory
		matchName = name[1:]
	else:
		#get the inode number for the path up to the last slash, which is the directory that contains the file
		dir = general_path_to_inode_number(name[:slashPos[-1]],createOnFailure=0)
		matchName = name[(slashPos[-1]+1):]
	#free the file's inode
	fd = OPEN(name)
	InodeNumberLayer.release_inode(fd.inodeNum)
	#remove the reference from wd
	contents = FileNameLayer.read(dir)
	list = ''.join(contents).split(',')
	i = 0

	while i < len(list):
		pair = list[i].split('|')
		#if the file is in the dir, remove it
		if pair[0] == matchName:
			list.pop(i)
			FileNameLayer.write(dir,','.join(list))
			return success 
		else:
			i += 1
	if rmdir:
		raise Exception("Directory not found")
	else:
		raise Exception("File not found")