• Linux环境高级程序设计
21年品牌 40万+商家 超1.5亿件商品

Linux环境高级程序设计

全新正版 急速发货

44.2 7.5折 59 全新

库存2件

天津武清
认证卖家担保交易快速发货售后保障

作者黄茹、王小银、张丽丽

出版社清华大学出版社

ISBN9787302520252

出版时间2019-02

装帧平装

开本16开

定价59元

货号26910216

上书时间2024-12-20

当科图书专营店

五年老店
已实名 已认证 进店 收藏店铺

   商品详情   

品相描述:全新
商品描述
前言
前言
出于安全、稳定等因素的考虑,开源软件受到了各行各业的青睐,其中以Linux操作系统为突出。作为当前为流行的操作系统之一——Linux已发展得较为成熟,其良好的稳定性和优异的性能带给各类用户优越的体验。Linux系统的使用范围越来越广,随之而来的是Linux环境下各类应用软件需求的暴增。学习Linux环境编程对提高IT从业者的竞争力和整个软件行业的发展无疑是相当有意义的。
本书以培养Linux系统程序分析能力为目标,以命令程序设计为驱动。在解决问题的过程中始终以培养分析问题的能力为基础,介绍有效使用Linux在线手册的方法,从而找到解决问题的突破口,进一步找到合适的系统调用接口,设计相关的命令程序,终解决问题。
C语言是广大程序设计人员都已掌握的一门程序设计语言,同时也是实现Linux系统所使用的程序设计语言。本书使用C语言结合Linux API进行程序设计,全书共分为10章,内容如下所述: 
第1章Linux基础知识,介绍Linux操作系统的发展情况以及系统编程的概念,同时还介绍Linux系统中的一些常用工具及命令。
第2章C程序开发工具,介绍Linux环境下编写C语言程序所要用到的一些工具,包括vim、gcc、gdb、makefile等。
第3章文件及目录管理,介绍POSIX标准下文件的各类I/O操作以及与流文件的关系和相互转换。
第4章进程管理,介绍在Linux环境中程序和进程的关系、进程的基本属性、一个进程从生到死的全过程,后介绍Linux系统中的一些特殊进程。
第5章重定向与管道,以实现重定向命令为引入点,重点介绍使用管道实现进程间通信的方法。
第6章信号,介绍信号的几种处理策略和信号在进程间通信中的使用方式。
第7章进程间通信,介绍使用共享内存、信号量和消息队列来实现进程间通信的方法,同时总结Linux环境下进程间通信的所有机制。
第8章线程,介绍线程的基本概念和基本操作。
第9章线程间的同步机制,介绍线程间的通信机制以及线程同步互斥的问题。〖1〗Linux环境高级程序设计前言[3]〖3〗第10章网络程序设计,介绍套接字机制在不同主机的进程间如何实现通信以及在Linux环境下网络套接字编程的基本方法。
其中第5~7章以及第10章都是有关于进程间通信机制的内容。
为检查各章的学习情况,本书后配备了相应的实验。
作为Linux环境程序设计的入门教材,本书语言简练、论述由浅入深,并辅以大量的示例程序和丰富的图表,使读者能够更好地理解各种抽象的概念和关系,帮助读者理解全书内容。本书面向各类高等院校的计算机相关专业学生以及对开源环境程序设计有兴趣的编程爱好者,要求读者有一定的C语言编程基础。书中除了讲解程序的设计实现之外,着重讲解解决问题的分析过程,力求使读者掌握问题的分析方法,逐步培养读者具有在Linux环境下独立设计和实现应用级甚至系统级程序的能力。
需要说明的一点是,由于系统调用从C语言语法的角度上来看与函数没有区别,因此在本书中不会引起歧义的地方并没有严格区分系统调用和库函数的表述。如果需要明确某一表述是系统调用还是库函数,可以使用man手册查找。man手册的第2章为系统调用,第3章为库函数。
本书主要由黄茹主编,王小银、张丽丽为副主编。其中黄茹编写了第1、4、5、6、7章;王小银编写了第8、9、10章;张丽丽编写了第2、3章;后由黄茹负责对全书进行了统稿。此外,在本书的编写过程中,感谢陈莉君、舒新峰、刘霞林、王春梅对本书提出了宝贵的意见。
尽管本书经过了编者反复的修改,但由于编者水平和经验有限,时间仓促,书中难免存在错漏之处,殷切希望广大读者批评指正。

编者
2019年1月

导语摘要
本书介绍使用C语言结合Linux API进行系统级程序设计的方法,主要包括Linux基础知识、C程序开发工具、文件及目录管理、进程管理、重定向与管道、信号、进程间通信、线程、线程间的同步机制、网络程序设计等10章,以及10个实验,全面而系统地介绍Linux操作系统各种机制的实现原理、经常使用的系统接口函数、系统接口和命令程序之间的关系以及命令程序的实现过程等。本书结构清晰,适合于教学,为各类高等学校开设开源软件程序设计课程提供了一个切实可行的思路,同时也可作为培训教材在各类培训机构使用。书中各章节划分明确,各章突出不同的重点,有利于教师组织安排授课内容;同时提供设计精美、内容丰富的电子教案以及教学素材供授课教师使用,有效地减轻了授课教师备课的工作量和强度。本书目标读者为具有一定C语言基础的读者,适合各类高等院校的计算机及相关专业学生、Linux培训机构、Linux API编程爱好者、Linux程序开发人员及爱好者学习使用。

目录
目录
第1章Linux基础知识/1
1.1Linux简介1
1.1.1Linux系统的发展1
1.1.2与Linux相关的一些知识3
1.2Linux系统编程5
1.2.1什么是系统编程5
1.2.2系统编程的学习内容及方法6
1.2.3一个例子7
1.2.4系统调用和库函数10
1.3常用工具及命令10
1.3.1命令格式10
1.3.2常用工具11
1.3.3常用命令15
1.3.4获取帮助17
1.4小结20
习题20
第2章C程序开发工具/22
2.1编辑工具22
2.1.1编辑工具介绍22
2.1.2vi和vim程序编辑器25
2.2gcc编译器34
2.3gdb调试器36
2.3.1启动和退出gdb37
2.3.2显示和查找程序源代码38
2.3.3执行程序和获取帮助39
2.3.4设置和管理断点40
2.3.5查看和设置变量的值45
2.3.6控制程序的执行46
2.4make和Makefile48〖1〗Linux环境高级程序设计目录[3]〖3〗2.4.1make命令48
2.4.2编写Makefile文件50
2.5小结54
习题55
第3章文件及目录管理/56
3.1文件和I/O操作分类56
3.1.1文件概念56
3.1.2文件操作分类56
3.2Linux文件系统概述58
3.2.1文件结构58
3.2.2文件系统模型59
3.2.3目录、索引结点和文件描述符60
3.2.4文件的分类63
3.2.5文件访问权限控制64
3.3文件的读写68
3.3.1文件打开、创建和关闭69
3.3.2文件的读写72
3.3.3文件读写指针的移动80
3.3.4标准I/O的文件流82
3.4文件属性及相关系统调用87
3.4.1获取文件属性87
3.4.2修改文件的访问权限91
3.4.3修改文件的用户属性93
3.4.4获取用户的信息94
3.4.5改变文件大小95
3.4.6获取文件的时间属性96
3.5目录操作97
3.5.1打开目录97
3.5.2读取目录项98
3.5.3关闭目录98
3.6实现自己的ls命令100
3.7小结105
习题106
第4章进程管理/107
4.1Linux可执行程序的存储结构与进程结构107
4.1.1Linux可执行程序的存储结构107
4.1.2Linux系统的进程结构109
4.1.3进程树110
4.2进程的环境和进程属性111
4.2.1进程的环境111
4.2.2进程的状态112
4.2.3进程的基本属性115
4.2.4进程的用户属性121
4.3进程管理124
4.3.1创建进程124
4.3.2在进程中运行新代码127
4.3.3vfork函数131
4.3.4进程退出133
4.3.5wait函数138
4.3.6Shell的实现流程142
4.4Linux中的特殊进程143
4.4.1孤儿进程143
4.4.2僵尸进程144
4.4.3守护进程145
4.4.4出错记录148
4.5小结150
习题150
第5章重定向与管道/151
5.1重定向和管道命令151
5.1.1重定向命令151
5.1.2管道命令152
5.2实现重定向153
5.2.1重定向的实施者153
5.2.2实现重定向的前提条件154
5.2.3dup和dup2154
5.2.4重定向的三种方法157
5.2.5ls l>list.txt159
5.3管道编程161
5.3.1匿名管道161
5.3.2命名管道165
5.3.3ls l|grep root168
5.3.4popen和pclose170
5.4小结173
习题174
第6章信号/175
6.1信号概述175
6.1.1什么是信号175
6.1.2信号的来源和处理过程177
6.1.3信号的处理方式177
6.2早期信号处理函数——signal178
6.2.1signal函数实现信号的三种处理方式178
6.2.2signal函数存在的问题182
6.3信号处理函数——sigaction183
6.3.1sigaction系统调用183
6.3.2sigaction函数参数的说明186
6.4信号其他相关函数190
6.4.1kill与raise190
6.4.2alarm与pause192
6.4.3实现sleep函数193
6.5小结194
习题195
第7章进程间通信/196
7.1选择进程间通信方式196
7.1.1文件实现进程间通信196
7.1.2命名管道实现进程间通信199
7.2共享内存201
7.2.1什么是共享内存201
7.2.2共享内存相关系统调用203
7.2.3共享内存实现进程间通信206
7.2.4三种通信方式的比较208
7.3信号量209
7.3.1信号量及相关系统调用209
7.3.2使用信号量控制对共享内存的访问214
7.3.3信号量机制总结221
7.4System V IPC222
7.4.1Linux中的进程通信机制222
7.4.2System V IPC概述223
7.4.3IPC的标识符和键224
7.5消息队列225
7.5.1消息队列的概念225
7.5.2消息队列相关系统调用226
7.5.3使用消息队列实现进程间通信229
7.6小结232
习题232
第8章线程/233
8.1线程概述233
8.1.1线程的定义233
8.1.2用户级线程和内核级线程234
8.1.3线程与进程的对比234
8.2线程基本操作235
8.2.1线程创建235
8.2.2线程退出/等待238
8.2.3线程终止244
8.2.4线程挂起247
8.2.5线程的分离249
8.2.6线程的一次性初始化251
8.2.7线程的私有数据253
8.3线程属性257
8.3.1线程属性对象258
8.3.2设置/获取线程detachstate属性260
8.3.3设置与获取线程栈相关属性261
8.4线程应用举例266
8.5小结273
习题273
第9章线程间的同步机制/275
9.1互斥锁275
9.1.1互斥锁基本原理275
9.1.2互斥锁基本操作275
9.1.3互斥锁应用实例278
9.2条件变量279
9.2.1条件变量基本原理279
9.2.2条件变量基本操作279
9.2.3条件变量应用实例281
9.3读写锁284
9.3.1读写锁基本原理284
9.3.2读写锁基本操作284
9.3.3读写锁应用实例287
9.4线程与信号289
9.4.1线程信号管理290
9.4.2线程信号应用实例291
9.5小结295
习题295
第10章网络程序设计/296
10.1网络知识基础296
10.1.1TCP/IP参考模型296
10.1.2Linux中TCP/IP网络的层结构296
10.1.3TCP协议297
10.1.4UDP协议298
10.2套接字299
10.2.1套接字概述299
10.2.2套接字编程接口300
10.2.3套接字通信流程303
10.3套接字基础307
10.3.1套接字地址结构307
10.3.2字节顺序309
10.3.3字节处理函数310
10.4套接字编程311
10.4.1基于TCP协议的网络通信311
10.4.2基于UDP协议的网络通信316
10.5小结319
习题319
附录实验/321
实验1Linux基础知识321
实验2C程序开发工具321
实验3文件I/O操作322
实验4进程管理及守护进程323
实验5重定向和管道编程323
实验6信号安装及处理方式324
实验7System V IPC进程通信325
实验8线程管理325
实验9线程间通信326
实验10套接字编程326

内容摘要
本书介绍使用C语言结合Linux API进行系统级程序设计的方法,主要包括Linux基础知识、C程序开发工具、文件及目录管理、进程管理、重定向与管道、信号、进程间通信、线程、线程间的同步机制、网络程序设计等10章,以及10个实验,全面而系统地介绍Linux操作系统各种机制的实现原理、经常使用的系统接口函数、系统接口和命令程序之间的关系以及命令程序的实现过程等。
本书结构清晰,适合于教学,为各类高等学校开设开源软件程序设计课程提供了一个切实可行的思路,同时也可作为培训教材在各类培训机构使用。书中各章节划分明确,各章突出不同的重点,有利于教师组织安排授课内容;同时提供设计精美、内容丰富的电子教案以及教学素材供授课教师使用,有效地减轻了授课教师备课的工作量和强度。
本书目标读者为具有一定C语言基础的读者,适合各类高等院校的计算机及相关专业学生、Linux培训机构、Linux API编程爱好者、Linux程序开发人员及爱好者学习使用。

主编推荐
循序渐进地进入Linux环境下系统级程序设计

精彩内容
第5章重定向与管道在Linux系统中,系统会默认为命令或程序打开三个标准I/O文件,保证命令或程序可以与用户进行交互。除此之外,还可以将这三个标准文件重定向,借此可以实现从指定的位置获取输入信息或将输出信息、错误信息保存在指定的文件中。同时,Linux系统还提供管道的功能,可以将多条命令或程序之间的输出和输入相衔接,实现灵活的Shell编程。
5.1重定向和管道命令〖4/5〗5.1.1重定向命令所有的UNIX I/O重定向都是基于标准数据流的原理。在Shell中键入命令运行时,内核将会为命令进程打开三个标准I/O设备文件,并且用文件描述符0、1、2与它们关联,其中文件描述符0对应标准输入设备,1对应标准输出设备,2对应标准错误文件。进程在运行过程中,默认从标准输入设备文件读取数据,将输出数据写入标准输出设备文件,如果出错的话,错误信息将会写入标准错误文件。例如,使用cat命令时,系统将会把结果显示在标准输出设备上。通常标准输入设备文件为键盘,标准输出设备文件和标准错误文件为显示器,如图5.1所示。
图5.1进程和标准设备文件的联系
在某种情况下,用户希望能够将信息输出到某个文件中,而不是显示在标准输出设备上,此时可以将该进程的标准输出进行重定向。重定向命令分为输入重定向、输出重定向和错误重定向。〖1〗Linux环境高级程序设计第5章重定向与管道[3]〖3〗1. 输入重定向
输入重定向使用符号“<”来表示,它表示将进程的文件描述符0关联到指定的文件上去。输入重定向命令的格式为: command <file例如,命令mail s test hr@163.com<file就是一条输入重定向命令,它表示以file文件为邮件内容,向hr@163.com邮箱发送一封标题为test的邮件。使用“<”符号时,也可以把文件描述符0加在前面,例如,cat 0<file1,该命令同样表示将cat命令的输入重定向到file1文件。
2. 输出重定向
符号“>”或“>>”都可以用来表示输出重定向,两者的差异在于: 前者以覆盖的方式输出,后者以追加的方式输出。输出重定向命令的格式为:  command>file或 command>>file例如,命令cat file1 file2>file3表示将文件file1和file2的内容合并输出到文件file3中,这条命令也可以使用以下两条命令来替换:  cat file1>file3
 cat file2>>file3如果重定向使用的是符号“>!”,那么表示输出重定向强制覆盖文件原有的内容。
3. 错误重定向
错误重定向可以使用符号“2>”或“2>>”来表示,两个符号的差异与输出重定向类似。错误重定向的具体命令格式为:  command 2>file或command 2>>file使用错误重定向后,如果在命令执行的过程中有错误发生,错误信息将会记录在文件file中。
除了以上介绍的重定向符号外,还可以使用“>&”“1>”“2>&1”等符号。使用重定向符号时,也并不仅限于只能在命令末尾处出现重定向符号。这些重定向符号可以单独使用,也可以组合使用,例如:  wc <file1 >result.wc 2>error.txt以上命令表示统计file1文件的字符、单词和行数,将结果记录在result.wc文件中,如果出错,错误信息记录在error.txt文件中。
5.1.2管道命令
如果某些数据必须要经过几次命令操作之后才能得到所想要的结果,此时可以使用管道符号将这些命令连接起来。管道命令会将符号先后的命令连接起来,将前一条命令的输出作为后一条命令的输入。符号“|”称为管道操作符,管道命令的具体格式如下:      command1|command2|command3|……例如:      grep root /etc/passwd | sort图5.2管道命令示意图
该命令表示在/etc/passwd文件中搜索出含有root的内容,并将这些内容排序。这条管道命令的示意图如图5.2所示。
又如:  ls -l|grep hr|lpr该命令表示列出当前目录中包含hr模式串的文件名称,将结果打印出来。
5.2实现重定向〖4/5〗5.2.1重定向的实施者在实现重定向命令之前,需要借由一个示例程序先来明确一下重定向是由待执行的命令或程序还是Shell来实现的。 \[示例程序5.1 for_redirect.c\]
 #include<stdio.h>
 main(int argc, char  argv\[ \])
 {
 int i;
 char buf\[80\];
 scanf("%s",buf);
 printf("info from file:%s\\n",buf);
 printf("arg list\\n");
 for(i=0;i<argc;i  )
 printf("argv\[%d\]:%s\\n",i,argv\[i\]);
 fprintf(stderr,"where do you find this?\\n");
 }在示例程序5.1中,分别使用scanf、printf和fprintf函数对标准输入、标准输出和标准错误文件进行了读、写操作,并且还使用printf函数输出了执行程序时所附带的参数。当使用两种不同的方式来运行该程序时,请观察一下重定向符号是否会被Shell当作参数传递给用户程序。
将程序编译后按照带重定向和不带重定向两种方式运行,得到结果如下:  root@ubuntu:~#./for_redirect para1 para2 para3
 Hello
 info from file:Hello
 arg list
 argv\[0\]:./for_redirect
 argv\[1\]:para1
 argv\[2\]:para2
 argv\[3\]:para3
 where do you find this?
 root@ubuntu:

—  没有更多了  —

以下为对购买帮助不大的评价

此功能需要访问孔网APP才能使用
暂时不用
打开孔网APP