@device[postscript] @make[report] @chapter[Other Sources of Information] This document provides a @b[brief] introduction to Unix programming tools. If you want to do a lot of programming on Unix, you should look at these other sources of information. @section[Unix Manual Pages of Note] To the inexperienced (and sometimes even the very experienced), the Unix manual pages are incomprehensible. Unfortunately, many of them contain information that cannot be found elsewhere. You should know about the following pages: @begin[description] @i[cc(1)]@\The C compiler has options for producing symbol tables, output files, and diagnostics. Type @b[man 1 cc]. @i[ld(1)]@\The link editor manual page is required reading. It describes the order in which object files and library archives are processed. Type @b[man 1 ld]. @i[make(1)]@\This manual page covers the basics and lists several useful options. Type @b[man 1 make]. @i[lint(1)]@\The @i[lint] utility has options for different kinds of diagnostics. Type @b[man 1 lint]. @i[dbx(1)]@\This manual page lists all of the debugger's commands. Type @b[man 1 dbx]. @i[a.out(5)]@\This manual page describes the format of @i[a.out] files, and describes how the system sets up memory when it executes an @i[a.out]. The page is difficult reading but you should make the effort. Type @b[man 5 a.out]. @i[nm(1)]@\You can use @i[nm] to look at the contents of object file symbol tables. It can be a useful debugging tool, especially if you're having linking and loading problems. Type @b[man 1 nm]. @i[ar(1)], @i[ranlib(1)]@\These manual pages tell you how to create and process your own library archive files. Also see @ux[Appendix F] of this document for more information. Type @b[man 1 ar] and @b[man 1 ranlib]. @i[lorder(1)], @i[tsort(1)]@\These utilities can be used to reorder functions within personal libraries so that @i[ld] can find all external references in one pass. Type @b[man 1 lorder] and @b[man 1 tsort]. @i[strip(1)]@\This utility removes symbol tables from executable files, thus making executables smaller. Although @i[cc] has an option to do just this, you can use @i[strip] to process an executable without having to recompile the program. Type @b[man 1 strip]. @i[strings(1)]@\This utility lets you look for ascii text within object and executable files. Type @b[man 1 strings]. @i[core(5)]@\This manual page describes the format of @i[core] files. Type @b[man 5 core]. @i[adb(1)]@\This is another debugger, the debugger of choice for many a Unix wizard, especially for debugging @i[core] files. Good luck learning how to use it. Type @b[man 1 adb]. @i[od(1)]@\You can use this utility to examine the innards of executable, object, and @i[core] files. Type @b[man 1 od]. @end[description] @section[Other Unix Documentation] In addition to the manual pages, The Unix manuals contain many articles and tutorials. You may want to look at some of the ones listed here. The following documents can be found in the @i[UNIX Programmer's Supplementary Documents, Volume 1], which in turn can be found in the documentation racks at most Athena clusters. You can also purchase them at the Information Services Publications office, in Building 11, Room 209. @ux[The C Programming Language - Reference Manual] is the official statement of the syntax of C. It's pretty dry material. @ux[Lint, a C Program Checker] covers everything you ever wanted to know about @i[lint], and then some. As a general introduction to the utility, this document is more useful than the @i[lint(1)] manual page. @ux[A Tutorial Introduction to ADB.] Just what it says, an introduction to the wizard's debugger. @ux[Debugging with dbx] is another tutorial look at the @i[dbx] utility. It is a brief document. @ux[Make - A Program for Maintaining Computer Programs] should be read by anyone who wants to use @i[make] on a regular basis. @ux[An Introduction to the Revision Control System] introduces @b[RCS], a tool that helps groups of programmers work together without stepping on one another's toes. If you are working on a cooperative project, or on a program that needs constant revising, read this document. @section[@i(The UNIX Programming Environment)] This book, written by Brian Kernighan and Rob Pike, describes the AT&T Unix environment, but is still useful to Berkeley Unix programmers. It discusses many useful topics: @begin[itemize] The Unix file system. Shell programming. Programming with standard I/O. Unix system calls. Program development. @end[itemize] You can find the book in the documentation racks at most Athena clusters.