前言  书评  目录  第一章下载  第二章下载  第三章下载  第四章下载  第五章下载

 
Linux C编程 (到货)

出版社:清华大学出版社
作者: 李玉波 朱自强 郭军 编著
定价:36.00

   本书系统地介绍了在Linux平台下用C语言进行程序开发的过程,通过列举大量的程序实例,使读者很快掌握在Linux平台下进行C程序开发的方法和技巧,并具备开发大型应用程序的能力。
  本书内容翔实,主要包括:Linux平台下C语言及其编程环境的介绍,C语言编译器、调试工具和自动维护工具的使用方法,Linux系统提供的特有函数调用,在C程序中访问文件的方法,进程的概念、进程间通信及多进程同步运行的实现手段,C语言网络编程方法以及curses编程等。
  本书结构合理、概念清晰、实例丰富,并具有很强的启发性和实用性,适合于有一定的C语言基础,需要在Linux系统上编程的程序设计人员阅读 。

 


前言

  Linux是一个奇迹,是由UNIX发展而来的,最初由一个芬兰大学生开发维护,现在已经成为最为流行的免费操作系统。Linux的独特之处在于它的建立不受任何商品化软件的版权制约,全世界都能免费、自由地使用。世界各地有几十万自愿者为这个充满魅力的系统贡献着自己的才能,从初学者到计算机专业人士,还有经验丰富的黑客们,一起不断地改进和维护着这个系统。许多大学与研究机构、公司及家用PC都在使用Linux。Linux年轻而富有朝气,它从诞生到现在不过15年时间,但已经在市场上确立了自己的地位和广泛的影响。
  C语言是国际上广泛使用的计算机高级语言。C语言最初用于描述和实现UNIX系统,后来逐渐被广大程序员所接受,成为最受欢迎的编程语言。在其后的发展过程中,C语言不断吸收计算机方面新的成果,这个古老的语言又焕发出新的魅力。作为Linux系统的开发语言,C语言在Linux编程开发中扮演着重要的角色。
  Linux作为一个操作系统,一个重要的功能就是要支持用户编程。C语言作为当前使用最广泛的编程语言,具有多平台、移植性好的特点,因此它们很快形成了完美的结合,为用户提供了一个强大的编程环境。本书正是从这样的结合点出发,介绍在Linux系统中使用C语言编程的有关知识。
  本书主要针对具有一定的C语言编程基础,但未在Linux系统中使用过C语言的读者,着重讲解Linux系统中使用C语言编程特殊的地方。其他环境中C编程共有的知识,例如基本语法.c算法等,本书不作重点,只在第1章的概述中简要地作一提示。    
  全书从逻辑上可以分为三部分:
  第一部分即第1章和第2章,简要介绍了Linux系统和C语言,其中扼要地回顾了C语言的语法和Linux基本的文本操作,为后面的阅读提供一定的基础。
  第二部分即第3至12章,带领读者熟悉Linux系统的C编程环境,详细讲述了Linux下C语言编译器(如gcc)、.c调试工具(如gdb)及程序自动维护工具make的使用方法。接着依次讲解文件系统.c标准输入输出、进程、信号。后几章提高了一定层次,由浅入深地讲解IPC(进程间通信)、线程、网络Socket编程、curses编程等内容。由于是编程介绍,本书中会附带较多的实例和源代码,既方便说明,也可以使读者通过实例获得一定的感性认识。
  第三部分也就是最后两章,我们举两个综合性的例子作为全书的结束—— 一个是在Linux下实现CD播放器;另一个是ping命令的简单实现,在这个例子中会涉及第2章至第12章各章的内容,以帮助读者复习总结学过的系统调用知识。
  本书中实例源代码前标有 标志的。表示该源代码可通过http://www.tupwk.com.cn/downpage下载。
本书编写过程中得到了韩雪女士的关心和帮助,期间张利辉先生也提出了很多宝贵意见。另外,张江涛、徐日强、赵磊、杜江、刘旭、周鸣扬、范翠丽、黄丽娜、刘伟、陈策、郑艳华、谢振华、唐兵、张俊岭、尹建民等人也参加了本书部分内容的编写及素材整理工作,在此一并表示感谢。
由于作者水平有限,错误之处在所难免,不足之处敬请读者批评指正。

                                     作 者
 


两岸猿声啼不住 轻舟已过万重山

   ――读《Linux C编程》有感

  Linux是一个奇迹, 是现在最为流行的免费操作系统,它的独特之处在于它的建立不受任何商品化软件的版权的制约,全世界都能免费、自由使用;Linux是具有专业水平的操作系统,它的爱好者和用户遍及世界;Linux年轻而富有朝气,它从诞生到现在不过15年时间,已经在市场上确立自己的地位和广泛的影响。
  C语言是国际上广泛使用的计算机高级语言,作为Linux系统的开发语言,C语言在Linux编程开发中扮演着重要的角色。它们很快形成了完美的结合,为用户提供了一个强大的编程环境。
  国内Linux的发展方兴未艾,由于国内计算机教育体系等因素,Linux的发展进入瓶颈状态,很多Linux爱好者仅仅停留在Linux的系统管理的层次,而更多的Linux的系统管理员或者WINDOWS的程序员想转向做Linux的开发则无从下手,除Linux开发界面本身不是很友好之外,更重要的是苦于找不到合适的资料入门。Linux本身提供的文档都是英文的,国外的著作如UNIX/Linux开发界的圣经、W.Richard Stevens所著《UNIX环境高级编程》曲高和寡,本身要求读者的层次很高,根本不适合入门,而国内的其他相关书籍大都是隔靴搔痒未到痒处,读之总觉得不过瘾,不解渴。
  在这种情况下,作者根据多年来的开发和教学经验并融合大量的编程实例而著成此书——《Linux下C语言编程》。读者通过本书能快速地学会Linux下C语言编程,掌握其中的编程技巧,并能从一开始就养成良好的编程风格,从而实现Linux下的入门和提高。
  这本书深入浅出、通俗易懂,很适合初学者,内容编排得十分有条理,不会让人感到迷失方向。内容的可读性和技术含量都很高,所讲的知识点清楚而且容易上手,但也不乏一些主题的深入和扩展,总体感觉本书在重视基础之外,更注重知识点的联系。读这本书,心理没有负担,不必担心自己才疏识浅,也不会遇到晦涩难懂的问题,能使读者尽快克服对Linux下编程的神秘感,真正进入Linux编程世界。
  此书以大量的实例详细的介绍了Linux下C语言编程的方方面面而又有侧重点,作者把复杂的编程问题分而治之,分解成一个个简单的小例子,使读者读起来倍感轻松,读完此书定有相见恨晚,蓦然回首读者已经进入Linux下C语言编程美妙世界。此书不仅仅适合Linux下C语言的开发者,还适合Linux下的C++/Java/Kylix的开发人员。
  要说本书不足之处,我想可能就是它的代码篇幅比较多,书中有的内容写的过细,会使读者觉得有点“罗嗦”。

 


目录

   第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

 
 
Copyright ©1998~2004 华储网. All rights reserved。
To comment on this site,E-mail :
webmaster@huachu.com.cn