Skip to content

This is a exam project about creating a simple shell (Micro bash)

Notifications You must be signed in to change notification settings

nenieiri-42Yerevan/Microshell_Exam_Rank_04

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Subject

Assignment name : microshell
Expected files : *.c *.h
Allowed functions: malloc, free, write, close, fork, waitpid, signal, kill, exit, chdir, execve, dup, dup2, pipe, strcmp, strncmp


Write a program that will behave like executing a shell command

  • The command line to execute will be the arguments of this program
  • Executable's path will be absolute or relative but your program must not build a path (from the PATH variable for example)
  • You must implement "|" and ";" like in bash
    • we will never try a "|" immediately followed or preceded by nothing or "|" or ";"
  • Your program must implement the built-in command cd only with a path as argument (no '-' or without parameters)
    • if cd has the wrong number of argument your program should print in STDERR "error: cd: bad arguments" followed by a '\n'
    • if cd failed your program should print in STDERR "error: cd: cannot change directory to path_to_change" followed by a '\n' with path_to_change replaced by the argument to cd
    • a cd command will never be immediately followed or preceded by a "|"
  • You don't need to manage any type of wildcards (*, ~ etc...)
  • You don't need to manage environment variables ($BLA ...)
  • If a system call, except execve and chdir, returns an error your program should immediatly print "error: fatal" in STDERR followed by a '\n' and the program should exit
  • If execve failed you should print "error: cannot execute executable_that_failed" in STDERR followed by a '\n' with executable_that_failed replaced with the path of the failed executable (It should be the first argument of execve)
  • Your program should be able to manage more than hundreds of "|" even if we limit the number of "open files" to less than 30.

Examples

For example this should work:

$>./microshell /bin/ls "|" /usr/bin/grep microshell ";" /bin/echo i love my microshell
microshell
i love my microshell
$>

Hints

  • Don't forget to pass the environment variable to execve
  • Do not leak file descriptors!

Additional information

For usage just run make.

For exam you only need to write whole code from FOR_EXAM_(WHOLE_CODE_IN_ONE_FILE).c file.