Shell
As part of my class work for CS 252 (Systems Programming), I was required to build a custom shell in C. It was broken down into a series of tasks, each growing the functionality of the shell. The first task was to add grammar and parse words based on their position or special characters. I added all the expected characters: quoted strings, $variables, file IO with redirects, etc.
The second task was to run processes in the shell. This required employing process management using fork() and exec() system calls. Once data piping was involved, I began to struggle. Looking back it is ironic to me that such a small function was so difficult.
The final significant task was wildcarding. I had a great understanding of how to do this and use regex to its fullest. This is even more ironic because that function is huge! But with a great recursive design, I'm very proud of the result.
And I'm happy to say that I also got extra credit. These tasks included tab completion, a source file, and variable prompts. It was a very good project that taught me a lot about computer management and why systems work the way they do.