《Linux程序设计》是由人民邮电出版社出版的一本关于Linux方面的书籍,作者是Neil、Matthew Richar,主要介绍了关于Linux、程序设计方面的知识内容,目前在Linux类书籍综合评分为:9.4分。
书籍介绍
这书叙述了Linux系统软件以及他UNIX设计风格的电脑操作系统上的软件开发,主题思想包含规范Linux c语言函数库和由不一样的Linux或UNIX规范特定的各种各样小工具的使用说明,大部分规范Linux开发环境的使用说明,根据DBM和MySQL数据库储存Linux中的统计数据,为X窗口系统软件创建图形界面操作界面等。这书根据先详细介绍编程设计基础理论,再用适度的事例和清楚的表述来表明它的方法,协助用户快速把握有关的专业知识。
这书合适Linux的新手及期待运用Linux开展开发设计的程序流程工作人员阅读文章,也合适做为高等学校计算机相关技术专业老师学生的参照教材内容。
Neil Matthew 和RichardStones全球著名的Linux/UNIX权威专家,有数十载Linux/UNIX开发设计工作经验和从事亲身经历。她们应用过基本上全部UNIX版本号,并熟练C/C++、LISP、Fortran、Perl、Tcl和Prolog等各种各样語言。她们从业过各种各样软件项目,从即时嵌入式系统到财务会计系统软件和零售业信息管理系统。除这书外,她们还合著了PostgreSQL、MySQL层面的书籍。
目录
- 第1章 入门 1
- 1.1 UNIX、Linux和GNU简介 1
- 1.1.1 什么是UNIX 1
- 1.1.2 什么是Linux 2
- 1.1.3 GNU项目和自由软件基金会 3
- 1.1.4 Linux发行版 3
- 1.2 Linux程序设计 4
- 1.2.1 Linux程序 4
- 1.2.2 文本编辑器 5
- 1.2.3 C语言编译器 5
- 1.2.4 开发系统导引 7
- 1.3 获得帮助 12
- 1.4 小结 14
- 第2章 shell程序设计 15
- 2.1 为什么使用shell编程 15
- 2.2 一点哲学 16
- 2.3 什么是shell 16
- 2.4 管道和重定向 18
- 2.4.1 重定向输出 18
- 2.4.2 重定向输入 19
- 2.4.3 管道 19
- 2.5 作为程序设计语言的shell 20
- 2.5.1 交互式程序 20
- 2.5.2 创建脚本 21
- 2.5.3 把脚本设置为可执行 22
- 2.6 shell的语法 23
- 2.6.1 变量 23
- 2.6.2 条件 27
- 2.6.3 控制结构 29
- 2.6.4 函数 39
- 2.6.5 命令 42
- 2.6.6 命令的执行 58
- 2.6.7 here文档 61
- 2.6.8 调试脚本程序 63
- 2.7 迈向图形化:dialog工具 63
- 2.8 综合应用 68
- 2.8.1 需求 68
- 2.8.2 设计 68
- 2.8.3 应用程序的说明 76
- 2.9 小结 77
- 第3章 文件操作 78
- 3.1 Linux文件结构 78
- 3.1.1 目录 79
- 3.1.2 文件和设备 79
- 3.2 系统调用和设备驱动程序 80
- 3.3 库函数 81
- 3.4 底层文件访问 82
- 3.4.1 write系统调用 82
- 3.4.2 read系统调用 83
- 3.4.3 open系统调用 84
- 3.4.4 访问权限的初始值 85
- 3.4.5 其他与文件管理有关的系统调用 88
- 3.5 标准I/O库 91
- 3.5.1 fopen函数 91
- 3.5.2 fread函数 92
- 3.5.3 fwrite函数 92
- 3.5.4 fclose函数 92
- 3.5.5 fflush函数 93
- 3.5.6 fseek函数 93
- 3.5.7 fgetc、getc和getchar函数 93
- 3.5.8 fputc、putc和putchar函数 94
- 3.5.9 fgets和gets函数 94
- 3.6 格式化输入和输出 94
- 3.6.1 printf、fprintf和sprintf函数 94
- 3.6.2 scanf、fscanf和sscanf函数 96
- 3.6.3 其他流函数 98
- 3.6.4 文件流错误 99
- 3.6.5 文件流和文件描述符 99
- 3.7 文件和目录的维护 100
- 3.7.1 chmod系统调用 100
- 3.7.2 chown系统调用 100
- 3.7.3 unlink、link和symlink系统调用 100
- 3.7.4 mkdir和rmdir系统调用 101
- 3.7.5 chdir系统调用和getcwd函数 101
- 3.8 扫描目录 102
- 3.8.1 opendir函数 102
- 3.8.2 readdir函数 102
- 3.8.3 telldir函数 103
- 3.8.4 seekdir函数 103
- 3.8.5 closedir函数 103
- 3.9 错误处理 106
- 3.9.1 strerror函数 106
- 3.9.2 perror函数 106
- 3.10 /proc文件系统 107
- 3.11 高级主题:fcntl和mmap 110
- 3.11.1 fcntl系统调用 110
- 3.11.2 mmap函数 111
- 3.12 小结 113
- 第4章 Linux环境 114
- 4.1 程序参数 114
- 4.1.1 getopt 116
- 4.1.2 getopt_long 118
- 4.2 环境变量 120
- 4.2.1 环境变量的用途 122
- 4.2.2 environ变量 122
- 4.3 时间和日期 123
- 4.4 临时文件 129
- 4.5 用户信息 131
- 4.6 主机信息 134
- 4.7 日志 135
- 4.8 资源和限制 139
- 4.9 小结 143
- 第5章 终端 144
- 5.1 对终端进行读写 144
- 5.2 与终端进行对话 149
- 5.3 终端驱动程序和通用终端接口 151
- 5.3.1 概述 151
- 5.3.2 硬件模型 151
- 5.4 termios结构 152
- 5.4.1 输入模式 153
- 5.4.2 输出模式 154
- 5.4.3 控制模式 155
- 5.4.4 本地模式 155
- 5.4.5 特殊控制字符 155
- 5.4.6 终端速度 158
- 5.4.7 其他函数 159
- 5.5 终端的输出 162
- 5.5.1 终端的类型 163
- 5.5.2 识别终端类型 163
- 5.5.3 使用terminfo功能标志 165
- 5.6 检测击键动作 170
- 5.7 虚拟控制台 172
- 5.8 伪终端 173
- 5.9 小结 174
- 第6章 使用curses函数库管理基于文本的屏幕 175
- 6.1 用curses函数库进行编译 175
- 6.2 curses术语和概念 176
- 6.3 屏幕 178
- 6.3.1 输出到屏幕 179
- 6.3.2 从屏幕读取 180
- 6.3.3 清除屏幕 180
- 6.3.4 移动光标 180
- 6.3.5 字符属性 181
- 6.4 键盘 183
- 6.4.1 键盘模式 183
- 6.4.2 键盘输入 184
- 6.5 窗口 185
- 6.5.1 WINDOW结构 185
- 6.5.2 通用函数 186
- 6.5.3 移动和更新窗口 187
- 6.5.4 优化屏幕刷新 190
- 6.6 子窗口 191
- 6.7 keypad模式 193
- 6.8 彩色显示 195
- 6.9 pad 198
- 6.10 CD唱片应用程序 200
- 6.10.1 新CD唱片应用程序的开始部分 200
- 6.10.2 main函数 202
- 6.10.3 建立菜单 203
- 6.10.4 操作数据库文件 204
- 6.10.5 查询CD数据库 209
- 6.11 小结 213
- 第7章 数据管理 214
- 7.1 内存管理 214
- 7.1.1 简单的内存分配 214
- 7.1.2 分配大量的内存 215
- 7.1.3 滥用内存 218
- 7.1.4 空指针 219
- 7.1.5 释放内存 220
- 7.1.6 其他内存分配函数 221
- 7.2 文件锁定 222
- 7.2.1 创建锁文件 222
- 7.2.2 区域锁定 225
- 7.2.3 锁定状态下的读写操作 227
- 7.2.4 文件锁的竞争 232
- 7.2.5 其他锁命令 236
- 7.2.6 死锁 236
- 7.3 数据库 237
- 7.3.1 dbm数据库 237
- 7.3.2 dbm例程 238
- 7.3.3 dbm访问函数 239
- 7.3.4 其他dbm函数 242
- 7.4 CD唱片应用程序 244
- 7.4.1 更新设计 244
- 7.4.2 使用dbm数据库的CD唱片应用程序 245
- 7.5 小结 262
- 第8章 MySQL 263
- 8.1 安装 263
- 8.1.1 MySQL软件包 264
- 8.1.2 安装后的配置 266
- 8.1.3 安装后的故障修复 270
- 8.2 MySQL管理 270
- 8.2.1 命令 270
- 8.2.2 创建用户并赋予权限 274
- 8.2.3 密码 276
- 8.2.4 创建数据库 276
- 8.2.5 数据类型 277
- 8.2.6 创建表 278
- 8.2.7 图形化工具 280
- 8.3 使用C语言访问MySQL数据 283
- 8.3.1 连接例程 283
- 8.3.2 错误处理 287
- 8.3.3 执行SQL语句 288
- 8.3.4 更多的函数 301
- 8.4 CD数据库应用程序 301
- 8.4.1 创建表 302
- 8.4.2 添加数据 304
- 8.4.3 使用C语言访问数据 306
- 8.5 小结 316
- 第9章 开发工具 317
- 9.1 多个源文件带来的问题 317
- 9.2 make命令和makefile文件 318
- 9.2.1 makefile的语法 318
- 9.2.2 make命令的选项和参数 318
- 9.2.3 makefile文件中的注释 321
- 9.2.4 makefile文件中的宏 321
- 9.2.5 多个目标 323
- 9.2.6 内置规则 325
- 9.2.7 后缀和模式规则 326
- 9.2.8 用make管理函数库 327
- 9.2.9 高级主题:makefile文件和子目录 329
- 9.2.10 GNU make和gcc 329
- 9.3 源代码控制 330
- 9.3.1 RCS 331
- 9.3.2 SCCS 336
- 9.3.3 RCS和SCCS的比较 336
- 9.3.4 CVS 337
- 9.3.5 CVS的前端程序 340
- 9.3.6 Subversion 341
- 9.4 编写手册页 342
- 9.5 发行软件 345
- 9.5.1 patch程序 345
- 9.5.2 其他软件发行工具 347
- 9.6 RPM软件包 349
- 9.6.1 使用RPM软件包文件 349
- 9.6.2 安装RPM软件包 350
- 9.6.3 创建RPM软件包 350
- 9.7 其他软件包格式 358
- 9.8 开发环境 358
- 9.8.1 KDevelop 358
- 9.8.2 其他开发环境 360
- 9.9 小结 360
- 第10章 调试 361
- 10.1 错误类型 361
- 10.2 常用调试技巧 362
- 10.2.1 有漏洞的程序 362
- 10.2.2 代码检查 364
- 10.2.3 取样法 365
- 10.2.4 程序的受控执行 367
- 10.3 使用gdb进行调试 368
- 10.3.1 启动gdb 368
- 10.3.2 运行一个程序 369
- 10.3.3 栈跟踪 369
- 10.3.4 检查变量 370
- 10.3.5 列出程序源代码 370
- 10.3.6 设置断点 371
- 10.3.7 用调试器打补丁 374
- 10.3.8 深入学习gdb 375
- 10.4 其他调试工具 375
- 10.4.1 lint:清理程序中的“垃圾” 376
- 10.4.2 函数调用工具 378
- 10.4.3 用prof/gprof产生执行存档 380
- 10.5 断言 381
- 10.6 内存调试 383
- 10.6.1 ElectricFence函数库 383
- 10.6.2 valgrind 384
- 10.7 小结 387
- 第11章 进程和信号 388
- 11.1 什么是进程 388
- 11.2 进程的结构 388
- 11.2.1 进程表 390
- 11.2.2 查看进程 390
- 11.2.3 系统进程 391
- 11.2.4 进程调度 393
- 11.3 启动新进程 394
- 11.3.1 等待一个进程 399
- 11.3.2 僵尸进程 401
- 11.3.3 输入和输出重定向 403
- 11.3.4 线程 404
- 11.4 信号 404
- 11.4.1 发送信号 408
- 11.4.2 信号集 412
- 11.5 小结 415
- 第12章 POSIX线程 416
- 12.1 什么是线程 416
- 12.2 线程的优点和缺点 417
- 12.3 第一个线程程序 418
- 12.4 同时执行 421
- 12.5 同步 423
- 12.5.1 用信号量进行同步 423
- 12.5.2 用互斥量进行同步 427
- 12.6 线程的属性 431
- 12.7 取消一个线程 435
- 12.8 多线程 438
- 12.9 小结 442
- 第13章 进程间通信:管道 443
- 13.1 什么是管道 443
- 13.2 进程管道 444
- 13.3 将输出送往popen 445
- 13.3.1 传递更多的数据 446
- 13.3.2 如何实现popen 447
- 13.4 pipe调用 449
- 13.5 父进程和子进程 451
- 13.5.1 管道关闭后的读操作 453
- 13.5.2 把管道用作标准输入和标准输出 454
- 13.6 命名管道:FIFO 456
- 13.6.1 访问FIFO文件 458
- 13.6.2 高级主题:使用FIFO的客户/服务器应用程序 464
- 13.7 CD数据库应用程序 468
- 13.7.1 目标 469
- 13.7.2 实现 469
- 13.7.3 客户接口函数 472
- 13.7.4 服务器接口server.c 478
- 13.7.5 管道 481
- 13.7.6 对CD数据库应用程序的总结 487
- 13.8 小结 487
- 第14章 信号量、共享内存和消息队列 488
- 14.1 信号量 488
- 14.1.1 信号量的定义 489
- 14.1.2 一个理论性的例子 489
- 14.1.3 Linux的信号量机制 490
- 14.1.4 使用信号量 492
- 14.2 共享内存 496
- 14.2.1 shmget函数 497
- 14.2.2 shmat函数 497
- 14.2.3 shmdt 498
- 14.2.4 shmctl 498
- 14.3 消息队列 502
- 14.3.1 msgget函数 502
- 14.3.2 msgsnd函数 503
- 14.3.3 msgrcv函数 503
- 14.3.4 msgctl函数 504
- 14.4 CD数据库应用程序 507
- 14.4.1 修改服务器函数 507
- 14.4.2 修改客户函数 509
- 14.5 IPC状态命令 511
- 14.5.1 显示信号量状态 511
- 14.5.2 显示共享内存状态 511
- 14.5.3 显示消息队列状态 511
- 14.6 小结 512
- 第15章 套接字 513
- 15.1 什么是套接字 513
- 15.2 套接字连接 513
- 15.2.1 套接字属性 517
- 15.2.2 创建套接字 519
- 15.2.3 套接字地址 520
- 15.2.4 命名套接字 520
- 15.2.5 创建套接字队列 521
- 15.2.6 接受连接 521
- 15.2.7 请求连接 522
- 15.2.8 关闭套接字 523
- 15.2.9 套接字通信 523
- 15.2.10 主机字节序和网络字节序 525
- 15.3 网络信息 527
- 15.3.1 因特网守护进程(xinetd/inetd) 531
- 15.3.2 套接字选项 533
- 15.4 多客户 534
- 15.4.1 select系统调用 537
- 15.4.2 多客户 540
- 15.5 数据报 543
- 15.6 小结 545
- 第16章 用GTK+进行GNOME编程 546
- 16.1 X视窗系统简介 546
- 16.1.1 X服务器 547
- 16.1.2 X客户端 547
- 16.1.3 X协议 547
- 16.1.4 Xlib库 547
- 16.1.5 X工具包 547
- 16.1.6 窗口管理器 548
- 16.1.7 创建GUI的其他方法——平台无关的窗囗API 548
- 16.2 GTK+简介 549
- 16.2.1 GLib类型系统 549
- 16.2.2 GTK+对象系统 550
- 16.2.3 GNOME简介 550
- 16.2.4 安装GNOME/GTK+开发库 551
- 16.3 事件、信号和回调函数 554
- 16.4 组装盒构件 556
- 16.5 GTK+构件 559
- 16.5.1 GtkWindow 559
- 16.5.2 GtkEntry 560
- 16.5.3 GtkSpinButton 563
- 16.5.4 GtkButton 565
- 16.5.5 GtkTreeView 568
- 16.6 GNOME构件 571
- 16.7 GNOME菜单 572
- 16.8 对话框 576
- 16.8.1 GtkDialog 577
- 16.8.2 模式对话框 578
- 16.8.3 非模式对话框 579
- 16.8.4 GtkMessageDialog 580
- 16.9 CD数据库应用程序 581
- 16.10 小结 592
- 第17章 用Qt进行KDE编程 593
- 17.1 KDE和Qt简介 593
- 17.2 安装Qt 594
- 17.3 信号和槽 596
- 17.4 Qt构件 602
- 17.4.1 QLineEdit 602
- 17.4.2 Qt按钮 605
- 17.4.3 QComboBox 609
- 17.4.4 QListView 613
- 17.5 对话框 615
- 17.5.1 QDialog 615
- 17.5.2 QMessageBox 617
- 17.5.3 QInputDialog 618
- 17.5.4 使用qmake简化makefile文件的编写 620
- 17.6 KDE的菜单和工具栏 620
- 17.7 使用KDE/Qt编写CD数据库应用程序 624
- 17.7.1 主窗口 624
- 17.7.2 AddCdDialog 627
- 17.7.3 LogonDialog 629
- 17.7.4 main.cpp 630
- 17.8 小结 632
- 第18章 Linux标准 633
- 18.1 C编程语言 634
- 18.1.1 发展历史简介 634
- 18.1.2 GNU编译器集 634
- 18.1.3 gcc选项 635
- 18.2 接口和LSB 636
- 18.2.1 LSB标准函数库 637
- 18.2.2 LSB用户和组 638
- 18.2.3 LSB系统初始化 638
- 18.3 文件系统层次结构标准 639
- 18.4 更多标准 642
- 18.5 小结 642