At the end of this project, you are expected to be able to explain to anyone, without the help of Google:
-
Origins of Unix: Understand who designed and implemented the original Unix operating system and its historical significance.
-
UNIX Shell: Recognize the authorship of the first version of the UNIX shell and its role in interacting with the operating system.
-
B Programming Language: Learn about the B programming language, the precursor to the C programming language, and its creator.
-
Ken Thompson: Gain knowledge about Ken Thompson, a legendary computer scientist, and his contributions to Unix and programming languages.
-
How a Shell Works: Understand the fundamental concepts of how a shell works, including its role in processing commands and managing processes.
-
PID and PPID: Explore the concepts of PID (Process ID) and PPID (Parent Process ID) and their significance in process management.
-
Environment Manipulation: Learn how to manipulate the environment of the current process, including managing environment variables.
-
Function vs. System Call: Distinguish between functions and system calls and understand their respective purposes.
-
Process Creation: Discover how to create processes in Unix-based systems, including the fork() system call.
-
Main Prototypes: Familiarize yourself with the three prototypes of the main function used in C programming.
-
PATH Variable: Understand how the shell uses the PATH environment variable to locate executable programs.
-
Execve System Call: Learn how to execute another program within a process using the execve system call.
-
Process Synchronization: Explore the concept of process synchronization and how to suspend process execution until a child process terminates.
-
EOF (End-of-File): Define EOF and understand its role in input/output operations in Unix.
-
You are responsible for solving the project tasks independently, avoiding plagiarism or unauthorized copying.
-
Publishing any content of this project, including code, is strictly prohibited.
-
Plagiarism will result in removal from the program.
-
You may use editors such as vi, vim, or emacs to write your code.
-
All code files will be compiled on Ubuntu 20.04 LTS using gcc with the options:
-Wall -Werror -Wextra -pedantic -std=gnu89. -
Each code file should end with a new line.
-
A
README.mdfile at the root of the project folder is mandatory. -
Your code should adhere to the Betty style, and it will be checked using
betty-style.plandbetty-doc.pl. -
Ensure there are no memory leaks in your shell program.
-
Limit the number of functions in a single file to no more than 5.
-
Use include guards for all header files.
-
Utilize system calls only when necessary and justify their use.
-
Write a detailed README that describes your project.
-
Create an AUTHORS file at the root of your repository to list all contributors to the repository (following a specified format).
By meeting these requirements, you will demonstrate your understanding of shell programming and best practices in Unix-based development.
$ls $ ls
builin.c handling.c main.c
changingDirhandling.c handling_one.c mutsara.c
changingDir_handling_getzAl.c help__1.c Paper.c
checkvsynt.c hsh pfhandling.c
cmd.c intsiggetz.c README.md
envhandleone.c ita_c.c shell.h
envhandletwo.c kumisa.c shell_Loops.c
err_get.c Librarystdhandling.c str001handling.c
errhandling001.c line.c str002handling.c
errhandling002.c ls_01_handling.c str003handling.c
extrem_var_chek.c ls1handling.c
$
