Systems and algorithms work in C, from university computer-science courses: operating-systems internals, networking, data structures, cryptography and a handful of smaller exercises.
Most of these are POSIX programs — they use fork, sockets, pthreads, or the
Linux kernel API — so they target Linux (and macOS where noted) rather than
Windows.
| Project | Area | Summary |
|---|---|---|
| shell | OS | A Unix shell with pipes, background jobs and signal handling |
| kernel-syscalls | OS | Two new system calls added to the Linux 2.6.38 kernel |
| sockets-and-threads | Networking | TCP/UDP client-server pairs and a thread-per-client server |
| fsm-socket-reader | Networking | A mail-server client that parses replies with a finite state machine |
| data-structures | Algorithms | Linked lists, BSTs and hash tables across several assignments |
| sudoku-solver | Algorithms | A constraint-propagation sudoku solver and generator |
| cryptography | Security | Classical ciphers, an LD_PRELOAD file logger, and a keylogger exercise |
| buffer-overflow | Security | Stack-smashing input generators with annotated disassembly |
| charset-translation | Text | ISO 8859-7 Greek transliteration via a finite state machine |
| string-library | Fundamentals | The C string functions reimplemented two ways |
| exercises | Fundamentals | Quadratics, Markov chains, anagrams, text alignment, games |
Each project has its own README with the approach and build instructions.
Every project builds on its own; there is no top-level build. Enter a project
directory and run make, or use the compile line its README gives. A C11
compiler is enough for the portable projects; the OS and networking projects
need a POSIX system.
These are coursework projects, since cleaned up for presentation: build files corrected, committed binaries and editor files removed, a README added to each, and a number of real bugs fixed. The bug fixes are called out in the individual READMEs — for example the affine cipher that never decrypted correctly, the kernel handlers that returned a positive errno, and the sudoku solver's non-portable random seed.
Some inline comments and program output are in Greek or transliterated Greek, kept as originally written.