光京科海培训中心 (美)K Wall.M.Watson.M.Whitis et着 王勇王一川林花军甘泉 GNU Linux 编程指南 清华大学出版社
引言 本书的组织 本书不是C语言的入门书,不过你可从中很快温习一下久违的C语言。你应该能够读 懂C语言代码,理解常见的C语法。我们选定的工具很少偏离可从GNU项目得到的工具 箱。其原因很简单:GNU软件是每个Iiux发行版本的标准配置。这也是我们合称它们的 GNU/Linux的原因。 开头七章讨论开发系统的设置和标准GNU/Linux开发工其的使用: gcc make autoconf diff patch .RCS emacs 第2部分讨论系统编程主题.要是你对标准C函数库不大熟悉,第9章可用来清理这样 的紊乱状态。第10章讨论Liux的文件操纵例程。第11章回答“什么是进程?”的问题并给 出与进程和作业控制关联的系统调用。第12章讨论如何获取系统信息。到第13章时我们 将走上讲台传布出错检查是件大事的理由。当然,我们还会告诉你如何去做。第14章专门 探讨Linux内存管理的怪异行为。 我们在第15章~第18章中分别进行使用管道、消息队列、共享内存区和信号灯进行进 程间通信的讨论。第19章~第23章讨论如何基于TCP/P网络协议编写程序。在第24章 一般性地介绍如何创建和使用编程用函数库(包括从libc5到ibc6的转换)之后,我们在第 25章讨论编写设备驱动程序和内核模块,因为给最新的高速硬件设备或系统设备提供内核 支持需要花相当多的编程精力。 接下去在第26章~第33章讨论用户接口编程。其中第26章和第27章讨论字符模式 编程;第26章讨论使用termcap和termios直接控制终端,第27章讨论使用ncurses的更简 便方法。在第28章简短介绍X编程,第29章将集中讨论使用Motif和Athena窗口部件集。 使用GTK函数库的X编程是第30章的主题,使用Qt函数库(KDE的基础)的X编程是第 31章的主题,Java编程则在第32章讨论。我们还在第33章讨论使用OpenGL进行三维图 形编程。 第5部分涵盖三个特殊月的的主题。其中第34章讨论bash的shell编程。第35章讨论 安全相关的编程问题。第36章讨论使用gdh调试程序。 本书最后讨论如何把自己的编程项目转发出去。第3?章介绍tar和RPM软件包管理 工具。程序文档极为重要,因此我们在第38章指导你如何编写手册页面以及如何使用某些 基子SGML的建档工具。第39章最后查看软件许可证使用方面的重大问题
目录 第1部分Linux编程工具包 第1章概貌……… …(1)》 1,1 Linux既往成就… ……(1) 1.2无inux预期城就……… 1.3 Linux简史… (2) l.4 Linux与UNX… l.5 Linux编程 1.6为何选择Linux编程… (3) 。1.7小结 第2章设置开发系统…… 2.1硬件选择… (4) 2.1.1硬件选择上的考虑 ……(4) 22处理器/主板……… (5) 2.2.1板上1/0 …4…(6) 2.2.2处理器……4……, 2.2.3BOS…*……… (7) 2.24内存 2.2.5机箱和电源… (7) 2.3用户交互硬件:视频、声音、键盘及鼠标 (8) 2.3.1显卡… 2.3.2显示器……… , (9) 2.3.3当卡… (10) 2,4键盘与鼠标… ……4…(10) 2.5通信设备、端口及总线………… …(11) 2.5,1调制解调器…… …………(11) 2.5.2阿络接日卡…… …………(12) 2.5,3SCSI++w………4*…… (13) 2.5.4USB与火线(1EEE1394)… (13) 2.5.5串行卡(包括多端口)… (13) 2.5,6fDA………4……… ……(14) 2.5.7 PCMCIA卡… ………(14) 2.5.8SA即插即用设备……… (14 么.6存储设备…… 2.6.1硬盘…
日录 2.6,2可移动磁盘设备……………………………(14) 2.6.3CD-ROM/DVD……… …(l5) 2.6.4磁带备份设备… …4…(]5】 2.7外图设备………… ,(15) 2.7.】打印机…… …………(15) 2.7.2为描仪……*…… …(16) 2.7.3数字相机…… (17) 2.7.4家居启动控制设备… …(17) 2.8完备型系统…………… (17) 2.9便携系统… (18) 2.10安装………… 2.11小结 (21) 第3章使用GNUc心… 3.】GNU ce特性… (22) 3.2使用简介………… ……(22) 3.3常用命令行选项… …(24)》 3.3.1丽数库和包含文件… …(25) 3.3.2出错检查及警告…… ……(26) 3.4优化选项…… (27) 3.5调试选项 3.6GNUC扩展 (29) 3.7小结………… …(30) 第4章使用GNU make管理项目… (31) 4.1为何使make… (31) 4.2编写makefile…… (31) 4.3有关makefile编写的详细规则…… (33) 4.3.1伪日标… (33) .3.2变f………(33) 4.3.3环境变量、自动变量及预定义变量 (35) 4,34隐式规则……………… **(36》 4,3.5摸式规则…………… (36) 4.3.6注释 (37) 4.4额外的m8ke命令行选项…………… (37) .5调试mke…… (37) 4.6常见的make出错消息… **……(38) 4.7有用的makefile目标… (38) 4,8小结……………… (38 第5章使用autoconf创建自配置软件… 5.1理解aut0c0nf4…… …(39)
月录 3 5.1.1创建configure,in文件……(40) 5.1.2构造文作……………………(40) 5,1.3有用的au10C0nf实用工具……………+……………(41) 5,2内宏………(4) 5.2.1候选程序测试…(41) 5.2.2库函数测试… …(42) 5,2,3头文件测试………………(43) 5.2.4结构测试… *4…*……(44) 5.2.5类理定义测式………… ……(41) 方.2.6编泽器行为测试…… ……(44) 5.2.7系统服务测试… (45) 5.2.8UNIX变种测试… …………(5)》 5.3普通宏… (46) 5.4-·个带注解的autoconf脚本… …+…(47) 5.5小结,4… (52) 第6章比较和归并源文件……。 (53) 6.1比较文件……… (53) 6.1.1理解cp命令…… (53) 6.1.2理解dif命令… (55) 6.1.3理解dif3命令…。 …(60) 6.1.4理解sdif命令…… (63) 6.2准备源代码补丁……… (63) 6.2.1 patch命令行选项… (64) 6.2.2创建补丁…… (64) 6.2.3使用补丁… …………(65) 6.3小结………4… (65) 第7章使用RCS控制版本 (66) 7,】术语……… …(66) 7.2R(CS基本H法……… ……(67) 7.2.1Ci和C0………………… (67) 7.2.2RCS关键字…… (69) / 7.2.3 ident命令… (70) 7.3r3iff4……… ……(71) 7.4其他RCS命令 …(73) 7,4.1C3 clean………………… (74) 7.4.2rog… (74) 7,4.3【代5…4……… (74) 7.4.4 rcsmerge.. …4…(74)》 7.5小结…4… …(75)
月录 第8章在Emacs中创建程序… …*……(76 8.1macs简介 8.1.1启动与停止Em8C8…+…………… ……………(76) 8.1.2移动………………… …78 8.1.3插人文本……………(79) 8.】,4别除文本………(79) 8.1,5查找和替换…… (80) 8.1.6保存和打开文件…… ……(81) 8.1.7多窗口…*4*… ……………(82) 8.2支持编程的特性…………… (83) 8.2.】缩进约定… (83) 8.2.2语法高亮度显示……………, (84) 8.2、3使用注释… 44(84) 8.2.4使用Emacs进行编译………(85) 8.2.5定制简介…………(87) 8.3使用Emacs Lisp白动完成Emacs操作 w……*…(89】 8.小结……(9引) 第2部分 系统编程 第9章/0例程 ……(92} 9.】文件描述符……… 4…(92) 9,2使用文件描述符的系统调用…… *4(92) 9.2.1open()调用 …(93) 9.2.2cl08e()调用…… (94) 9.2.3read()调用 4A4*82F0464444-310441410444 (94) 9.2.4 write()i调用44…,4 9.2.5 ioctl()调用 9.2.6fcnl()调用……………*…… ++4……(95) 9.2.7y7c()调用…………(95》 9.2.8 ftruncate()调用…,, (96) 9.2.9 lseek()调H… ………(96) 9.2.10dup()和dup2()调用…………,, 9.2.1】select()调用… 9.2.12 fstat()调用…………… (101) 9,2.13 fchown()调用*…………… (102) 9.2.14 fchmod()调用 (102) 9.2.15 fehdir()调用 ……4…(103) 9.2.16fl0Ck()调用*… …(103) 9.2.17pipe()阀用 9.3文件类型
日录 5 9.3.1普道文件 9.3.2做带1/0 (106) 9.3.3单▣1/0 9.3.4打印机接口 (109) 9.35前卡…………44… ……………(09) 9.生小结………………………… (109) 第10章文件操作 ***+…(110 10.】文件操作函数…………。 *n+(110】 10.1.1打开/关闭文件 *+(110) 10.1.2基本的读和写……………… (111) 10.1.3状态函数……… (111) 】0.2格式化输出………*…,… (112) 10.2,1格式化输入………… 10.2.2基于字符和行的输入输出… 10.2.3文件定…………… (116) 10.2.4缓冲区控制 ……………(116) 10.2.5删除和改名……4……… (117) 10.2.6临时文件… ………*…(117) 10.3小结… ………(118) 第11章进程控制… (119) 11.1进程的属性……… (119) 11.2系统调用及库函数 (120) 11.2.16k()系统调用…… (120) 11.2.2exec()函数族…… (120) 1L.2.35 ystem()和pop0n()☒数…(们21) 1】.2.4c0nC()函数调用……… (121) 11,2.5wait()、waitpid()、wail3()以及wait4()系统调用… (122) 11.2.6cCt()系统调用……… (122) 11,2.7信号……(们22) 11.2.8程序的中止… *…**(124) 11.2.9闹钟和计时器……(125) 11.3调度参数….…… ……4(126)】 11.4线程……(12 1l.4.1 pthread-create()函数… 11.4.2 pthread exit()函数 *…(128) ll.4.3 pthread..join()函数+" ………(128) 11.4.4属性的挖制…… 444…(129) 1i.4.5 pthread_.atfork()函数… …(130) 11.4.6取消线程……4 *…(130) ll.4.?pthread-cleanup-push()宏…
目求 1l.4.8 pthread-cond-init()函数 11.4.9 pthres3d-equal()函数…………(132) 11.4.10互斥 (132) 11.5编程示例…… (132) 11.5.1子库…………………(133) 11.5.2例子child-.demol.c程序 ………(143) 11.5.3例子程序child.dem02.c…(145) 1l.5.4例子程序child-demo3.ct…… (150) 11.6小h…… (151) 第12章访问系统信虑…(152) 12.】进程的信息…(152) l2.1.】cmdline文件 (153) 12.1.2 envirot文件………………(153) 12.1.3f月录… …(153) 12.1.4mem文件… (153) 12.1.58tal文f件…… ………(153) 12.1.6 status文件… (155) 12.1.7cwd符号链接… …(155) 12.1.8exe符号链接 …………(155) 12.1.9mps文件… (155) 12.1.10root符号链接 …(155) 12.1.11ratm文件… (155) 12.2脊通的系统信息…… (155) 12.2.1/proc/emd/.line文件 (155) 12.2.2proc/cpuinfc文件…… …(155) 12.2.3 /proc/devices文件……… …(156) 12.2.4/proc/dma文件… …(156) 12.2.5/Proc/filesystems文件 ……(156) 12.2.6fpr0沁/interrupts文件……(156) 12.2.7/pr00/i0p0rs文件… (156) 12.2.8/proc/core文件…… (156) 12.2.9/pr0心/kmsg文件…(156) 12.2.10/pr0c/ksyms文件…(156) 12.2.11/proc/loadavg文件 ……(157) 12.2.12/pr0C/小0ck5文件……………(157) l2.2.13/ptoe/mdstat文件 12.2.14/proc/meminfo文件 …(157) 12.2.15pr0心/1ie文件……(157) 12.2.16/ptoe/nodules文件 (157) 12.2.17/proc/mounts文f件 (157) 12.2.18/pr0C/pCi文件…+**……… (157) 12.2.19/proc/rc文件… (158)
目录 7 12.2.20/pr0c/5tat文件………… (158) 12.2.21pr0c/uptime文件n, (158) 12.2.22proc/version文件 …4+(158) 12.2.23/pr0心/hct子1录4……………(158》 12.2.24/pr0心/9csi子日录…………………(159) 12.2.25/pr0e/5ys日录…… 12.3明数库和实用丁其………………………*…(160) 12,4小结………………4…… (160) 第13章出错处理… (161) 13.」出错处理简述……… (161) 13,2C语言机制………(161) 13,2.1a5ser1()宏*" (161) 13.2.2使用预编译…… …44*4(163》 3.2.3标准库了具 (165) 13.2.4对错误代码errno的理解 *…(165) 13.2.5使用函数ab0r()…………(166) 13.2.6使用函数xit()……… ………(166) 3.2.7使用函数atxit()………… (167) 13.2.8使月函数1rerr0r()…………… (168) 13.2.9使用函数p0ror()… 13.3系统日志工具……(169) 1 13.3.1用户程序… *…(173) 13.4小结* 第14章内存管理…… 1.】C内存管理的回顾…………(174) 上4.1.】mal0c()函数的使用…………… (174) 14.1.2al0c()函数的使用*… (174) 141,3 realloc()函数的使用………(175)》 14.1.4打ee()函数的使用…,… 14.1.50C1()函数的使用…………………《175) 14.2内存映像文件(们77) 14.2.1mmap()函数的使用 14.2.2 munmap()函数的使用 (178) 14.2、3 msyne()函数的使用……… (178) 14.2.4mpr0tCt()函数的使用……………… (179) 14.2.5锁住内存……… …(179) 14.2.6 mremap()函数的使用……(170) 14.2.7用内存映像实现cat(1)………180) 14,3发现并修改内存管理错误…… (]81) 14,3.】一个有问题的程疗………… (182)
8 目录 14.3.2用mpr和che沁k定位内存错误… (183) 14.3.3 Electric Fence...... 14.3.4使月Lint Brush……… (187) ]4.4小结……*……………”(188) 第3部分进程间通信和网络编程 第15章P℃人门:使用管道………(189) 15.1管道使用简介………… ……(190) 15.1.1无名管道…… **4*…*………,(190) 15.1.2有名管道… 15.2小结**4… …*……4…”(193) 第16章消总队列… 44**4。(194) 16.1创建一个使用消息队列示例程序: 4*44…(194) 16.2运行这个消总队列示例程序…… …(196) 16.3小结4… +4…(196) 第17章共享内存… …(197) 17.1把Linux配置成使用共享内存… *……(197 172创建一个使用共享内存的例子程序………… (197) 17,3运行共享内存示例程序… ……(199) 17,4小结…………… 第18章信号灯… …***4。(201) 18.使用信号灯的示例程序…… …*(201 18.2运行信号灯示例程序… …*………(205) 18.3小结4 ……………〔206) 第19章TCP/P和套接口编程 (207) 19.1支持套接门编程的系统调用… **(207) 19.1,】80沁ket………4… (207) 19.1.2bjnd4… (208) 19.1.3 listen4,… 4……(209) 19.1,4心0nneL…,………++4 ………(209) 19.1.5fecy……… ………(210) 19.1,6s纪nd (210) 19.2使用套接口的客户/服务器例子程序…。 …**(211】 19.2.】眼务器例子程序…(211) 19.2.2客户例子程序… (212) 19.2、3运行客户和服务器例子程序… 4*(213)