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.
The Programming in UNIX II. lecture together with the seminar aim at extending the knowledge gained from the rogramming in UNIX lecture, part I.