第1章 Linux程序设计基础 1
1.1 编程风格 1
1.1.1 GNU编程风格 1
前言 1
1.1.2 Linux内核编程风格 4
1.2 如何使用gcc开发应用程序 7
1.2.1 如何使用gcc 7
1.2.2 编写Makefile 11
1.2.3 如何使用automake和autoconf产生Makefile 16
1.3.1 GDB简介 20
1.3 Debug工具GDB 20
1.3.2 GDB使用说明 24
1.4 如何编写软件文档 39
1.4.1 编写软件文档常识 39
1.4.2 编写texinfo 39
1.4.3 编写Man Page 44
1.4.4 使用SGML编写文档 51
1.5 为软件选择版权和许可证 60
1.6 如何使用RCS/CVS来管理源代码 61
1.6.1 RCS 62
1.6.2 CVS 63
1.7.1 打包格式简介 70
1.7 将软件打包 70
1.7.2 RPM简介 75
1.7.3 制作RPM 75
1.8 IDE的使用 81
1.8.1 vim的使用 82
1.8.2 使用Emacs 88
1.8.3 使用glade 95
1.8.4 和KDevelop开发KDE程序 100
2.1.1 系统基本函数简介 109
第2章 系统和网络编程 109
2.1 系统编程 109
2.1.2 信号 121
2.1.3 管道 123
2.1.4 消息队列 134
2.1.5 信号量 140
2.1.6 共享内存 147
2.2 网络编程 155
2.2.1 网络基本概念 155
2.2.2 套接口编程 156
2.2.4 Client/Server结构 161
2.2.3 网络字节次序 161
2.2.5 UDP编程 164
2.2.6 非阻塞模型 167
2.3 多线程编程 169
2.3.1 概述 169
2.3.2 创建和销毁线程 170
2.3.3 使用互斥量同步线程 172
2.3.4 用条件变量改进线程同步 178
2.3.5 线程专用数据 186
2.3.6 线程的取消和终止 188
2.3.7 在用户界面编程中使用线程 193
2.3.8 在多线程程序中使用第三方函数库 197
第3章 控制台编程 198
3.1 Curses编程 198
3.1.1 Curses编程简介 198
3.1.2 Curses程序基本结构 198
3.1.3 颜色和属性 199
3.1.4 窗口和基垫 201
3.1.5 光标和屏幕输出 205
3.1.6 键盘输入 208
3.1.7 菜单 210
3.1.8 表单 214
3.2 newt编程 219
3.2.1 newt编程简介 219
3.2.2 newt基本程序结构 220
3.2.3 newt基本组件Form 223
3.2.4 newt的其他基本组件 223
3.2.5 事件处理 234
3.3 XVGA Lib编程 235
3.3.1 SVGA模式与信息 235
3.3.2 绘图 238
3.3.3 键盘和鼠标 240
3.3.4 SVGALib的图形库扩展 245
3.4 FramEbuffer编程 249
3.4.1 FramEbuffer简介 250
3.4.2 屏幕的像素操作 252
3.4.3 屏幕的字符输出 255
3.4.4 屏幕的图像输出 257
3.4.5 屏幕的图像截取 260
第4章 X窗口系统编程 262
4.1 Xlib编程 262
4.1.1 X体系结构简介 262
4.1.2 X程序基本结构 263
4.1.3 其他基本概念 268
4.1.4 事件 285
4.1.5 窗口和客户程序间的通信 297
4.1.6 X国际化 302
4.1.7 高级编程 319
4.2 GTK/GNOME编程 323
4.2.1 GTK/GNOME简介 323
4.2.2 GTK编程基本示例 324
4.2.3 GTK布局初探 330
4.2.4 GTK基本组件 334
4.2.5 再论布局 392
4.2.6 GTK其他编程技巧 400
4.2.7 GNOME编程 418
4.2.8 ORBit编程 430
4.3 QT/KDE编程 434
4.3.1 QT/KDE简介 434
4.3.2 QT基本编程 435
4.3.3 QT信号和插槽 436
4.3.4 QT布局初探 438
4.3.5 QT国际化编程 440
4.3.6 QT基本组件 446
4.3.7 QT基本属性 463
4.3.8 再论布局 468
4.3.9 表皮 471
4.3.10 QT Designer的使用方法 479
4.3.11 KDE编程 482
4.4 Motif/LessTif编程 491
4.4.1 Motif/LessTif简介 491
4.4.2 Motif程序基本结构 491
4.4.3 Motif程序的国际化 495
4.4.4 Motif的基本组件 496
4.4.5 Motif的布局组件 526
4.4.6 复合字符串 539
5.1 脚本语言简介 544
第5章 脚本语言编程 544
5.2 Shell编程 546
5.2.1 Shell简史 546
5.2.2 Bash编程 546
5.2.3 tesh编程 555
5.3 AWK编程 562
5.3.1 AWK简介 562
5.3.2 常用定义 563
5.3.3 如何执行AWK 564
5.3.4 AWK程序的主要结构 564
5.3.5 AWK的内部变量 565
5.3.6 AWK的内部函数 567
5.3.7 用户自定义函数 569
5.3.8 常用例子 569
5.4 使用sed编程 571
5.4.1 执行命令行上的编辑指令 571
5.4.2 sed的编辑指令 572
5.4.3 例程 574
5.4.4 函数参数 576
5.5 yacc/lex简介 581
5.6.1 正则表达式简介 585
5.6 利用正则表达式编程 585
5.6.2 正则表达式的语法 588
5.6.3 GNU Regex函数库的程序写作 592
第6章 国际化和中文化编程 612
6.1 国际化、本地化、中文化 612
6.1.1 国际化及相关概念 612
6.1.2 国际化标准组织 612
6.1.3 国际化的意义 613
6.2 locale体系结构 613
6.2.1 什么是locale 613
6.2.2 中文locale举例:zh_CN.GBK 620
6.3.2 宽字符和多字节字符函数 638
6.3 C库中locale相关函数的使用 638
6.3.1 locale的设置 638
6.3.3 使用locale相关函数 641
6.4 信息的国际化和本地化 651
6.5 X窗口系统的国际化 652
6.5.1 国际化的内容 653
6.5.2 Xlib中与国际化有关的函数 653
6.5.3 高级图形库函数的国际化编程 655
6.5.4 X11国际化的历史和级别 656
6.6 在程序中实现中文打印 656
6.6.2 PostScript语言简介 657
6.6.1 流程 657
6.6.3 Ghostscript 658
6.6.4 实现中文打印的关键 658
6.6.5 在程序中书写中文PostScript文件 659
6.7 在程序中使用中文TrueType字体 668
6.7.1 类型 669
6.7.2 函数 681
6.7.3 用FreeType2 API编程 686
附录A GNU公用许可证 699
附录B Linux编程推荐读物 704