《红旗LINUX系统开发技术》PDF下载

  • 购买积分:15 如何计算积分?
  • 作  者:北京中科红旗软件技术有限公司编著
  • 出 版 社:北京:石油工业出版社
  • 出版年份:2013
  • ISBN:9787502193881
  • 页数:453 页
图书介绍:本书全面介绍了Linux系统的开发方法,第一章详细介绍Linux的软件开发环境,包括编译、调试、维护工具以及广泛应用的集成开发环境;第二章至第五章讲述Linux的文件系统、I/O系统调用、系统数据文件方面的内容;第六章至第九章讲述了Linux进程模型,包括进程关系、进程控制、进程间通信、信号处理等方面的内容;第十章讲述终端I/O编程;第十一章讲述网络套接字编程;第十二章讲述了守护进程、系统服务等方面的内容;第十三章讲述多线程编程等方面的内容。本书结合大量实例,概念清晰,内容丰富翔实,特色鲜明,实用性强。适用于从事Linux操作系统开发的人员。

1 Linux软件开发工具 1

1.1 gcc和g++ 1

1.1.1全局选项 2

1.1.2语言选项 3

1.1.3预处理程序选项 4

1.1.4汇编程序选项:-Wa, option 6

1.1.5连接程序选项 6

1.1.6目录选项 8

1.1.7优化选项 8

1.1.8调试选项 8

1.1.9警告选项 9

1.2 gnu make 9

1.2.1 make命令的输入文件 10

1.2.2 gnu make的使用 16

1.3 autoconf 17

1.3.1 configure.in文件的获得 18

1.3.2 aclocal.m4文件和acsite.m4文件的获得 23

1.3.3 configure脚本的生成 24

1.3.4 configure脚本的执行 24

1.3.5软件包的发行和使用 26

1.3.6 autoconf的流程框图 26

1.4 automake 27

1.4.1编写Makeflile.am文件 27

1.4.2修改configure.in文件 32

1.4.3执行automake 32

1.4.4 automake应用示例 33

1.5 gdb 33

1.5.1 gdb的命令行选项及参数 34

1.5.2 gdb的内部命令 36

1.5.3 gdb应用示例 43

2 文件系统 47

2.1文件系统简介 47

2.1.1概述 47

2.1.2文件模式 48

2.1.3进程的umask 51

2.2 Linux文件系统简介 52

2.2.1 EXT2文件系统的结构 53

2.2.2超级块 53

2.2.3组描述符 54

2.2.4 inode 54

2.2.5目录结构 55

2.2.6 EXT2磁盘空间的分配策略 56

2.2.7 EXT3文件系统的改进 56

2.2.8 EXT4文件系统 58

2.3基本文件操作 60

2.3.1文件描述符和流 60

2.3.2打开关闭文件 61

2.3.3文件共享 63

2.3.4顺序文件读写 65

2.3.5随机文件读写 68

2.3.6其他文件操作 70

2.4 inode的操作 75

2.4.1查询inode信息 75

2.4.2存取权限 78

2.4.3文件所有权 79

2.4.4时间属性 80

2.4.5 EXT2扩展属性 80

2.5特殊文件 83

2.5.1硬连接和符号连接 83

2.5.2创建设备文件和管道 84

2.5.3 /dev/fd 85

3 目录操作 86

3.1当前目录 86

3.1.1获得当前目录 86

3.1.2设置当前目录 87

3.1.3改变根目录 87

3.2创建删除目录 88

3.3浏览目录 88

3.4名字匹配 92

3.4.1使用子进程 92

3.4.2内部匹配 93

4 高级I/O操作 96

4.1同时进行多个I/O操作(I/O复用) 96

4.1.1轮询方式 96

4.1.2使用非阻塞I/O 97

4.1.3效率较高的I/O复用 99

4.1.4系统调用poll 102

4.2内存映像 103

4.2.1分配页面 104

4.2.2建立内存映像 104

4.2.3内存与磁盘的同步 107

4.3给内存区加锁 108

4.4文件加锁 109

4.4.1文件锁 109

4.4.2记录锁 110

4.4.3死锁 114

4.4.4锁的继承与释放 114

4.4.5建议锁与强制锁 115

4.5非连续区域读写 116

5 系统数据文件和系统信息 117

5.1简介 117

5.2密码文件 117

5.2.1 /etc/passwd文件和passwd结构 117

5.2.2有关的函数接口 119

5.2.3密码的shadow机制 122

5.3组(groups) 123

5.3.1 /etc/group文件和group结构 123

5.3.2有关的函数接口 124

5.3.3附加组 126

5.4其他数据文件 129

5.5有关用户登录的系统文件 129

5.6系统标识 131

5.7系统时钟 132

6 进程模型与进程关系 136

6.1进程 136

6.2线程 136

6.3启动例程 136

6.4终止进程 137

6.5 atexit函数 138

6.6命令行参数 140

6.7环境变量列表 140

6.8 C程序在内存中的分布 141

6.9共享库 142

6.10内存分配机制 143

6.11环境变量的访问与修改 144

6.12 setjmp和longjmp函数 145

6.13使用局部变量的问题 147

6.14 getrlimit和setrlimit函数 148

6.15 getrusage函数 151

6.16终端登录 152

6.16.1 4.3+BSD终端登录 152

6.16.2 SVR4终端登录 153

6.16.3 4.3 + BSD网络登录 154

6.17进程组 154

6.18会话 155

6.19控制终端 156

6.20 tcgetpgrp和tcsetpgrp函数 157

6.21作业控制 157

6.22程序在shell下的运行 159

6.23孤儿进程组 160

6.24 4.3 + BSD对进程关系实现 162

7 进程控制 164

7.1进程标识 164

7.2 fork函数 164

7.3 exit函数 168

7.4 wait和waitpid函数 170

7.5 wait3和wait4函数 173

7.6竞争条件 174

7.7 exec函数 175

7.8 setuid和setgid函数 179

7.9 setreuid和setregid函数 180

7.10 seteuid和setegid函数 180

7.11 system函数 181

7.12 getlogin函数 183

7.13 times函数 183

7.14守护进程 185

7.14.1守护进程的特点 185

7.14.2守护进程的例子 186

7.14.3 syslog函数 187

8 进程间通信 190

8.1管道和命名管道 190

8.1.1管道 190

8.1.2流管道 204

8.1.3 FIFO 205

8.2 System V IPC 210

8.2.1 System V IPC访问方式 210

8.2.2消息队列 213

8.2.3信号量 219

8.2.4共享内存 226

8.2.5 System V IPC使用总结 237

9 信号处理 239

9.1概述 239

9.2 Linux系统中的信号 240

9.3对信号的处理 242

9.3.1设置信号处理函数 242

9.3.2系统对信号的处理 244

9.3.3不可靠的信号 245

9.3.4信号的阻塞 246

9.3.5向进程发送信号 246

9.3.6用定时器使进程睡眠 247

9.3.7信号与系统调用 250

9.3.8信号集 251

9.3.9使用信号集屏蔽信号 251

9.3.10设置信号的处理函数 252

9.3.11非局部跳转 254

9.3.12屏蔽信号并使进程等待 255

9.3.13使进程退出 256

9.3.14等待一个进程结束 257

9.3.15 实现函数system的一种方法 258

9.3.16实现函数sleep的一种方法 260

9.3.17作业控制信号 261

10 终端及伪终端编程 262

10.1引言 262

10.1.1终端 262

10.1.2终端驱动程序 262

10.1.3系统与终端之间的关系 262

10.1.4版本 263

10.2 Unix/Linux中的终端 263

10.2.1概述 263

10.2.2控制终端 264

10.2.3数据传输 265

10.2.4正则模式和非正则模式 265

10.2.5正则模式下的编辑键 266

10.3终端的应用程序设计 268

10.3.1终端的打开与读写 268

10.3.2库函数ttyname和isatty 273

10.3.3 termios结构 275

10.3.4利用ioctl系统调用对终端进行控制 281

10.3.5通过13个termios系统调用对终端进行控制 286

10.3.6非正则模式 298

10.3.7终端与SIGHUP信号 304

10.3.8终端窗口大小 304

10.3.9 ctermid 306

10.3.10 termcap、 terminfo和curses 307

10.3.11 stty命令 308

10.4程序tty_ transfer的设计 309

10.4.1总体描述 309

10.4.2头文件、常量定义和main函数 310

10.4.3 serial_ conn函数 312

10.4.4文件传输函数 316

10.4.5 tty_ transfer的使用 320

10.5终端管理的发展 321

10.5.1数据结构的变化 321

10.5.2流的概念的提出 321

10.6基于STREAMS的终端子系统 322

10.6.1流的概念 322

10.6.2基于STREAMS终端的优点 323

10.6.3线路规程模块 324

10.6.4硬件仿真模块 329

10.7伪终端程序设计 330

10.7.1伪终端简介 330

10.7.2 SVR4中的ptym_ open和ptys_ open 333

10.7.3 BSD中的ptym_open和ptys_ open 336

10.7.4 pty_ fork 339

10.7.5 pty编程举例 343

10.7.6 Linux下的伪终端例程 348

10.7.7远程方式和分组方式 349

10.7.8基于STREAMS的伪终端子系统 349

11 socket编程 355

11.1协议支持 355

11.1.1网络基础知识 355

11.1.2 Linux系统网络模块的结构 356

11.1.3关于网络地址 357

11.2几个工具函数 357

11.3 socket编程的基本流程和要用到的函数 358

11.3.1服务器端程序的基本操作 359

11.3.2客户端程序的基本操作 361

11.4 Unix域socket 361

11.4.1 Unix域地址 362

11.4.2 Unix域socket服务程序 362

11.4.3客户程序 364

11.4.4运行Unix域socket示例程序 365

11.4.5用socketpair函数建立未命名Unix域socket 365

11.4.6用Unix域socket在进程间传递文件描述符 366

11.5 TCP/IP网络编程 370

11.5.1关于字节序 371

11.5.2 IPv4地址 371

11.5.3 Socket编程中的IP地址结构 372

11.5.4十进制点式IP地址与二进制IP地址间的转换 372

11.5.5使用域名 373

11.5.6域名解析示例 374

11.5.7查询服务程序的端口号 376

11.5.8 TCP服务程序示例 378

11.5.9 TCP client application 380

11.6 socket出错常量 381

12 守护进程 383

12.1守护进程简介 383

12.2 syslogd守护进程 383

12.3 syslog函数 384

12.4 daemon_ init函数 386

12.4.1 fork 387

12.4.2 setsid 387

12.4.3忽略SIGHUP并再次调用fork 387

12.4.4改变工作目录并清除文件创建掩码 387

12.4.5关闭所有打开的描述符 388

12.4.6打开syslog 388

12.5 Inetd守护进程 388

12.6如何编制一个由inetd启动的服务器程序 390

12.6.1程序 390

12.6.2配置/etc/services文件 391

13 多线程编程 393

13.1概念 393

13.1.1线程 393

13.1.2内核线程与用户层线程 394

13.1.3进程、LWP和线程 395

13.1.4线程的优势 403

13.2多线程编程基础 404

13.2.1概念 404

13.2.2线程的创建和终止 405

13.2.3线程的合并和分离 408

13.2.4线程属性 410

13.2.5其他 414

13.3线程之间的互斥与同步 416

13.3.1线程互斥与同步的概念 416

13.3.2互斥锁 416

13.3.3利用条件变量实现同步 421

13.3.4利用互斥锁和条件变量实现同步 426

13.4线程编程中的其他问题 429

13.4.1线程的私有变量 429

13.4.2初始化函数 436

13.4.3撤销其他线程的执行 437

13.4.4清场函数 440

13.4.5线程的信号操作 445

13.4.6 Semaphore.c 446