Duration: 20 hours
DescriptionThis training course prepares developers to work on communication or embedded-style applications for GNU/Linux or other POSIX® environment (BSD®, QNX®, etc.). The course will cover features common to the Unix family of operating systems, mainly APIs from the POSIX® standards (Portable Operating System Interface = IEEE Std 1003.*).
- User-kernel interface (system calls, errno, libc)
- Processes, signals
- Universal I/O model: everything tries to be a file, or at least a stream of bytes — devices, sockets etc
- File system
- A few tools to explore Unix I/O and investigate a program's behavior: strace, dd, netcat/socat
- Inter-Process Communication (IPC) — including shared memory, mappings (mmap).
- Overhead: sources (system call, memory copy, scanning, memory allocation, etc.); minimizing overhead
- POSIX® Threads (‘pthread’) API and its interactions with previously described features
- Advanced I/O: non-blocking, Async, polling
- Sync vs. Async, adapting between these approaches
- Daemon processes
- System startup
ObjectivesAfter finishing the course participants will be able to:
- Find the specific information required for their tasks in man pages or standard documents;
- Identify simple mistakes and problems/risks in a code that uses POSIX® APIs;
- Know what points to consider when designing or modifying embedded-style applications.
- Software developers
- Good knowledge of the C programming language;
- Ability to use the command-line interface (shell) on GNU/Linux or other Unix system—at least basic tasks like file management, search;
- Basic notions of concurrent programming.
To benefit from some of the discussions, it would be nice to have:
- Actual development experience—at least debugging bigger C programs, preferably production code;
- Basic networking knowledge (TCP/IP introduction, let's say at the level of CCNA 1).