Applying C is the book you need if you are programming for Single Board Computers (SBCs) that run Linux, or if you do any coding in C that interacts with the hardware.
As there isn't a good name for this body of knowledge, it isn't easy to find a single source for it.
This book gathers together all of these low-level, hardware-oriented and often hardware-specific ideas.
As such it is a moderately advanced book.
This is not to say that it is difficult, but it does presuppose that you already know how to program in C and that you know the basic idioms of C.
Starting off from the very simple task of making a program run automatically, we look at how your program works with user-mode Linux.
If you are working with hardware, arithmetic cannot be ignored and separate chapters are devoted to integer, fixed-point and floating-point arithmetic.
Equally, to handle I/O you need to have a good grasp of files and the pseudo file system.
The dev/mem file coupled with memory-mapped files makes it possible to work with raw memory without leaving user mode.
Sockets are general-purpose way of communicating over networks and similar infrastructure and here the focus is on sending data over the internet and for this we build a web client and a server.
Next we consider graphics, which you might find unusual in a book on small systems, but today even small systems have GPUs and graphics comes as standard.
It is common to think of adding low-cost output devices such as 7-segment displays to Io T devices, but with low cost HDMI/DVI displays available it becomes cost effective to simply use the built-in graphics hardware.
After this we turn to the idea of multi-tasking using Pthreads.
As well as looking at threads, we consider locking, using mutex and condition variables, and scheduling.
Although interrupts don't exist in user-mode Linux, we can get very close using poll and threading.
Now that multiple cores are a feature of even low-cost SBC, in later chapters we cover managing cores, look at.