书籍详情

Linux编程技术详解

Linux编程技术详解

作者:杜华

出版社:人民邮电出版社

出版时间:2007-11-01

ISBN:9787115166791

定价:¥59.00

购买这本书可以去
内容简介
  本书全面介绍了Linux编程相关的知识,内容涵盖Linux基本知识、如何建立Linux开发环境、Linux开发工具、Linux文件系统、文件I/O操作、设备文件、进程与进程环境、守护进程、基本进程间通信方法、管道与命名管道、POSIX IPC、Linux下的多线程、Linux网络编程、网络嗅探器、Linux图形界面开发基础、GTK+图形界面编程、界面布局与按钮构件、GTK常用构件、对话框、菜单与工具条等。 本书力求以全面的内容及丰富的实例来指导读者了解和掌握Linux编程的方方面面,书中提供了大量的实例,使读者加深对于所介绍知识的理解,这些实例对于实际的项目开发同样有很强的参考价值。 本书通俗易懂,适合Linux编程的初学者、Linux程序员以及高校计算机相关专业的师生参考使用。
作者简介
暂缺《Linux编程技术详解》作者简介
目录
第1章 Linux基本知识 1
1.1 Linux系统概述 2
1.1.1 Linux的发展历史 2
1.1.2 Linux与UNIX的关系 2
1.1.3 Linux的发音 3
1.2 POSIX标准与Linux Standard Base 3
1.2.1 POSIX标准 3
1.2.2 Linux Standard Base 3
1.3 GNU和GNU通用公共许可证(GPL) 4
1.3.1 GNU介绍 4
1.3.2 GNU通用公共许可证(GPL) 4
1.4 内核就是Linux 4
1.5 文件系统分级结构标准(FHS) 5
1.5.1 FHS简介 5
1.5.2 Linux目录结构 5
1.6 Linux系统结构 6
1.7 小结 7
第2章 Linux开发环境 9
2.1 Linux发行版本介绍 10
2.2 Linux的文件系统 11
2.3 Linux的LiveCD 12
2.4 Fedora Core 6的安装 12
2.4.1 为Linux系统预留磁盘空间 13
2.4.2 选择Fedora Core的系统语言 14
2.4.3 为Fedora Core划分磁盘分区 15
2.4.4 安装GRUB菜单并设置网络环境 16
2.4.5 设置时区并定制安装软件 16
2.5 Ubuntu Desktop 6.10的安装 18
2.5.1 选择系统默认语言并设置时区 18
2.5.2 添加用户并设置磁盘分区 20
2.5.3 完成系统安装 21
2.6 虚拟机简介与VMware的安装 22
2.6.1 VMware简介 23
2.6.2 Virtual PC介绍 23
2.6.3 Xen介绍 24
2.6.4 Linux平台下VMware WorkStation的安装 24
2.7 在VMware WorkStation中安装Linux系统 30
2.7.1 创建虚拟系统文件 30
2.7.2 配置虚拟系统的硬件环境 32
2.7.3 在虚拟系统中安装Linux系统 34
2.7.4 向VMware虚拟机添加新硬件 35
2.7.5 在Linux中使用新添加的硬件 37
2.8 远程连接Linux服务器 40
2.8.1 商业软件开发中的代码控制模式 40
2.8.2 SSH服务介绍 41
2.8.3 使用PuTTY登录SSH服务器 42
2.8.4 开放X Window远程访问服务 43
2.8.5 在Window系统中登录Linux图形用户界面 44
2.9 包管理工具Yum与APT 45
2.9.1 Yum介绍 46
2.9.2 APT介绍 46
2.9.3 使用APT配置开发环境 46
2.10 小结 47
第3章 Linux开发工具 49
3.1 文本编辑器:Vi 50
3.1.1 Vi编辑器的工作模式 50
3.1.2 Vi编辑器的基本操作 50
3.1.3 进入插入模式 51
3.1.4 末行模式下的常用命令 52
3.1.5 删除命令 52
3.1.6 搜索及替换命令 52
3.1.7 Vi加密文件 53
3.1.8 在Vi中打开语法加亮和启用自动缩进功能 53
3.2 文本编辑器:Emacs 54
3.2.1 启动和退出Emacs 54
3.2.2 Emacs的基本编辑命令 54
3.3 源代码阅读工具:Source Insight 55
3.3.1 在Windows平台上的使用 55
3.3.2 在Linux平台上的使用 57
3.4 源代码阅读工具:Vim+Taglist+Ctags 57
3.4.1 Taglist和Ctags介绍 57
3.4.2 安装Tag List和Ctags 57
3.4.3 使用Vim+Taglist+Ctags阅读代码 60
3.5 源代码阅读工具:Vim+Cscope 62
3.5.1 Cscope的安装 62
3.5.2 Cscope的使用 64
3.5.3 Vim+Cscope的使用 65
3.5.4 Vim+Cscope阅读代码实例 67
3.6 源代码阅读工具:SlickEdit 68
3.6.1 安装SlickEdit 68
3.6.2 SlickEdit的使用 69
3.7 基于Web的源代码阅读工具:Linux Cross-Reference 70
3.8 Linux下的C/C++编译器 71
3.8.1 编译器基础 71
3.8.2 GNU GCC介绍 71
3.8.3 使用GCC编译C代码 72
3.8.4 使用GCC编译C++代码 73
3.8.5 使用GCC控制编译过程 74
3.9 应用GNU Make实现项目管理 76
3.9.1 GNU Make介绍 76
3.9.2 简单makefile示例 77
3.9.3 makefile的语法 78
3.9.4 Make工作流程 80
3.9.5 makefile的隐含规则 82
3.9.6 makefile的模式规则 84
3.10 Linux下的调试工具 84
3.10.1 GDB介绍 84
3.10.2 使用GDB调试简单的用户程序 85
3.10.3 GDB常用命令 92
3.10.4 可视化DDD调试工具介绍 97
3.10.5 DDD的安装 98
3.10.6 使用DDD调试无运行参数的程序 99
3.10.7 使用DDD调试带运行参数的程序 101
3.10.8 GDB 远程调试 102
3.11 小结 103
第4章 Linux文件和目录 105
4.1 Linux目录 106
4.1.1 Linux目录的基本概念与设备挂载 106
4.1.2 虚拟文件系统介绍 106
4.1.3 getcwd函数——获得当前工作目录 107
4.1.4 pathconf函数——获得系统目录最大长度 109
4.1.5 chdir,fchdir函数——更改当前工作目录 110
4.1.6 mkdir、rmdir函数——创建和删除目录 112
4.2 Linux文件 114
4.2.1 Linux的文件实现 114
4.2.2 文件描述符与文件指针 115
4.2.3 文件的访问权限 117
4.2.4 stat、fstate、lstat函数——获得文件信息 118
4.2.5 chmod,fchmod函数——修改文件权限 123
4.2.6 chown、fchown、lchown函数——修改文件的拥有者 125
4.2.7 umask函数 126
4.3 硬链接与符号链接 128
4.3.1 硬链接 129
4.3.2 符号链接 129
4.3.3 创建或删除链接 130
4.3.4 创建和删除符号链接 131
4.4 综合实例:编写自己的ls命令 132
4.4.1 ls命令功能分析 132
4.4.2 具体模块划分 133
4.4.3 目录文件列表获得模块 134
4.4.4 信息输出模块 136
4.4.5 具体代码实现示例 136
4.5 小结 140
第5章 文件I/O操作 141
5.1 open与close函数 142
5.1.1 open函数 142
5.1.2 close函数 144
5.2 creat函数 145
5.3 read与write函数 146
5.3.1 read函数 146
5.3.2 write函数 148
5.4 lseek函数 150
5.5 dup与dup2函数 152
5.6 小结 154
第6章 设备文件 155
6.1 设备文件简述 156
6.2 Linux设备驱动工作流程 157
6.3 终端设备 157
6.4 终端控制 159
6.4.1 使用stty命令显示终端设置 159
6.4.2 重置终端参数 159
6.4.3 获得当前终端名称 160
6.4.4 使用tcgetattr函数与tcsetattr函数控制终端 161
6.5 密码输入关闭回显的两种方法 165
6.5.1 使用curses库 165
6.5.2 使用tcgetattr函数和tcsetattr函数 167
6.6 串口通信的基本概念 168
6.6.1 串行通信与串口定义 169
6.6.2 串口通信的基本参数 169
6.7 在Linux下进行串口通信 170
6.7.1 打开串口 171
6.7.2 设置串口通信参数 171
6.7.3 读写串口 174
6.7.4 关闭串口 174
6.8 综合实例:串口读写程序示例 175
6.9 音频设备文件编程基础 180
6.9.1 数字音频基础 180
6.9.2 Linux下的音频设备文件 180
6.9.3 访问音频设备文件基本步骤 181
6.10 让扬声器发声 182
6.11 Linux下声卡编程 184
6.11.1 播放指定音频文件 184
6.11.2 录制音频文件 186
6.12 小结 188
第7章 进程与进程环境 189
7.1 进程分类 190
7.1.1 交互进程 190
7.1.2 批处理进程 190
7.1.3 守护进程 190
7.2 虚拟内存 190
7.2.1 Linux系统虚拟内存的功能 190
7.2.2 在Linux系统中查看虚拟内存的使用 191
7.3 进程内存 192
7.3.1 进程内存结构 192
7.3.2 进程内存结构分析程序示例 193
7.4 进程标识 196
7.4.1 进程ID与父进程ID 196
7.4.2 用户标识(UID)和有效用户标识(EUID) 198
7.4.3 组标识(GID)和有效组标识(EGID) 200
7.5 Linux进程相关系统调用 201
7.5.1 fork函数 201
7.5.2 vfork函数 203
7.5.3 传统fork系统调用和vfork系统调用的区别 203
7.5.4 fork函数与vfork函数区别示例 203
7.5.5 Linux系统中实现fork系统调用的机制 204
7.5.6 exec函数族 205
7.5.7 exit、_exit函数与return的不同 207
7.5.8 exit函数 208
7.5.9 _exit函数 209
7.5.10 exit函数与_exit函数区别 210
7.5.11 wait函数 210
7.5.12 使用kill函数发送信号 212
7.5.13 用于检测退出状态的宏 214
7.5.14 waitpid函数 215
7.6 僵尸进程 217
7.7 小结 218
第8章 守护进程 219
8.1 守护进程(daemon)介绍 220
8.2 创建守护进程 220
8.2.1 实现守护进程的步骤 220
8.2.2 守护进程具体实现 222
8.3 守护进程的日志实现 224
8.3.1 syslogd守护进程 224
8.3.2 syslogd守护进程配置文件说明 224
8.3.3 守护进程日志的实现 227
8.4 Client/Server工作模式 230
8.5 综合实例:定时执行任务的守护进程 230
8.6 小结 230
第9章 基本进程间通信方法 231
9.1 使用文件实现进程互斥 232
9.1.1 使用文件实现进程互斥程序的模块划分 232
9.1.2 使用文件实现进程互斥程序实例 232
9.1.3 程序存在的问题 235
9.2 Linux文件锁 235
9.2.1 fcntl函数 235
9.2.2 综合实例:使用fcntl实现进程互斥 239
9.2.3 lockf函数 241
9.2.4 flock函数 244
9.3 信号的基本概念 244
9.3.1 信号的产生方式 244
9.3.2 捕获信号时的处理 245
9.4 常见信号与信号分类 245
9.4.1 查看Linux系统中支持的信号 245
9.4.2 常见信号说明 245
9.4.3 使用信号终止程序的执行 247
9.4.4 信号分类 247
9.5 产生信号 248
9.5.1 kill函数 248
9.5.2 raise函数 248
9.5.3 alarm函数 249
9.6 捕捉或忽略信号 251
9.6.1 signal函数 251
9.6.2 sigaction函数 252
9.7 综合实例:实现对用户邮件的自动检测 255
9.7.1 守护进程和信号处理模块 256
9.7.2 新邮件判断模块 258
9.7.3 主函数 259
9.8 小结 260
第10章 管道与命名管道 261
10.1 管道 262
10.1.1 管道的基本概念 262
10.1.2 管道读写过程描述 262
10.1.3 pipe函数与进程间通信 263
10.1.4 使用管道实现进程间的双向通信 265
10.2 综合实例:Shell管道重定向实现 267
10.2.1 Shell重定向思想分析 267
10.2.2 类似程序的设计 267
10.3 popen函数与pclose函数 269
10.3.1 popen函数 269
10.3.2 pclose函数 269
10.3.3 Shell管道重定向程序的再实现 271
10.4 命名管道 273
10.4.1 命名管道的基本概念 273
10.4.2 在Shell中创建命名管道 273
10.4.3 mkfifo函数 274
10.5 小结 277
第11章 POSIX IPC 279
11.1 基本概念 280
11.1.1 消息队列简介 280
11.1.2 信号量简介 280
11.1.3 共享内存简介 280
11.1.4 IPC资源 280
11.1.5 IPC标识符与关键字 281
11.2 基本IPC命令 282
11.2.1 ipcs命令 282
11.2.2 ipcrm命令 283
11.3 消息队列 284
11.3.1 创建消息队列 284
11.3.2 消息队列中的基本数据结构 286
11.3.3 msgctl函数 288
11.3.4 msgsnd函数 291
11.3.5 msgrcv函数 295
11.4 信号量 297
11.4.1 临界区与信号量、信号量集 298
11.4.2 创建信号量集 298
11.4.3 信号量集中的semid_ds数据结构 300
11.4.4 semctl函数 301
11.4.5 信号量集操作 305
11.5 共享内存 309
11.5.1 创建共享内存 309
11.5.2 共享内存的基本数据结构 312
11.5.3 shmctl函数 313
11.5.4 shmat函数 316
11.5.5 shmdt函数 317
11.6 小结 320
第12章 Linux系统下的多线程 321
12.1 多线程简介 322
12.1.1 线程的基本概念 322
12.1.2 线程分类 322
12.1.3 多进程VS多线程 322
12.2 创建线程与退出线程 323
12.2.1 pthread_create函数 323
12.2.2 pthread_exit函数 324
12.3 基本线程管理 325
12.4 线程属性 327
12.4.1 初始化线程属性 327
12.4.2 设置和获得线程分离状态 328
12.4.3 设置和获得线程属性对象的作用域 329
12.4.4 设置和获得线程属性对象的继承性 330
12.4.5 设置和获得线程属性对象的调度策略 331
12.4.6 设置和获得线程属性对象的调度参数 332
12.4.7 实例:设置线程优先级 332
12.5 线程同步 335
12.6 互斥锁 336
12.6.1 创建互斥锁 336
12.6.2 互斥锁的加锁 337
12.6.3 互斥锁的解锁 338
12.7 线程同步实例 338
12.8 小结 340
第13章 Linux网络编程 341
13.1 套接字编程基础 342
13.1.1 套接字与端口 342
13.1.2 套接字编程相关数据结构 343
13.1.3 套接字类型 343
13.1.4 big-endian与little-endian 343
13.2 面向连接的套接字通信 345
13.2.1 工作流程 346
13.2.2 socket函数 346
13.2.3 bind函数 348
13.2.4 listen函数 349
13.2.5 accept函数 349
13.2.6 connect函数 350
13.2.7 发送与接收数据 351
13.2.8 关闭套接字 353
13.3 UNIX domain中面向连接通信实现实例 353
13.3.1 服务器端实现 354
13.3.2 客户端实现 355
13.3.3 程序运行结果分析 356
13.4 Internet domain中面向连接通信实现实例 357
13.4.1 服务器端实现 357
13.4.2 客户端实现 360
13.5 无连接的套接字通信 362
13.5.1 工作流程 362
13.5.2 recvfrom函数 363
13.5.3 sendto函数 363
13.6 UNIX domain中面向无连接通信实现实例 364
13.6.1 服务器端实现 364
13.6.2 客户端实现 365
13.6.3 程序执行结果 367
13.7 Internet domain中面向无连接通信实现实例 367
13.7.1 服务器端实现 367
13.7.2 客户端实现 369
13.7.3 程序执行结果 370
13.8 使用select实现多路I/O复用 371
13.9 网络的多路I/O复用实现实例 373
13.10 小结 376
第14章 网络嗅探器 377
14.1 网络嗅探器的基本原理 378
14.1.1 共享型以太网 378
14.1.2 交换型以太网 378
14.1.3 网卡的工作模式 379
14.1.4 网络嗅探器工作流程 379
14.2 Wireshark(Ethereal)介绍 379
14.2.1 Wireshark(Ethereal)简介 380
14.2.2 Wireshark(Ethereal)的使用 380
14.3 libpcap介绍与安装 381
14.3.1 libpcap介绍 381
14.3.2 配置编译环境 381
14.3.3 编译libpcap 382
14.3.4 安装编译出的文件 382
14.4 使用libpcap开发网络嗅探器 383
14.4.1 确定捕获网络数据包的网卡 383
14.4.2 打开网络设备 386
14.4.3 设置过滤条件 387
14.4.4 获取数据包 388
14.4.5 关闭网络设备 394
14.5 基于libpcap的网络嗅探器实例 395
14.6 小结 405
第15章 Linux图形界面开发基础 407
15.1 X Window系统简介 408
15.1.1 X Window的历史 408
15.1.2 X Window体系结构 408
15.2 Linux桌面环境 409
15.2.1 KDE 409
15.2.2 GNOME 409
15.3 Linux下的图形开发包 410
15.3.1 GTK+简介 410
15.3.2 GTK+的安装 411
15.4 小结 412
第16章 GTK+图形界面编程 413
16.1 编写简单的图形界面程序 414
16.1.1 简单GTK+程序示例 414
16.1.2 程序分析 414
16.1.3 设置窗口属性 416
16.2 GTK+的信号与事件 417
16.2.1 GTK+信号 418
16.2.2 GTK+事件 418
16.3 为程序添加信号处理和按钮 420
16.3.1 原有程序存在的问题 420
16.3.2 为程序添加事件、信号处理程序示例 421
16.4 小结 423
第17章 界面布局与按钮构件 425
17.1 界面布局 426
17.1.1 容器构件 426
17.1.2 组装盒(GtkBox)与按钮盒(GtkButtonBox) 427
17.1.3 表构件(GtkTable) 432
17.1.4 固定容器构件(GtkFixed) 435
17.1.5 布局容器构件(GtkLayout) 438
17.2 按钮构件 440
17.2.1 按钮中的信号 440
17.2.2 双态按钮(GtkToggleButton) 441
17.2.3 复选按钮(GtkCheckButton) 444
17.2.4 单选按钮(GtkRadioButton) 444
17.3 小结 446
第18章 GTK+常用构件 447
18.1 标签构件(GtkLabel) 448
18.1.1 创建标签构件 448
18.1.2 设置与获取标签文字 448
18.1.3 标签构件使用实例 448
18.2 列表构件(GtkList) 450
18.2.1 列表构件中的信号 450
18.2.2 创建列表构件 450
18.2.3 列表构件的选择模式 450
18.2.4 添加或删除列表构件中的项目 451
18.3 编辑构件(GtkEntry) 451
18.3.1 创建编辑构件 451
18.3.2 设置和获取编辑构件中的内容 452
18.3.3 修改编辑构件属性 453
18.3.4 编辑构件的信号 453
18.3.5 编辑构件使用实例 454
18.4 组合框构件(GtkCombox) 456
18.4.1 创建组合框构件 456
18.4.2 设置组合框的内容 456
18.4.3 组合框构件使用实例 457
18.5 框架构件(GtkFrame) 459
18.5.1 创建框架构件 459
18.5.2 设置框架构件 459
18.5.3 框架构件使用实例 460
18.6 进度条构件(GtkProgressBar) 462
18.6.1 创建进度条构件 462
18.6.2 控制进度条 462
18.6.3 使用定时器控制进度条的移动 463
18.6.4 进度条构件使用实例 464
18.7 小结 466
第19章 对话框 467
19.1 使用对话框 468
19.1.1 创建对话框 468
19.1.2 设置对话框大小 469
19.2 文件选择对话框(GtkFileSelection) 470
19.2.1 创建文件选择对话框 470
19.2.2 显示或隐藏Fileop按钮 472
19.2.3 定制文件选择对话框实例 473
19.3 字体选择对话框(GtkFontSelectionDialog) 477
19.3.1 函数介绍 477
19.3.2 字体选择对话框使用实例 478
19.4 小结 481
第20章 菜单与工具条 483
20.1 创建菜单 484
20.1.1 菜单结构 484
20.1.2 在程序中使用菜单 484
20.1.3 菜单使用实例 487
20.2 工具条(GtkToolbar) 489
20.2.1 在程序中使用工具条 489
20.2.2 工具条使用实例 491
20.3 小结 493
第21章 综合实例:ping程序的实现 495
21.1 ping程序介绍 496
21.1.1 ping程序的使用 496
21.1.2 ping程序反馈信息分析 497
21.2 ping程序与ICMP协议 498
21.2.1 ping程序分析 498
21.2.2 ICMP协议简介 499
21.3 ping程序的设计 501
21.3.1 报文校验算法 501
21.3.2 报文校验算法的具体实现 501
21.3.3 ping程序主要流程 503
21.3.4 IP包头与ICMP包头定义 503
21.3.5 构造IP与ICMP数据包 505
21.4 简单ping程序的实现 507
21.5 ping程序的改进 511
21.5.1 显示收到的ICMP数据包信息 511
21.5.2 接收超时解决办法 512
21.5.3 改进后程序代码与执行结果 512
21.6 小结 516
猜您喜欢

读书导航