Skip to content

This project is an attempt to create a simple shell in C

Notifications You must be signed in to change notification settings

Imane47250/Shell_project

Repository files navigation

Simple_shell Project

The main goal of this project is to Write a simple UNIX command interpreter.

  • Project simple_shell By Julien Barbier
  • Contributors: Fatimazahralachkar And Imane Elaceri
  • ©Symbols copyright by: ENAMIIMANE , LACHKAR
  • Porject was studied before working on it through alxafrica link project

Background Context

Animation published by Enamiimane

Ressources

Unix Shell ; Thompson shell ; Ken Thompson

Learning Objectives

At the end of this project, you are expected to be able to explain to anyone, without the help of Google:

General

  • Who designed and implemented the original Unix operating system
  • Who wrote the first version of the UNIX shell
  • Who invented the B programming language (the direct predecessor to the C programming language)
  • Who is Ken Thompson
  • How does a shell work
  • What is a pid and a ppid
  • How to manipulate the environment of the current process
  • What is the difference between a function and a system call
  • How to create processes
  • What are the three prototypes of main
  • How does the shell use the PATH to find the programs
  • How to execute another program with the execve system call
  • How to suspend the execution of a process until one of its children terminates
  • What is EOF / “end-of-file”?

Requirements:

General

  • Allowed editors: vi, vim, emacs
  • All your files will be compiled on Ubuntu 20.04 LTS using gcc, using the options -Wall -Werror -Wextra -pedantic -std=gnu89
  • All your files should end with a new line
  • A README.md file, at the root of the folder of the project is mandatory
  • Your code should use the Betty style. It will be checked using betty-style.pland betty-doc.pl
  • Your shell should not have any memory leaks
  • No more than 5 functions per file
  • All your header files should be include guarded
  • Use system calls only when you need to Why
  • Write a README with the description of your project
  • You should have an AUTHORS file at the root of your repository, listing all individuals having contributed content to the repository. Format, see Docker.

More Info:

-Unless specified otherwise, your program must have the exact same output as sh (/bin/sh) as well as the exact same error output. -The only difference is when you print an error, the name of the program must be equivalent to your argv[0]

List of allowed functions and system calls

  • access (man 2 access)
  • chdir (man 2 chdir)
  • close (man 2 close)
  • closedir (man 3 closedir)
  • execve (man 2 execve)
  • exit (man 3 exit)
  • _exit (man 2 _exit)
  • fflush (man 3 fflush)
  • fork (man 2 fork)
  • free (man 3 free)
  • getcwd (man 3 getcwd)
  • getline (man 3 getline)
  • getpid (man 2 getpid)
  • isatty (man 3 isatty)
  • kill (man 2 kill)
  • malloc (man 3 malloc)
  • open (man 2 open)
  • opendir (man 3 opendir)
  • perror (man 3 perror)
  • read (man 2 read)
  • readdir (man 3 readdir)
  • signal (man 2 signal)
  • stat (__xstat) (man 2 stat)
  • lstat (__lxstat) (man 2 lstat)
  • fstat (__fxstat) (man 2 fstat)
  • strtok (man 3 strtok)
  • wait (man 2 wait)
  • waitpid (man 2 waitpid)
  • wait3 (man 2 wait3)
  • wait4 (man 2 wait4)
  • write (man 2 write)

Compilation:

Your shell will be compiled this way:

gcc -Wall -Werror -Wextra -pedantic -std=gnu89 *.c -o hsh

Collaborators:

This project was made by Imane Elaceri and Fatima Zahra Lachkar.

About

This project is an attempt to create a simple shell in C

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages