Programming in UNIX II.
=======================

Winter semester, 1/1

Syllabus
========

Program debugging. Special user mode libraries for program debugging
(libumem(3lib), watchmalloc(3lib)). Program tracing at the level of system
calls, library functions and functions defined by the program itself
(truss(1), gcore(1), pstack(1), mdb(1)). /proc filesystem. Debugging features
of the dynamic linker.
 
Advanced network programming. Raw sockets. Advanced usage of getsockopt() and
setsockopt(). tcpdump(1) for debugging of network applications. IPv6.

Working with terminals and pseudo terminals. Differences of terminal
implementations in SVR3, SVR4, and BSD. Writing a terminal application.

Secure programming. Writing more secure code and avoiding common pitfalls.
Classification of bugs. Examples of programming techniques to minimize future
security issues (privilege separation, sandboxing, fine-grained privileges
versus UID 0). Examples.

Advanced POSIX thread programming. Alternative thread API (Solaris threads).
API comparison.

Advanced interprocess communication. Sending file descriptors between
processes. Doors. Advanced ioctl(2). Asynchronous IO as defined by POSIX.
pread/pwrite. posix_spawn.