Linux C程序设计大全(原创经典,程序员典藏)(附赠CD光盘1张)
分類: 图书,计算机与互联网,操作系统,Linux,Linux 编程开发,
品牌: 吴岳
基本信息·出版社:清华大学出版社
·页码:872 页
·出版日期:2009年
·ISBN:7302192111/9787302192114
·条形码:9787302192114
·包装版本:1版
·装帧:平装
·开本:16
·正文语种:中文
·丛书名:原创经典,程序员典藏
·附带品描述:附赠CD光盘1张
产品信息有问题吗?请帮我们更新产品信息。
内容简介《Linux C程序设计大全》讲述Linux是一个开放源代码的操作系统,其稳定性与低廉的价格使其在服务器、嵌入式领域以及桌面应用中逐渐占有越来越大的市场份额。因此,对Linux环境下的程序开发人员的需求也就越来越大了。C语言是Linux操作系统中的核心语言,掌握Linux环境下的C语言开发是至关重要的。《Linux C程序设计大全》共分为6篇,循序渐进地讲述了Linux环境下的C语言编程技术,从基本概念到具体实践、从系统函数接口的认识到具体操作都进行了详细的阐述,并对具体知识点进行了详细的实例讲解。《Linux C程序设计大全》的特点是详细介绍了Linux的系统接口函数、Linux的编程环境以及C语言程序开发的辅助技术。《Linux C程序设计大全》通过大量实例,详细描述了Linux系统提供的系统函数接口,以及代码编写技巧,以方便读者实践。《Linux C程序设计大全》适合想全面学习Linux环境下C语言编程的读者,并可作为开发人员的参考手册。
作者简介吴岳,毕业于北京航空航天大学,获硕士学位,具有多年的LiNUX环境开发经验,精通Linux系统函数接口、Linux内核、POSIX TCP/IP协议,对Linux内核以及基于Linux的分布式系统有深入研究,目前致力于基于Linux的分布式系统的优化和并行算法的研究十分喜爱开源项目,业余时间从事开源项目的普及和推广工作,曾经参与IBM公司的手写笔项目、北京顺潮电子有限公司的GPS车载终端项目等。
编辑推荐《Linux C程序设计大全》全面讲解Excel VBA精髓及应用的宝典秘籍
彻底理清Excel VBA的各种概念、开发技术及开发思想
大部分内容适用于Excel 2000/XP/2003/2007等多个版本
从零开始讲解,每个知识点都配典型实例讲解,可轻松上手
全面覆盖VBA基础、Excel对象模型、用户界面设计等内容
详细介绍如何使用外部数据,如用ADO访问数据库、处理文件等
深入讲解加载宏,操作VBE、调用Windows API、制作帮助系统等高级内容
提供301个实例、37个案例、214个技巧,可作为案头必备的查询手册
重点内容及特色:
《Excel VBA开发技术大全》全面介绍了VBA基础、Excel对象模型、用户界面设计、创建自定义对话框、使用标准控件、使用ActiveX控件和处理文件等内容。
《Excel VBA开发技术大全》介绍了其他Excel书籍很少涉及,但实际应用中又会经常会遇到的一些技术,如使用RibbonX,制作COM加载宏、操作VBE、制作帮助系统、在Excel中调用Windows API、使用ADO访问数据库、控制其他Office应用程序等。
《Excel VBA开发技术大全》最后介绍了一个进销存管理系统的实现,以综合应用前面所学的内容。该系统具有很强的应用价值,稍加修改便可用到商用系统的开发当中。
《Excel VBA开发技术大全》中的每个知识点都以典型实例来讲解,必要时给出代码及解释。《Excel VBA开发技术大全》中的代码都给出了详细的注释,阅读起来非常容易理解。
和国外的一些经典图书相比,《Excel VBA开发技术大全》无论是对知识点的讲解还是对实例的选择都更贴近中国读者,符合国人的阅读思维,可以称之为本土化的Excel VBA技术宝典。
目录
第1篇 Linux下C语言基础
第1章 Linux简介2
1.1 GNU简介2
1.2 Linux简介2
1.2.1 Linux发展史2
1.2.2 Linux发行版4
1.2.3 Linux内核版本5
1.2.4 Linux与UNIX的关系5
1.2.5 Linux在服务器方面的发展5
1.2.6 Linux在嵌入式系统方面的发展6
1.2.7 Linux在桌面系统方面的发展7
1.3 Linux环境下的其他编程语言7
1.3.1 C++7
1.3.2 Java10
1.3.3 Perl12
1.3.4 Python13
1.3.5 Ruby14
1.3.6 PHP14
第2章 控制结构17
2.1 goto语句17
2.1.1 C语言中的无条件跳转17
2.1.2 使用goto语句进行出错处理18
2.1.3 出错处理的一般模型20
2.2 C语言中的分支结构21
2.2.1 分支结构的翻译22
2.2.2 使用goto语句实现分支结构23
2.3 短路计算24
2.3.1 短路计算24
2.3.2 &&运算的短路计算25
2.3.3 ||运算的短路计算26
2.4 C语言中的循环结构28
2.4.1 while循环28
2.4.2 do…while循环30
2.4.3 for循环32
2.5 switch语句34
2.5.1 switch语句的应用34
2.5.2 使用goto语句实现switch语句35
2.6 优化控制结构37
2.6.1 表达式优化——使用替换程序中的乘除法37
2.6.2 表达式优化——常量折叠38
2.6.3 表达式优化——使用数学公式38
2.6.4 表达式优化——存储问题40
2.6.5 分支优化——改变判断顺序40
2.6.6 分支优化——使用switch语句44
2.6.7 循环优化——一次性计算46
第3章 C语言中的函数49
3.1 函数的本质49
3.2 变量的作用域和生命期50
3.2.1 全局变量50
3.2.2 局部变量51
3.3 变量的初始值53
3.3.1 全局变量的初始值53
3.3.2 局部变量的初始值54
3.4 与函数有关的优化55
3.4.1 函数调用与程序优化55
3.4.2 变量存储优化58
3.5 编写多文件程序——变量的存储类别60
3.5.1 存储类别60
3.5.2 static变量的作用——改变变量的生命期60
3.5.3 static变量的作用——实现封装和模块化设计63
3.6 编写多文件的程序——链接的作用66
3.6.1 链接多个文件66
3.6.2 链接时符号解析规则68
3.6.3 链接规则的应用68
3.7 可变参数72
3.7.1 可变参数的概念72
3.7.2 实现一个简单的可变参数的函数73
3.7.3 可变参数实例75
3.7.4 关于printf函数的疑问——缺少整型参数80
3.7.5 关于printf函数的疑问——缺少字符串地址参数81
第4章 C语言中的指针与字符串84
4.1 sizeof运算符84
4.1.1 sizeof运算符的应用——得到内置类型的大小84
4.1.2 sizeof运算符的应用——得到复合类型的大小85
4.2 指针的应用86
4.2.1 指针与别名陷阱86
4.2.2 数组的指针88
4.2.3 指针的指针90
4.2.4 指针与参数传递91
4.2.5 指针类型的意义98
4.2.6 void*型指针100
4.3 函数的指针103
4.3.1 C语言中的函数指针103
4.3.2 函数指针的应用——回调函数106
4.3.3 函数指针数组111
4.4 字符串113
4.4.1 字符串与字符数组113
4.4.2 字符串与指针114
4.4.3 限定修饰符const116
4.4.4 const关键字修饰指针——在指针定义之前117
4.4.5 const关键字修饰指针——在指针定义之中117
4.4.6 const关键字修饰指针——在指针定义之前和定义之中118
4.4.7 使用const关键字的意义119
第5章 C语言的高级技术122
5.1 结构体与共同体122
5.1.1 结构体中成员变量的存储分布122
5.1.2 内存对齐123
5.2 位运算126
5.2.1 掩码运算127
5.2.2 不安全的位运算129
5.2.3 异或运算的特性130
5.2.4 移位运算的陷阱133
5.2.5 移位运算的实例134
5.3 预处理136
5.3.1 常用的代码组织形式136
5.3.2 调试开关142
5.4 C99新标准关键字详解145
5.4.1 inline关键字的概念145
5.4.2 inline关键字实例145
5.4.3 inline关键字使用总结146
5.4.4 restrict关键字的概念147
5.4.5 restrict关键字的应用148
第2篇 C语言开发环境
第6章 vi与vim编辑器152
6.1 vi编辑器入门152
6.1.1 vi简介152
6.1.2 vi的工作模式152
6.2 vi一般操作153
6.2.1 进入vi153
6.2.2 文本插入操作156
6.2.3 文本删除操作158
6.2.4 文本复制操作159
6.2.5 撤销命令161
6.2.6 重复命令162
6.2.7 退出vi162
6.3 vi的增强操作164
6.3.1 替换命令164
6.3.2 光标移动165
6.3.3 按行移动光标166
6.3.4 按字移动光标167
6.3.5 按句移动光标168
6.3.6 按段移动光标169
6.3.7 文本行的移动169
6.3.8 文本的异行移动170
6.3.9 屏幕滚动171
6.3.10 查找命令171
6.3.11 替换命令173
6.3.12 窗口的切分175
6.3.13 设置环境176
第7章 gcc编译器177
7.1 初探gcc编译器177
7.1.1 从经典的hello world开始177
7.1.2 gcc编译流程178
7.2 gcc常用选项179
7.2.1 gcc常用选项汇总179
7.2.2 -c选项179
7.2.3 -S选项180
7.2.4 -E选项182
7.2.5 -o选项182
7.2.6 -I选项183
7.2.7 -g选项183
7.3 链接原理183
7.3.1 链接器的任务183
7.3.2 目标文件184
7.3.3 ELF格式的可重定位目标文件185
7.3.4 目标文件中的符号表187
7.3.5 重定位的概念191
7.3.6 符号的重定位信息192
7.4 关于库192
7.4.1 使用库的优势192
7.4.2 静态库的概念194
7.4.3 创建静态库194
7.4.4 使用静态库195
7.4.5 动态库的概念197
7.4.6 创建动态库197
7.4.7 使用动态库199
7.5 gcc工具链201
第8章 makefile203
8.1 makefile文件入门203
8.1.1 makefile文件的组成内容203
8.1.2 makefile文件包含203
8.1.3 make工具的退出码204
8.2 书写makefile规则205
8.2.1 使用基本规则205
8.2.2 使用隐式规则206
8.2.3 使用伪目标207
8.2.4 使用通配符209
8.2.5 搜索源文件209
8.3 使用命令210
8.3.1 显示命令211
8.3.2 执行命令211
8.3.3 命令出错212
8.4 使用变量213
8.4.1 使用普通变量213
8.4.2 变量中的变量215
8.4.3 追加变量的值217
8.4.4 自动化变量218
8.5 使用条件判断219
8.5.1 条件表达式219
8.5.2 表达式实例221
8.6 使用函数221
8.6.1 函数调用的语法222
8.6.2 字符串处理函数222
8.6.3 文件名操作函数229
8.6.4 foreach函数233
8.6.5 if函数233
8.6.6 call函数234
8.6.7 origin函数235
8.6.8 shell函数235
8.7 makefile实例236
8.7.1 makefile实例——项目中的总makefile236
8.7.2 makefile实例——makefile模板238
第9章 gdb240
9.1 列出源程序240
9.1.1 不带参数的list命令240
9.1.2 带一个参数的list命令241
9.1.3 带两个参数的list命令242
9.2 运行程序的命令243
9.3 操作断点的命令244
9.3.1 设置断点244
9.3.2 显示当前gdb的断点信息247
9.3.3 删除指定的断点247
9.3.4 禁止或启用断点248
9.3.5 清除断点248
9.3.6 观察点249
9.3.7 设置断点实例250
9.4 查看运行时数据254
9.4.1 数据观察命令254
9.4.2 对程序中函数的调用256
9.4.3 查看表达式的值256
9.4.4 查看数组的值257
9.4.5 变量的输出格式257
9.4.6 查看内存258
9.4.7 自动显示变量259
9.4.8 设置显示选项263
9.4.9 显示变量的历史记录265
9.4.10 查看寄存器266
9.4.11 查看使用gdb环境变量267
9.4.12 查看数据实例268
9.5 改变程序的执行273
9.5.1 修改变量的值273
9.5.2 跳转执行274
9.5.3 信号的产生及处理275
9.5.4 强制调用函数276
9.5.5 强制函数返回276
9.6 gdb高级应用278
9.6.1 产生core文件278
9.6.2 跟踪栈上数据278
9.6.3 绑定运行进程281
9.6.4 源文件搜索283
9.6.5 机器语言工具283
9.6.6 其他有用的调试命令284
第3篇 Linux进程操作
第10章 进程环境288
10.1 程序的启动和退出288
10.1.1 在shell中启动一个程序288
10.1.2 加载一个程序289
10.1.3 加载地址290
10.1.4 退出程序291
10.1.5 进程终止处理函数292
10.2 Linux进程内存管理294
10.2.1 数据的内部存储294
10.2.2 C程序的存储布局——代码段296
10.2.3 C程序的存储布局——数据段和缓冲段298
10.2.4 C程序的存储布局——栈299
10.2.5 C程序的存储布局——堆301
10.2.6 常量的存储302
10.2.7 动态内存管理302
10.2.8 动态内存分配的深入研究305
10.3 shell环境309
10.3.1 命令行参数310
10.3.2 得到程序文件名311
10.3.3 环境变量312
10.3.4 得到指定的环境变量314
10.3.5 设置一个环境变量315
10.3.6 得到进程结束状态320
10.3.7 使用errno调试程序322
10.3.8 输出错误原因324
10.4 全局跳转325
10.4.1 局部跳转的局限性326
10.4.2 使用全局跳转327
10.4.3 使用全局跳转代替局部跳转329
第11章 进程控制332
11.1 进程标识符332
11.1.1 进程ID332
11.1.2 进程中重要的ID值333
11.2 进程操作335
11.2.1 创建一个进程335
11.2.2 父子进程的共享资源337
11.2.3 fork函数的出错情况340
11.2.4 创建一个共享空间的子进程341
11.2.5 在函数内部调用vfork函数342
11.2.6 退出进程344
11.2.7 使用exit函数检查进程出错信息345
11.2.8 exit函数与内核函数的关系346
11.2.9 设置进程所有者346
11.2.10 调试多进程——设置跟踪流348
11.2.11 调试多进程——使用gdb的attach命令348
11.3 执行程序349
11.3.1 执行一个新程序350
11.3.2 执行解释器文件352
11.3.3 在程序中执行shell命令355
11.3.4 实现system函数356
11.4 关系操作358
11.4.1 等待进程退出358
11.4.2 等待指定的进程362
11.4.3 僵尸进程的概念364
11.4.4 产生一个僵尸进程364
11.4.5 避免僵尸进程的产生366
11.4.6 输出进程统计信息369
第12章 时间和日历历程372
12.1 系统时间372
12.2 日历时间374
第13章 信号及信号处理378
13.1 信号的基础378
13.1.1 信号的基本概念378
13.1.2 产生信号379
13.1.3 处理信号379
13.1.4 常用信号的使用方法380
13.2 信号的影响382
13.2.1 重入382
13.2.2 原子操作385
13.2.3 中断系统调用387
13.3 信号处理函数387
13.3.1 设置信号处理函数387
13.3.2 发送信号391
13.3.3 向进程本身发送信号392
13.3.4 设置Linux定时器393
13.3.5 定时等待I/O395
13.3.6 挂起进程397
13.3.7 进程休眠399
13.4 信号集与屏蔽信号402
13.4.1 信号集和信号集处理函数402
13.4.2 屏蔽信号404
13.4.3 处理未决信号406
13.4.4 高级信号注册函数409
13.4.5 信号选项实例——SA_NOCLDWAIT选项410
13.4.6 信号选项实例——SA_NODEFFER选项412
13.4.7 信号选项实例——SA_RESETHAND选项414
第14章 进程间通信416
14.1 进程间通信概述416
14.1.1 进程间通信简介416
14.1.2 进程间通信的难点417
14.1.3 IPC的多种方式417
14.2 管道418
14.2.1 管道的概念418
14.2.2 匿名半双工管道418
14.2.3 匿名半双工管道的读写操作420
14.2.4 创建管道的标准库函数423
14.3 FIFO管道426
14.3.1 FIFO的概念426
14.3.2 创建FIFO427
14.3.3 FIFO的读写操作428
14.3.4 FIFO的缺点432
14.4 System V IPC/POSIX IPC433
14.4.1 IPC对象的概念433
14.4.2 IPC对象的问题435
14.4.3 IPC对象系统命令435
14.5 共享内存436
14.5.1 共享内存的概念436
14.5.2 共享内存的创建437
14.5.3 共享内存的操作439
14.5.4 共享内存使用注意事项442
14.6 信号量442
14.6.1 信号量的概念442
14.6.2 信号量的创建443
14.6.3 信号量集的操作446
14.7 消息队列448
14.7.1 消息队列的概念448
14.7.2 创建消息队列449
14.7.3 读写消息队列452
第15章 线程456
15.1 线程与进程456
15.1.1 线程的概念456
15.1.2 线程的优势457
15.2 线程标识符458
15.3 线程基本操作458
15.3.1 创建线程458
15.3.2 向线程体函数传递参数460
15.3.3 线程访问资源的限制462
15.3.4 终止线程466
15.3.5 正确得到线程退出信息的方法470
15.3.6 取消一个线程的运行473
15.3.7 线程退出函数476
第16章 线程高级操作480
16.1 线程同步——使用互斥量480
16.1.1 初始化与销毁互斥量480
16.1.2 得到与释放互斥量481
16.1.3 使用互斥量的实例482
16.2 线程同步——使用读写锁489
16.2.1 初始化与销毁读写锁489
16.2.2 得到与释放互斥锁490
16.2.3 使用互斥量与读写锁的比较491
16.3 线程属性499
16.3.1 创建和销毁属性结构499
16.3.2 线程的分离状态500
16.3.3 分离一个已经创建的线程502
16.3.4 线程栈的属性503
第4篇 Linux文件操作
第17章 文件I/O508
17.1 文件描述符的概念508
17.2 文件I/O操作508
17.2.1 打开一个文件508
17.2.2 打开文件的出错情况512
17.2.3 关闭一个文件513
17.2.4 创建一个新文件514
17.2.5 文件定位515
17.2.6 文件截短517
17.2.7 清空一个文件521
17.2.8 文件的读写操作523
17.2.9 文件同步527
17.3 文件描述符操作529
17.3.1 复制文件描述符529
17.3.2 I/O重定向概念及其应用531
17.3.3 控制文件534
17.3.4 修改打开文件的文件状态535
17.4 非阻塞文件I/O538
17.4.1 非阻塞I/O的概念538
17.4.2 以非阻塞方式打开文件539
17.4.3 将一个打开文件设置为非阻塞方式541
17.5 内存映射I/O543
17.5.1 内存映射I/O的概念543
17.5.2 创建一个内存映射544
17.5.3 撤销一个内存映射547
17.5.4 内存映射同步549
17.5.5 更改内存映射的权限552
第18章 文件管理555
18.1 文件状态555
18.2 文件类型556
18.3 文件权限559
18.3.1 访问权限559
18.3.2 设置用户ID位和设置组ID位561
18.3.3 设置用户ID位的作用562
18.3.4 使用设置用户ID位的实例562
18.4 文件权限操作566
18.4.1 测试文件访问权限566
18.4.2 设置用户ID位与文件权限测试568
18.4.3 使用文件权限屏蔽字569
18.4.4 在shell中使用文件权限屏蔽字570
18.4.5 在程序中使用文件权限屏蔽字570
18.4.6 改变文件访问权限572
18.4.7 在shell中改变文件权限573
18.4.8 在程序中改变文件权限574
18.4.9 改变一个打开的文件权限575
18.5 文件系统结构579
18.6 文件的硬链接583
18.6.1 创建一个硬链接584
18.6.2 删除一个硬链接585
18.7 改变文件所有者589
18.8 操作文件的时间593
第19章 目录操作597
19.1 目录的权限597
19.1.1 目录的访问权限597
19.1.2 测试目录的访问权限598
19.2 目录操作599
19.2.1 创建一个目录599
19.2.2 删除一个目录600
19.2.3 目录项结构601
19.2.4 打开与关闭目录602
19.2.5 读目录603
19.2.6 读目录操作的实例——实现自己的ls命令606
19.2.7 得到目录文件的读写位置608
19.2.8 定位目录610
19.2.9 回卷目录文件611
19.3 进程的工作目录612
19.3.1 工作目录的概念613
19.3.2 改变进程的工作目录613
19.3.3 得到进程的当前工作目录615
19.3.4 子进程工作目录对父进程的影响618
第20章 特殊文件622
20.1 符号链接操作622
20.1.1 符号链接622
20.1.2 符号链接的功能622
20.1.3 创建符号链接623
20.1.4 创建指向不存在文件的符号链接625
20.1.5 读写符号链接的目的文件626
20.1.6 读写多重符号链接的目的文件628
20.1.7 读写符号链接630
20.1.8 取得符号链接的状态633
20.1.9 更改符号链接的所有者637
20.2 proc文件系统642
20.2.1 proc文件系统642
20.2.2 常用的内核信息642
20.2.3 读取内核信息644
20.2.4 进程状态信息652
20.2.5 读取进程状态653
20.2.6 proc文件系统变成实例——实现自己的ps命令655
第21章 基于流的I/O658
21.1 流与缓冲658
21.2 基于流的文件操作660
21.2.1 打开和关闭流660
21.2.2 文件内容的冲洗662
21.2.3 以字符为单位读写数据664
21.2.4 以行为单位读写数据666
21.2.5 gets函数的漏洞667
21.2.6 逐行读取文件内容668
21.2.7 输出xml形式的配置文件669
21.2.8 读写数据块671
21.2.9 文件读写实例——实现cp命令672
21.2.10 文件读写实例——字符统计674
21.2.11 文件读写实例——目录下所有文件的字符统计675
第5篇 Linux网络编程
第22章 TCP和UDP协议680
22.1 计算机网络的体系结构简介680
22.1.1 计算机网络体系结构简介680
22.1.2 OSI 参考模型中各层功能描述680
22.1.3 TCP/IP参考模型的各层功能描述681
22.1.4 面向连接服务和无连接服务682
22.2 客户/服务器方式简介682
22.3 用户数据报协议UDP683
22.3.1 用户数据报的格式683
22.3.2 用户数据报检验和的计算684
22.3.3 UDP用户数据报的特性及用途686
22.4 传输控制协议 TCP686
22.4.1 TCP简介686
22.4.2 TCP报文段的首部686
22.4.3 TCP数据编号与确认688
22.4.4 TCP的流量控制与拥塞控制688
22.4.5 TCP的运输连接管理690
第23章 网络编程基础693
23.1 套接字概念693
23.2 准备工作694
23.2.1 字节序694
23.2.2 地址格式695
23.2.3 地址形式转换697
23.2.4 获得主机信息698
23.2.5 地址映射700
23.3 套接字基础编程701
23.3.1 建立和销毁套接字描述符701
23.3.2 地址绑定703
23.3.3 建立一个连接704
23.3.4 最简单的网络应用程序——服务器端707
23.3.5 最简单的网络应用程序——客户端710
23.3.6 使用文件读写函数读写套接字713
23.3.7 使用完整读写函数的网络应用程序716
23.3.8 面向连接的数据传输720
23.3.9 面向连接的网络应用程序——服务器端721
23.3.10 面向连接的网络应用程序——客户端724
23.3.11 无连接的数据传输727
23.3.12 无连接的网络应用程序——服务器端729
23.3.13 无连接的网络应用程序——客户端731
23.4 非阻塞套接字734
23.4.1 非阻塞网络应用程序——服务器端734
23.4.2 非阻塞网络应用程序——客户端737
第24章 网络编程进阶740
24.1 套接字编程深入740
24.1.1 bind函数的作用740
24.1.2 并发服务器741
24.1.3 UDP协议的connect函数应用743
24.2 多路选择I/O746
24.2.1 多路选择I/O的概念746
24.2.2 实现多路选择I/O747
24.2.3 使用多路选择I/O处理多个连接750
24.2.4 屏蔽信号的多路选择I/O754
24.2.5 对比select函数和pselect函数755
24.2.6 轮询I/O758
24.3 非网络通信套接字759
24.3.1 非命名UNIX域套接字759
24.3.2 命名UNIX域套接字761
24.3.3 UNIX域套接字实例——服务器端762
24.3.4 UNIX域套接字实例——客户端766
第25章 网络编程实例——实现文件传输程序769
25.1 程序设计769
25.1.1 整体程序设计769
25.1.2 客户端程序设计769
25.1.3 服务器端程序设计770
25.2 文件传输程序的实现773
25.2.1 客户端程序的实现——头文件773
25.2.2 客户端程序的实现——程序主函数774
25.2.3 客户端程序的实现——命令拆分函数777
25.2.4 客户端程序的实现——命令处理模块779
25.2.5 服务器端程序的实现——头文件790
25.2.6 服务器端程序的实现——程序主函数791
25.2.7 服务器端程序的实现——客户端命令处理模块794
25.3 测试和验证801
第26章 网络编程实例——简单的Web服务器802
26.1 程序设计802
26.1.1 整体程序设计802
26.1.2 步骤1——解析客户端发送的内容803
26.1.3 步骤2——寻找客户端需要的文件804
26.1.4 步骤3——将客户端信息返回804
26.2 Web服务器的实现805
26.2.1 Web服务器程序的实现——头文件806
26.2.2 Web服务器程序的实现——程序主函数806
26.2.3 Web服务器程序的实现——请求处理模块811
26.3 测试和验证816
第6篇 shell脚本知识
第27章 shell脚本基础818
27.1 编写最简单的shell脚本818
27.1.1 使用shell脚本的原因818
27.1.2 脚本内容819
27.1.3 运行一段脚本820
27.2 shell中的变量821
27.2.1 用户自定义变量821
27.2.2 引用变量823
27.2.3 为表达式求值824
27.2.4 变量的类型826
27.2.5 操作自定义变量828
27.2.6 位置变量830
27.2.7 重新分配位置变量831
27.3 退出状态833
27.4 条件测试835
27.4.1 测试文件状态835
27.4.2 测试时使用逻辑操作符837
27.4.3 字符串测试839
27.4.4 测试数值841
第28章 shell脚本中的控制结构844
28.1 shell脚本中的命令替换844
28.2 分支结构845
28.2.1 if/else分支结构845
28.2.2 多重分支结构847
28.2.3 使用case结构的分支语句848
28.2.4 在case语句中使用逻辑表达式851
28.3 条件测试命令的值853
28.3.1 测试整数与字符串853
28.3.2 测试字符串和空值854
28.3.3 测试未初始化的变量855
28.3.4 测试“false”的值856
28.4 循环结构857
28.4.1 while循环结构858
28.4.2 until循环结构861
28.4.3 for循环结构864
28.4 4 break和continue命令866
28.5 定义函数和使用函数869
……[看更多目录]
序言随着计算机技术的高速发展,Linux系统在服务器解决方案中的优势越来越被开发者认同。在计算机就业市场上,基于Linux系统开发的人员需求量也不断增加。其中,对Linux系统环境下C语言开发人员的需求尤为明显。由于C语言本身在语法结构、语言风格和编程思想上的特点,使C语言一直被公认为难以学习、轻松掌握。
尽管Linux环境下C语言开发越来越被企业和开发人员认同,关注的人数也越来越多,但实际上,真正了解和掌握C语言开发的人却很少。因此,笔者总结亲身学习Linux系统函数接口的经验,并结合自己多年从事Li
文摘插图:
第1章Linux简介
Linux是一个开放源代码的操作系统,本章将主要介绍GNU的发展简史、Linux的发展简史,以及Linux环境下的编程语言。
1.1 GNU简介
GNU是GNU’SNotUNIX的递归缩写。之所以取这个名字,主要是为了表明其不同于UNIX操作系统。GNU计划最早是由Richard Stallman在1983年9月份公开发起的,其主要目标是开发一个非私有的、开放的操作系统。
GNU计划中有一个著名的条款GPL(General Public License)。该条款的主要目的是保证GNU软件可以被自由地传播和使用,使用者不必向软件开发者付费,且使用者可以自由地修改,并可以将修改后的软件再发布出去。当然,发布后的软件也必须遵守GPL条款。
除了操作系统内核之外,一个完整的操作系统还应该有编辑器、浏览器、音乐播放器、编译器、电子邮件等多种软件。到了20世纪90年代的时候,GUN已经开发出了很多很成功的软件,例如,功能强大的文字编辑器emacs、bash shell程序、gcc编译程序、gdb调试程序等,就是缺少一个操作系统的内核,Linux就是在这样的背景下产生的。GNU为Linux的产生提供了重要的条件,而Linux则大大丰富了GUN软件。
1.2 Linux简介
Linux是一个类UNIX的操作系统,是当今世界的主流操作系统之一。Linux是一个多用户和多任务的操作系统,完全符合POSIX标准,具有很高的可靠性和稳定性,而且是免费和开源的。