C lessons
280 lessons, ordered from first principles to advanced Linux systems programming.
Linux System Programming
- File descriptors — intermediate
- open / read / write / close — intermediate
- errno and error reporting — intermediate
- fork — duplicating the process — intermediate
- exec — replacing the process image — advanced
- wait and waitpid — intermediate
- Pipes — advanced
- Signals — advanced
- Environment variables — intermediate
- Mini shell project — advanced
- eventfd, timerfd, signalfd — synthetic fds — intermediate
- POSIX threads — pthread_create, mutex, cond — intermediate
- rlimit — capping CPU, memory, fds — intermediate
- /proc forensics — deep dive — intermediate
- Namespaces + cgroups — the container ingredients — advanced
- What are signals in C and Linux? — beginner
- Common signals: SIGINT, SIGTERM, SIGKILL, SIGSEGV, SIGALRM — beginner
- signal() vs sigaction() — and why you should always use sigaction() — intermediate
- Writing safe signal handlers — async-signal-safe rules — intermediate
- raise() — sending a signal to yourself — beginner
- kill() — sending a signal to another process — intermediate
- alarm() — schedule a SIGALRM in N seconds — beginner
- Handling Ctrl+C safely — intermediate
- Common mistakes with signals — intermediate
- What are threads? Why use them in C? — beginner
- pthread_create() and pthread_join() — beginner
- Passing arguments to threads — intermediate
- Returning data from threads — intermediate
- Race conditions — intermediate
- Mutexes — pthread_mutex_t — intermediate
- Deadlocks — advanced
- Writing thread-safe code — intermediate
- The producer/consumer pattern — advanced
- Common mistakes with threads — intermediate
Web Foundations & Databases
- How the web works: client, server, request, response — beginner
- Cookies, sessions, and browser storage — beginner
- REST APIs, HTTP methods, and JSON — beginner
- Authentication, authorization, and account flows — beginner
- SQL basics: querying a relational database — beginner
- SQL injection and prepared statements — intermediate
- NoSQL, password storage, and database hardening — intermediate