During CprE 308 we were tasked with creating our own version of a shell for interacting with a linux operating system. This project was creative and enjoyable for me.
As this wasn’t a team project I was responsible for the entire development of this shell. I started by creating a basic input output system that allowed a user to enter commands. There were three main types of commands my shell needed to be able to handle. First I needed to be able to handle standard commands with no arguments (
ls), commands with arguments (
ls -la), and commands that are being run in the background, (
Most of this project was review for me as I had written a fair amount of code in C before attempting this. The portion of my shell that I learned the most from was the backgrounding and process management code. Before taking this class I hadn’t ever needed to write multithreaded applications. Through this project and the other major assignments in this class I was forced to confront these unknowns and become at least a little bit familiar with the different ways you’re able to make C programs more efficient by spinning off large work loads into separate threads.
I used so many stackoverflow posts and a lot of help from the TA. On top of informal help, I also spent a fair amount of time reading the standards for “MIPS assembly language” to ensure that my instructions were being parsed correctly