书籍详情
LInux C编程
作者:李玉波,朱自强,郭军编著
出版社:清华大学出版社
出版时间:2005-09-01
ISBN:9787302113690
定价:¥36.00
购买这本书可以去
内容简介
本书通过列举大量的程序实例,系统地介绍了在Linux平台下用c语言进行程序开发的过程,以使读者快速掌握在Linux平台下进行c程序开发的方法和技巧,并具备开发大型应用程序的能力。本书除了示范各种Linuxc编程技术外,对于其中产生的关键程序代码也进行了详细分析,读者将从中更深一步地掌握Linuxc编程的相关知识。本书中的实例具有很强的代表性,都是目前Linuxc编程中经常用到的,对这些实例稍作修改,即可应用于实际Linuxc应用程序的开发。本书系统地介绍了在Linux平台下用C语言进行程序开发的过程,通过列举大量的程序实例,使读者很快掌握在Linux平台下进行C程序开发的方法和技巧,并具备开发大型应用程序的能力。本书内容翔实,主要包括:Linux平台下c语言及其编程环境的介绍,c语言编译器、调试工具和自动维护工具的使用方法,Linux系统提供的特有函数调用,在c程序中访问文件的方法,进程的概念、进程间通信及多进程同步运行的实现手段,c语言网络编程方法以及curses编程等。本书结构合理、概念清晰、实例丰富,并具有很强的启发性和实用性,适合于有一定的c语言基础,需要在Linux系统上编程的程序设计人员阅读。
作者简介
李玉波,共创软件联盟BBS UNIX&Linux系统/网络管理版版主。2002-2004年负责徐州空军革学院网管中心网络组建及维护及其学校网站的开发,并参与开发总参组织的网络教学系统;2004年9月至今担任空军济南某训练团自动化教研教员,兼新装备研究室开发人员,曾参与多个部队软件项目的开发,并获军队科技进步奖。
目录
第1章 Linux下C语言编程简介 1
1.1 Linux简介 1
1.2 C语言的简介和特点 4
1.3 Linux程序设计基础知识 5
1.3.1 程序安装目录 5
1.3.2 头文件 5
1.3.3 库文件 6
1.4 Linux下C语言编程环境
概述 7
1.5 Linux程序设计的特点 9
1.6 Linux下C语言编码的风格 10
1.6.1 GNU编程风格 10
1.6.2 Linux 内核编程风格 11
第2章 vi与emacs编辑器 12
2.1 vim概述及应用 12
2.2 emacs简介及应用 17
2.3 Linux下的其他编辑器 21
2.3.1 最简单的文本编辑器ed 21
2.3.1 最容易上手的编辑器
pico 23
第3章 gcc编译器 27
3.1 gcc简介 27
3.2 使用gcc 28
3.3 gcc警告提示功能 30
3.4 库依赖 32
3.5 gcc代码优化 33
3.6 加速 34
3.7 gcc常用选项 35
3.8 gcc的错误类型及对策 36
第4章 gdb调试器 38
4.1 gdb概述 38
4.2 使用gdb 41
4.2.1 gdb的命令概貌 42
4.2.2 gdb中运行Linux的
shell程序 44
4.2.3 在gdb中运行程序 44
4.2.4 调试已运行的程序 45
4.2.5 暂停/恢复程序运行 45
4.2.6 查看栈信息 52
4.2.7 查看源程序 54
4.2.8 查看运行时数据 56
4.2.9 改变程序的执行 64
第5章 使用make 68
5.1 makefile实例文件分析 68
5.1.1 make与makefile文件
的关系 69
5.1.2 在makefile文件中使用
变量 71
5.1.3 让make自动推导依赖
关系 72
5.1.4 另类风格的makefile
文件 73
5.1.5 清空目标文件的规则 73
5.2 makefile文件概述 74
5.3 make书写规则 76
5.3.1 规则举例 76
5.3.2 在规则中使用通配符 77
5.3.3 文件搜寻 78
5.3.4 伪目标 79
5.3.5 多目标 80
5.3.6 静态模式 81
5.3.7 自动生成依赖性 82
5.4 使用命令 84
5.4.1 显示命令 84
5.4.2 执行命令 84
5.4.3 命令出错 85
5.4.4 嵌套执行make 85
5.4.5 定义命令包 87
5.5 使用变量 88
5.5.1 变量的基础 88
5.5.2 赋值变量 89
5.5.3 变量的高级用法 91
5.5.4 追加变量值 93
5.5.5 override 指示符 94
5.5.6 多行变量 94
5.5.7 环境变量 95
5.5.8 目标变量 95
5.5.9 模式变量 96
5.6 使用条件判断 96
5.6.1 示例 97
5.6.2 语法 98
5.7 使用函数 100
5.7.1 函数的调用语法 100
5.7.2 字符串处理函数 100
5.7.3 文件名操作函数 104
5.7.4 foreach 函数 105
5.7.5 if 函数 106
5.7.6 call函数 106
5.7.7 origin函数 107
5.7.8 shell函数 108
5.7.9 控制make的函数 108
5.8 make的运行 109
5.8.1 make的退出码 109
5.8.2 指定makefile文件 110
5.8.3 指定目标 110
5.8.4 检查规则 111
5.8.5 make的参数 112
5.9 隐含规则 115
5.9.1 使用隐含规则 116
5.9.2 隐含规则一览 117
5.9.3 隐含规则使用的变量 119
5.9.4 隐含规则链 121
5.9.5 定义模式规则 121
5.9.6 隐含规则搜索算法 125
5.10 使用make更新函数库
文件 126
5.10.1 函数库文件的成员 126
5.10.2 函数库成员的隐含规则 127
5.10.3 函数库文件的后缀规则 127
5.10.4 注意事项 128
第6章 文件的操作 129
6.1 Linux的文件结构 129
6.1.1 目录结构 129
6.1.2 文件和设备 130
6.2 系统调用和设备驱动程序 132
6.3 库函数 132
6.4 硬件设备文件的底层访问 133
6.4.1 write系统调用 134
6.4.2 read系统调用 135
6.4.3 open系统调用 136
6.4.4 creat系统调用 137
6.4.5 访问权限的初始化值 137
6.4.6 umask变量 138
6.4.7 close系统调用 139
6.4.8 ioctl系统调用 140
6.4.9 lseek系统调用 142
6.4.10 fstat、stat和lstat系统
调用 144
6.4.11 dup和dup2系统调用 145
6.5 文件和目录的维护 146
6.5.1 chmod系统调用 146
6.5.2 chown系统调用 147
6.5.3 unlink、link、symlink
系统调用 147
6.5.4 mkdir和rmdir系统调用 148
6.5.5 chdir系统调用和getcwd
函数 148
第7章 标准I/O库 149
7.1 流和FILE对象 149
7.2 标准输入、标准输出和标
准出错 149
7.3 缓存 150
7.3.1 全缓存 150
7.3.2 行缓存 150
7.3.3 不带缓存 150
7.4 打开流 152
7.5 读和写流 154
7.5.1 输入函数 154
7.5.2 输出函数 156
7.6 每次一行I/O 156
7.7 标准I/O的效率 157
7.8 二进制I/O 158
7.9 定位流 160
7.10 格式化I/O 161
7.10.1 格式化输出 161
7.10.2 格式化输入 161
7.11 实现细节 162
7.12 临时文件 162
第8章 进程控制 163
8.1 进程概述 163
8.1.1 进程的状态及其状态
转换 163
8.1.2 Linux进程简介 165
8.1.3 进程控制 166
8.1.4 进程调度的概念 168
8.2 进程的一般操作 169
8.2.1 获得进程id 169
8.2.2 fork创建进程 170
8.2.3 exec系统调用 172
8.2.4 exit和_exit 177
8.2.5 wait系统调用 179
8.2.6 sleep函数调用 187
8.3 进程的特殊操作 187
8.3.1 setuid和setgid系统
调用 188
8.3.2 setpgrp和setpgid系统
调用 189
8.3.3 chdir系统调用 190
8.3.4 chroot系统调用 190
8.3.5 nice系统调用 191
第9章 进程间的通信 192
9.1 Linux下进程通信概述 192
9.2 管道及有名管道 193
9.2.1 管道概述及相关API
应用 194
9.2.2 有名管道概述及相关API
应用 201
9.3 信号及其处理 207
9.3.1 信号及信号来源 207
9.3.2 信号的种类 207
9.3.3 进程对信号的响应 209
9.3.4 信号的发送 209
9.3.5 信号的安装(设置信号关
联动作) 212
9.3.6 信号集及信号集操作
函数 215
9.3.7 信号阻塞与信号未决 216
9.3.8 信号生命周期 216
9.3.9 信号编程注意事项 218
9.3.10 信号应用实例 220
9.4 消息队列 224
9.4.1 消息队列基本概念 225
9.4.2 操作消息队列 225
9.4.3 获得或设置消息队列
属性 226
9.4.4 消息队列的限制 229
9.4.5 消息队列应用实例 230
9.5 信号灯概述 232
9.5.1 操作信号灯 233
9.5.2 信号灯的限制 235
9.5.3 竞争问题 236
9.5.4 信号灯应用实例 236
9.6 共享内存 239
9.6.1 内核怎样保证各个进程
寻址到同一个共享内存
区域的内存页面 240
9.6.2 mmap()及其相关系统
调用 241
9.6.3 mmap()范例 242
9.6.4 对mmap()返回地址的
访问 246
9.6.5 系统V共享内存原理 249
9.6.6 系统V共享内存API 250
9.6.7 系统V共享内存限制 250
9.6.8 系统V共享内存范例 250
9.7 套接口(Sockets)通信 253
第10章 线程简介 254
10.1 线程概述 254
10.2 创建线程 255
10.2.1 线程创建属性 255
10.2.2 线程创建的Linux
实现 256
10.3 线程取消 256
10.3.1 线程取消的语义 256
10.3.2 取消点 257
10.3.3 程序设计方面的
考虑 257
10.3.4 与线程取消相关的
pthread函数 257
10.4 私有数据 258
10.4.1 创建和注销 258
10.4.2 访问 259
10.4.3 使用范例 259
10.5 互斥锁 261
10.5.1 创建和销毁 261
10.5.2 互斥锁属性 261
10.5.3 锁操作 262
10.5.4 其他 262
10.6 条件变量 263
10.6.1 创建和注销 263
10.6.2 等待和激发 263
10.6.3 其他 264
10.7 异步信号 266
10.8 线程终止 267
10.8.1 线程终止方式 267
10.8.2 线程终止时的清理 267
10.8.3 线程终止的同步及其
返回值 268
10.8.4 关于pthread_exit()和
return 269
10.9 杂项 269
10.9.1 获得本线程ID 270
10.9.2 判断两个线程是否为
同一线程 270
10.9.3 仅执行一次的操作 270
10.9.4 pthread_kill_other_
threads_np() 271
第11章 curses编程简介 273
11.1 curses基本结构 273
11.2 颜色和属性 276
11.3 窗口和基垫 279
11.4 光标和屏幕输出 285
11.5 键盘输入 288
11.5.1 cbreak() 288
11.5.2 延迟模式 288
11.5.3 回显模式和输出
延迟 289
11.5.4 功能键转换 289
11.6 菜单 292
11.7 表单 296
11.8 用curses函数编写一个
汉诺塔游戏 301
11.8.1 汉诺塔游戏 301
11.8.2 定义数据结构 302
11.8.3 柱的实现 302
11.8.4 盘的实现 302
11.8.5 接收输入的实现 303
11.8.6 移动盘的实现 303
第12章 网络编程 311
12.1 TCP/IP简介 311
12.1.1 IP及相关协议 312
12.1.2 传输控制协议TCP 317
12.1.3 用户数据报协议
UDP 319
12.2 Socket编程简介 319
12.2.1 Socket编程相关数据
类型定义 320
12.2.2 打开Socket 描述符、
建立绑定并建立连接 320
12.2.3 Listen()-- 监听是
否有服务请求 321
12.2.4 accept()-- 连接端
口的服务请求 322
12.2.5 send()和recv()--
数据传输 322
12.2.6 sendto()和recvfrom()
-- 利用数据报方式
进行数据传输 323
12.2.7 close()和shutdown()
-- 结束数据传输 323
12.2.8 DNS-- 域名服务
相关函数 324
12.3 面向连接的客户机/服务器
代码实例 324
12.4 ping命令的简单实现 328
12.4.1 ping命令简介 329
12.4.2 ICMP协议简介 329
12.4.3 IP报头格式 330
12.4.4 ICMP报头格式 331
12.4.5 ICMP数据报 333
12.4.6 数据统计 333
12.4.7 完整的ping 命令
代码 334
第13章 实例一:Linux下CD
播放器 339
13.1 音频CD 339
13.2 设备控制 340
13.3 音轨处理 342
13.3.1 计算音轨数目 342
13.3.2 定位音轨位置 344
13.3.3 获取音轨信息 345
13.4 CD播放 347
13.4.1 播放(play) 347
12.4.2 停止(stop) 349
13.4.3 暂停(pause) 350
12.4.4 继续(resume) 351
13.5 音量调节 352
13.6 子码信息 354
第14章 实例二:一个简单的
服务器端/客户端程序 357
附录 361
参考文献 371
1.1 Linux简介 1
1.2 C语言的简介和特点 4
1.3 Linux程序设计基础知识 5
1.3.1 程序安装目录 5
1.3.2 头文件 5
1.3.3 库文件 6
1.4 Linux下C语言编程环境
概述 7
1.5 Linux程序设计的特点 9
1.6 Linux下C语言编码的风格 10
1.6.1 GNU编程风格 10
1.6.2 Linux 内核编程风格 11
第2章 vi与emacs编辑器 12
2.1 vim概述及应用 12
2.2 emacs简介及应用 17
2.3 Linux下的其他编辑器 21
2.3.1 最简单的文本编辑器ed 21
2.3.1 最容易上手的编辑器
pico 23
第3章 gcc编译器 27
3.1 gcc简介 27
3.2 使用gcc 28
3.3 gcc警告提示功能 30
3.4 库依赖 32
3.5 gcc代码优化 33
3.6 加速 34
3.7 gcc常用选项 35
3.8 gcc的错误类型及对策 36
第4章 gdb调试器 38
4.1 gdb概述 38
4.2 使用gdb 41
4.2.1 gdb的命令概貌 42
4.2.2 gdb中运行Linux的
shell程序 44
4.2.3 在gdb中运行程序 44
4.2.4 调试已运行的程序 45
4.2.5 暂停/恢复程序运行 45
4.2.6 查看栈信息 52
4.2.7 查看源程序 54
4.2.8 查看运行时数据 56
4.2.9 改变程序的执行 64
第5章 使用make 68
5.1 makefile实例文件分析 68
5.1.1 make与makefile文件
的关系 69
5.1.2 在makefile文件中使用
变量 71
5.1.3 让make自动推导依赖
关系 72
5.1.4 另类风格的makefile
文件 73
5.1.5 清空目标文件的规则 73
5.2 makefile文件概述 74
5.3 make书写规则 76
5.3.1 规则举例 76
5.3.2 在规则中使用通配符 77
5.3.3 文件搜寻 78
5.3.4 伪目标 79
5.3.5 多目标 80
5.3.6 静态模式 81
5.3.7 自动生成依赖性 82
5.4 使用命令 84
5.4.1 显示命令 84
5.4.2 执行命令 84
5.4.3 命令出错 85
5.4.4 嵌套执行make 85
5.4.5 定义命令包 87
5.5 使用变量 88
5.5.1 变量的基础 88
5.5.2 赋值变量 89
5.5.3 变量的高级用法 91
5.5.4 追加变量值 93
5.5.5 override 指示符 94
5.5.6 多行变量 94
5.5.7 环境变量 95
5.5.8 目标变量 95
5.5.9 模式变量 96
5.6 使用条件判断 96
5.6.1 示例 97
5.6.2 语法 98
5.7 使用函数 100
5.7.1 函数的调用语法 100
5.7.2 字符串处理函数 100
5.7.3 文件名操作函数 104
5.7.4 foreach 函数 105
5.7.5 if 函数 106
5.7.6 call函数 106
5.7.7 origin函数 107
5.7.8 shell函数 108
5.7.9 控制make的函数 108
5.8 make的运行 109
5.8.1 make的退出码 109
5.8.2 指定makefile文件 110
5.8.3 指定目标 110
5.8.4 检查规则 111
5.8.5 make的参数 112
5.9 隐含规则 115
5.9.1 使用隐含规则 116
5.9.2 隐含规则一览 117
5.9.3 隐含规则使用的变量 119
5.9.4 隐含规则链 121
5.9.5 定义模式规则 121
5.9.6 隐含规则搜索算法 125
5.10 使用make更新函数库
文件 126
5.10.1 函数库文件的成员 126
5.10.2 函数库成员的隐含规则 127
5.10.3 函数库文件的后缀规则 127
5.10.4 注意事项 128
第6章 文件的操作 129
6.1 Linux的文件结构 129
6.1.1 目录结构 129
6.1.2 文件和设备 130
6.2 系统调用和设备驱动程序 132
6.3 库函数 132
6.4 硬件设备文件的底层访问 133
6.4.1 write系统调用 134
6.4.2 read系统调用 135
6.4.3 open系统调用 136
6.4.4 creat系统调用 137
6.4.5 访问权限的初始化值 137
6.4.6 umask变量 138
6.4.7 close系统调用 139
6.4.8 ioctl系统调用 140
6.4.9 lseek系统调用 142
6.4.10 fstat、stat和lstat系统
调用 144
6.4.11 dup和dup2系统调用 145
6.5 文件和目录的维护 146
6.5.1 chmod系统调用 146
6.5.2 chown系统调用 147
6.5.3 unlink、link、symlink
系统调用 147
6.5.4 mkdir和rmdir系统调用 148
6.5.5 chdir系统调用和getcwd
函数 148
第7章 标准I/O库 149
7.1 流和FILE对象 149
7.2 标准输入、标准输出和标
准出错 149
7.3 缓存 150
7.3.1 全缓存 150
7.3.2 行缓存 150
7.3.3 不带缓存 150
7.4 打开流 152
7.5 读和写流 154
7.5.1 输入函数 154
7.5.2 输出函数 156
7.6 每次一行I/O 156
7.7 标准I/O的效率 157
7.8 二进制I/O 158
7.9 定位流 160
7.10 格式化I/O 161
7.10.1 格式化输出 161
7.10.2 格式化输入 161
7.11 实现细节 162
7.12 临时文件 162
第8章 进程控制 163
8.1 进程概述 163
8.1.1 进程的状态及其状态
转换 163
8.1.2 Linux进程简介 165
8.1.3 进程控制 166
8.1.4 进程调度的概念 168
8.2 进程的一般操作 169
8.2.1 获得进程id 169
8.2.2 fork创建进程 170
8.2.3 exec系统调用 172
8.2.4 exit和_exit 177
8.2.5 wait系统调用 179
8.2.6 sleep函数调用 187
8.3 进程的特殊操作 187
8.3.1 setuid和setgid系统
调用 188
8.3.2 setpgrp和setpgid系统
调用 189
8.3.3 chdir系统调用 190
8.3.4 chroot系统调用 190
8.3.5 nice系统调用 191
第9章 进程间的通信 192
9.1 Linux下进程通信概述 192
9.2 管道及有名管道 193
9.2.1 管道概述及相关API
应用 194
9.2.2 有名管道概述及相关API
应用 201
9.3 信号及其处理 207
9.3.1 信号及信号来源 207
9.3.2 信号的种类 207
9.3.3 进程对信号的响应 209
9.3.4 信号的发送 209
9.3.5 信号的安装(设置信号关
联动作) 212
9.3.6 信号集及信号集操作
函数 215
9.3.7 信号阻塞与信号未决 216
9.3.8 信号生命周期 216
9.3.9 信号编程注意事项 218
9.3.10 信号应用实例 220
9.4 消息队列 224
9.4.1 消息队列基本概念 225
9.4.2 操作消息队列 225
9.4.3 获得或设置消息队列
属性 226
9.4.4 消息队列的限制 229
9.4.5 消息队列应用实例 230
9.5 信号灯概述 232
9.5.1 操作信号灯 233
9.5.2 信号灯的限制 235
9.5.3 竞争问题 236
9.5.4 信号灯应用实例 236
9.6 共享内存 239
9.6.1 内核怎样保证各个进程
寻址到同一个共享内存
区域的内存页面 240
9.6.2 mmap()及其相关系统
调用 241
9.6.3 mmap()范例 242
9.6.4 对mmap()返回地址的
访问 246
9.6.5 系统V共享内存原理 249
9.6.6 系统V共享内存API 250
9.6.7 系统V共享内存限制 250
9.6.8 系统V共享内存范例 250
9.7 套接口(Sockets)通信 253
第10章 线程简介 254
10.1 线程概述 254
10.2 创建线程 255
10.2.1 线程创建属性 255
10.2.2 线程创建的Linux
实现 256
10.3 线程取消 256
10.3.1 线程取消的语义 256
10.3.2 取消点 257
10.3.3 程序设计方面的
考虑 257
10.3.4 与线程取消相关的
pthread函数 257
10.4 私有数据 258
10.4.1 创建和注销 258
10.4.2 访问 259
10.4.3 使用范例 259
10.5 互斥锁 261
10.5.1 创建和销毁 261
10.5.2 互斥锁属性 261
10.5.3 锁操作 262
10.5.4 其他 262
10.6 条件变量 263
10.6.1 创建和注销 263
10.6.2 等待和激发 263
10.6.3 其他 264
10.7 异步信号 266
10.8 线程终止 267
10.8.1 线程终止方式 267
10.8.2 线程终止时的清理 267
10.8.3 线程终止的同步及其
返回值 268
10.8.4 关于pthread_exit()和
return 269
10.9 杂项 269
10.9.1 获得本线程ID 270
10.9.2 判断两个线程是否为
同一线程 270
10.9.3 仅执行一次的操作 270
10.9.4 pthread_kill_other_
threads_np() 271
第11章 curses编程简介 273
11.1 curses基本结构 273
11.2 颜色和属性 276
11.3 窗口和基垫 279
11.4 光标和屏幕输出 285
11.5 键盘输入 288
11.5.1 cbreak() 288
11.5.2 延迟模式 288
11.5.3 回显模式和输出
延迟 289
11.5.4 功能键转换 289
11.6 菜单 292
11.7 表单 296
11.8 用curses函数编写一个
汉诺塔游戏 301
11.8.1 汉诺塔游戏 301
11.8.2 定义数据结构 302
11.8.3 柱的实现 302
11.8.4 盘的实现 302
11.8.5 接收输入的实现 303
11.8.6 移动盘的实现 303
第12章 网络编程 311
12.1 TCP/IP简介 311
12.1.1 IP及相关协议 312
12.1.2 传输控制协议TCP 317
12.1.3 用户数据报协议
UDP 319
12.2 Socket编程简介 319
12.2.1 Socket编程相关数据
类型定义 320
12.2.2 打开Socket 描述符、
建立绑定并建立连接 320
12.2.3 Listen()-- 监听是
否有服务请求 321
12.2.4 accept()-- 连接端
口的服务请求 322
12.2.5 send()和recv()--
数据传输 322
12.2.6 sendto()和recvfrom()
-- 利用数据报方式
进行数据传输 323
12.2.7 close()和shutdown()
-- 结束数据传输 323
12.2.8 DNS-- 域名服务
相关函数 324
12.3 面向连接的客户机/服务器
代码实例 324
12.4 ping命令的简单实现 328
12.4.1 ping命令简介 329
12.4.2 ICMP协议简介 329
12.4.3 IP报头格式 330
12.4.4 ICMP报头格式 331
12.4.5 ICMP数据报 333
12.4.6 数据统计 333
12.4.7 完整的ping 命令
代码 334
第13章 实例一:Linux下CD
播放器 339
13.1 音频CD 339
13.2 设备控制 340
13.3 音轨处理 342
13.3.1 计算音轨数目 342
13.3.2 定位音轨位置 344
13.3.3 获取音轨信息 345
13.4 CD播放 347
13.4.1 播放(play) 347
12.4.2 停止(stop) 349
13.4.3 暂停(pause) 350
12.4.4 继续(resume) 351
13.5 音量调节 352
13.6 子码信息 354
第14章 实例二:一个简单的
服务器端/客户端程序 357
附录 361
参考文献 371
猜您喜欢