Skip to content

Aiming to mimic a UNIX-like shell, this system manages files and directories with operations like cd, ls, tree, mkdir, touch, edit, rm, rmdir, cp, mv, and find. It uses a hierarchical tree structure where each node represents a file or directory.

Notifications You must be signed in to change notification settings

AnuragFrancis/File-System-Emulator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 

Repository files navigation

Problem Statement Analysis

The system aims to manage files and directories similar to a UNIX-like shell environment. Key operations include navigation (cd), listing contents (ls), tree structure display (tree), creation (mkdir, touch), editing (edit), deletion (rm, rmdir), moving/copying (cp, mv), and searching (find). The operations are implemented using a hierarchical structure resembling a directory tree, where each node represents a directory or file.

Selected Data Structure The chosen data structure is a modified N-ary tree where each node can have multiple children (child pointer) and a sibling (link pointer). Additionally, each node has a parent pointer for easy traversal towards the root. This structure supports efficient traversal and manipulation of directories and files.

Algorithms

Let's review the algorithms provided for various operations:

print_tree(root, prev_struct): Prints the entire file system tree recursively, displaying node names with proper indentation (prev_struct).

print_ls(node=pwd->child): Prints the contents of a directory (pwd) by iterating through its child nodes (node).

pwd_str(root, pwd): Constructs and returns the full path string of a node (pwd) relative to the root.

find_names(root, pwd, name): Returns a list of paths containing nodes with a given name (name) starting from pwd.

find_on_pwd(pwd, name): Finds a node with a specific name (name) in the current directory (pwd).

find_node(root, pwd, path): Returns the node located at a given path (path) relative to root or pwd.

cd(root, pwd, path): Changes the current directory (pwd) to the one specified by path.

create(root, pwd, path, type): Creates a new node (file or directory) at a specified path (path) under pwd.

remove(root, pwd, path): Removes the node located at path under pwd.

dupl(root, pwd, src_path, dst_path, keep): Copies or moves a node from src_path to dst_path.

cat(root, pwd, path): Displays the contents of a file located at path.

edit(root, pwd, path): Edits the contents of a file located at path.

chmod(root, pwd, path, new_modes): Changes the permissions (perm) of a node located at path.

Dry Run Example

Given the operations and algorithms, a dry run example might proceed as follows:

Initialization: Start from the root directory.

cd /home/user: Navigate to /home/user. ls: List contents (Desktop/, Documents/, Downloads/, Pictures/, .bashrc). touch prog1.c: Create a new file prog1.c. Understanding the Code: Each operation (cd, ls, touch, etc.) manipulates the file system tree by traversing nodes, creating or removing nodes, and updating metadata.

Summary

The provided solution outlines a comprehensive approach to implementing a file management system using a hierarchical tree structure. The algorithms efficiently handle operations like navigation, creation, deletion, and modification of files and directories. The system closely resembles UNIX-like shell commands, making it intuitive for users familiar with such environments.

This structured approach ensures that each operation is implemented with respect to the file system's hierarchical nature and efficiently manages nodes using appropriate data structures and algorithms.

About

Aiming to mimic a UNIX-like shell, this system manages files and directories with operations like cd, ls, tree, mkdir, touch, edit, rm, rmdir, cp, mv, and find. It uses a hierarchical tree structure where each node represents a file or directory.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages