Nearly every Linux distribution comes with a great deal of useful documentation. You could learn most of what we'll talk about in this book by reading documentation in your Linux distribution (although it would probably take you much longer). The documentation isn't always well-organized, though, so the tricky part is finding what you need. Documentation is also sometimes out-of-date, so take everything that you read with a grain of salt. If the system doesn't behave the way a man page (manual pages) says it should, for instance, it may be that the man page is outdated.
To help you navigate, here are the most useful sources of information about advanced Linux programming.
Linux distributions include man pages for most standard commands, system calls, and standard library functions. The man pages are divided into numbered sections; for programmers, the most important are these:
(1) User commands
(2) System calls
(3) Standard library functions
(8) System/administrative commands
The numbers denote man page sections. Linux's man pages come installed on your system; use the man command to access them. To look up a man page, simply invoke man name , where name is a command or function name. In a few cases, the same name occurs in more than one section; you can specify the section explicitly by placing the section number before the name. For example, if you type the following, you'll get the man page for the sleep command (in section 1of the Linux man pages):
% man sleep
To see the man page for the sleep library function, use this command:
% man 3 sleep
Each man page includes a one-line summary of the command or function. The whatis name command displays all man pages (in all sections) for a command or function matching name . If you're not sure which command or function you want, you can perform a keyword search on the summary lines, using man -k keyword .
Man pages include a lot of very useful information and should be the first place you turn for help. The man page for a command describes command-line options and arguments, input and output, error codes, configuration, and the like. The man page for a system call or library function describes parameters and return values, lists error codes and side effects, and specifies which include file to use if you call the function.
The Info documentation system contains more detailed documentation for many core components of the GNU/Linux system, plus several other programs. Info pages are hypertext documents, similar to Web pages. To launch the text-based Info browser, just type info in a shell window. You'll be presented with a menu of Info documents installed on your system. (Press Control+H to display the keys for navigating an Info document.)
Among the most useful Info documents are these:
· gcc— The gcc compiler
· libc— The GNU C library, including many system calls
· gdb— The GNU debugger
· emacs— The Emacs text editor
· info— The Info system itself
Almost all the standard Linux programming tools (including ld, the linker; as, the assembler; and gprof, the profiler) come with useful Info pages. You can jump directly to a particular Info document by specifying the page name on the command line:
% info libc
If you do most of your programming in Emacs, you can access the built-in Info browser by typing M-x info or C-h i.
You can learn a lot about the system functions that are available and how to use them by looking at the system header files. These reside in /usr/include and /usr/include/sys. If you are getting compile errors from using a system call, for instance, take a look in the corresponding header file to verify that the function's signature is the same as what's listed in the man page.
On Linux systems, a lot of the nitty-gritty details of how the system calls work are reflected in header files in the directories /usr/include/bits, /usr/include/asm, and /usr/include/linux. For instance, the numerical values of signals (described in Section 3.3, "Signals," in Chapter 3, "Processes") are defined in /usr/include/bits/signum.h. These header files make good reading for inquiring minds. Don't include them directly in your programs, though; always use the header files in /usr/include or as mentioned in the man page for the function you're using.
This is Open Source, right? The final arbiter of how the system works is the system source code itself, and luckily for Linux programmers, that source code is freely available. Chances are, your Linux distribution includes full source code for the entire system and all programs included with it; if not, you're entitled under the terms of the GNU General Public License to request it from the distributor. (The source code might not be installed on your disk, though. See your distribution's documentation for instructions on installing it.)
The source code for the Linux kernel itself is usually stored under /usr/src/linux. If this book leaves you thirsting for details of how processes, shared memory, and system devices work, you can always learn straight from the source code. Most of the system functions described in this book are implemented in the GNU C library; check your distribution's documentation for the location of the C library source code.