Exemplo n.º 1
0
def append(filename, writer): 
    inum = file_name_layer.lookup(filename, path_name_layer._wd)
    i = inode_number.inode_number_to_inode(inum)
    bnum = i.blocks[i.size - 1]
    blk = blockLayer.block_number_to_block(bnum)
    buf = list(writer)
    b_start = 0
    while (b_start < len(buf)):
        while (blk.size < blockLayer._block_size):
            if(b_start == len(writer)):
                return 0
            buf_string = "".join(buf[b_start])
            blk.write(blk.size, buf_string, 0, 1)
            b_start += 1
        if(b_start < len(buf)):
            bnum = i.add_block()
            blk = blockLayer.block_number_to_block(bnum)
Exemplo n.º 2
0
def cat(filename): 
    num_blocks = 0
    pointer = 0
    count = 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):
            num_blocks += 1 
    buf = [""] * (blockLayer._block_size * num_blocks)
    while(pointer < num_blocks):
        block = blockLayer.block_number_to_block(i.blocks[pointer])
        buf = block.read(0, buf, count, block.size)
        pointer += 1
        count += blockLayer._block_size 
    buf = "".join(buf)
    print buf 
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
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    
Exemplo n.º 5
0
def inode_number_to_block(offset, inode_num):
    inode = inode_number_to_inode(inode_num)
    o = offset / blockLayer.get_block_size()
    b = inode.index_to_block_number(o)
    return blockLayer.block_number_to_block(b)
Exemplo n.º 6
0
 def inode_to_block(self, byte_offset):
     o = byte_offset / blockLayer.get_block_size()
     b = self.index_to_block_number(o)
     return blockLayer.block_number_to_block(b)
Exemplo n.º 7
0
file_name_layer.create_file("test_1", d_inode)
file_name_layer.create_file("test_2", d_inode)
file_name_layer.create_file("test_3", d_inode)
file_name_layer.create_file("test_4", d_inode)

# Creates Kris directory
file_name_layer.mkdir("Kris", d_inode)
d_inode2 = path_name_layer.path_to_inode_number("Kris", d_inode)

# Creates Docs directory
file_name_layer.mkdir("Docs", d_inode2)
d_inode_docs = path_name_layer.path_to_inode_number("Docs", d_inode2)
file_name_layer.create_file("Doc_1", d_inode_docs) # I want to write to this file
inum = path_name_layer.path_to_inode_number("Doc_1", d_inode_docs)
i = inode_number.inode_number_to_inode(inum)
block = blockLayer.block_number_to_block(i.blocks[0])
s = "Testing 1... 2... 3... 4.... 5... 6.... 7...."
block.write(0, s, 0, len(s))

# Creates Pics directory
file_name_layer.mkdir("Pics", d_inode2)
d_inode_pics = path_name_layer.path_to_inode_number("Pics", d_inode2)
file_name_layer.create_file("img_1", d_inode_pics)
file_name_layer.create_file("img_2", d_inode_pics)

# Creates Music directory
file_name_layer.mkdir("Music", d_inode2)
d_inode_music = path_name_layer.path_to_inode_number("Music", d_inode2)
file_name_layer.create_file("song_1", d_inode_music)
file_name_layer.create_file("song_2", d_inode_music)