Solaris系统编程

Solaris系统编程
作 者: (加)提尔;云巅工作室译
出版社: 机械工业出版社
丛编项: Sun公司核心技术丛书
版权说明: 本书为公共版权或经版权方授权,请支持正版图书
标 签: solaris
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

  RichTeer,加拿大不列颠哥伦比亚省基洛纳市的一名UNIX顾问,UNIX社区中一名受人尊重的资深成员,知名的Solaris系统管理和编程专家,持有SCSA、SCNA和SCSA证书。他具有15年的C编程经验、9年多从事Sun系统工作的经验,其中有2年是SunMicrosystems公司的技术支持顾问。同时,他也是W.RichlardStevens的畅销书((UNIXNetworkProgramming》(第2版)的技术审校。

内容简介

本书使用实际安全研究、代码示例和图示,为系统程序员提供了全面、实用的指导,涵盖Solaris操作系统的所有版本,包括版本2.5到版本9,而且与SPARC和x86平台相关。从I/O到IPC、从伪终端到本地化、从进程到门,本书阐述了该环境的特征和微妙之处。本书主要特点?Solaris系统编程中使用的术语和功能。?基本知识:实用工具函数、文件I/O、标准I/O库、日期/时间操作、用户/组、系统信息、资源限制、安全C编程。?I/O深入学习:文件、目录、文件系统、终端I/O和高级I/O。?进程和进程控制:UNIX进程环境、关系、信号和守护进程。?进程间通信:管道、FIFO、System V IPC工具、门等。?可移植性向导:介绍Solaris具有的所有特征。

图书目录

第1章 引 言

1.1 简介

1.1.1 在Solaris上编译C程序

1.2 登录

1.3 shell

1.4 文件、目录和文件系统

示例:简单目录清单

包含头文件

1.5 输入和输出

1.6 程序、进程和线程

1.7 错误处理

1.8 用户标识

1.9 信号

1.10 UNIX时间值

1.11 系统调用和库函数

1.12 64位编程概述

1.12.1 编写纯64位的程序

1.12.2 编译和安装64位的程序

1.12.3 大文件的编译环境

1.12.4 过渡期的大文件编译环境

1.13 小结

练习

第2章 Solaris简史

2.1 引言

2.2 初期:SunOS

2.3 SunOS之后:Solaris

2.4 标准

2.4.1 ANSI/ISO/IEC C

2.4.2 系统V接口定义

2.4.3 IEEE POSIX

2.4.4 开放组的XPG4

2.4.5 单一UNIX规范

2.5 Solaris 2.5

2.5.1 Solaris 2.5.1

2.6 Solaris 2.6

2.7 Solaris 7

2.8 Solaris 8

2.9 Solaris 9

2.10 Solaris标准遵守情况

2.11 编译符合标准的应用程序

2.12 小结

练习

第二部分 基本主题

第3章 应用程序函数

3.1 引言

3.2 处理字符类

3.2.1 测试字符类成员资格

3.2.2 改变字符类成员资格

3.2.3字符类小结

3.3 处理字符串

3.3.1 得到字符串的长度

3.3.2 比较字符串

3.3.3 连接字符串

3.3.4 复制字符串

3.3.5 字符串查找函数

3.3.6 复制字符串

3.3.8 转换字符串的函数

3.9 把字符串转换为数字

3.3.10 把数字转换成字符串

3.4 处理字节数组

3.4.1 比较字节数组

3.4.2 复制字节数组

3.4.3 查找字节数组

3.5 动态内存

3.5.1 内存对齐

3.5.2 分配动态内存

3.5.3 释放动态内存

3.6 其他的内存管理包

3.6.1 malloc库

3.6.2 bsdmalloc库

3.6.3 mapmalloc库

3.6.4 watchmalloc共享对象

3.6.5 比较malloc库

3.7 临时文件

3.7.1 产生临时文件名

3.7.2 创建临时文件

3.8 分析命令行参数

3.9 错误报告

3.10 挂起进程

3.11 小结

练习

第4章 基本的文件I/O

4.1 引言

4.2 文件描述符

4.3 open函数

4.6 lseek和llseek函数

4.7 tell函数

4.8 read和pread函数

4.9 write和pwrite函数

4.10 readn和writen函数

4.11 I/O效率

4.12 文件共享

4.13 原子的操作

4.14 dup和dup2函数

4.15 fcntl函数

4.16 ioctl函数

4.17 fdwalk函数

4.18 直接I/O

4.19 /dev/fd文件系统

4.20 小结

第5章 标准I/O库

5.1 引言

5.2 文件流、数据类型和常量

5.3 标准输入、标准输出和标准错误输出

5.4 打开文件流

5.5 关闭文件流

5.6 读和写

5.6.1 字符输入函数

5.6.2 字符输出函数

5.6.3 行输入函数

5.6.4 行输出函数

5.6.5 二进制I/O

5.7 流状态

5.8 格式化I/O

5.8.1 格式输出

5.8.2 格式输入

5.8.3 格式转换规范

5.8.4 C语言转义序列

5.9 定位流

5.10 文件流锁定

5.10.1 未锁定的文件流I/O

5.11 缓冲

5.12 标准I/O的效率

5.13 小结

练习

第6章 日期和时间操作

6.1 引言

6.2 转换时间的复杂性

6.3 获得当前时间

6.3.1 difftime函数

6.4 设置当前时间

6.5 获得当前时区

6.6 在UNIX时间和日历时间进行转换

6.6.1 localtime和localtime_r函数

6.6.2 gmtime和gmtime_r函数

6.6.3 mktime函数

6.7 格式日期I/O

6.7.1 将日期转换成格式字符串

6.7.2 将格式字符串转换成日期

6.8 小结

6.3 编写一个程序,显示世界上不同时区的当前时间,包括北半球和南半球位置。

第7章 用户和组

7.1 引言

7.2 用户名

7.3 用户ID

7.4 组ID

7.5 组成员资格

7.8 读取和加密口令

7.9 组文件

7.10 utmpx和wtmpx文件

7.11 utmp和wtmp文件

7.12 lastlog文件

7.13 shells文件

7.14 总结

第8章 系统信息和资源限制

8.1 引言

8.2 系统信息和识别

8.3 系统资源限制

8.4 每个进程的资源限制

8.5 资源控制工具

8.6 资源控制示例

8.7 资源使用信息

8.8 使用/proc文件系统确定资源使用信息

8.9 确定系统的平均负荷

8.10 总结

练习

第9章 安全的C编程

9.1 引言

9.2 缓冲区溢出

9.3 程序的环境

9.4 防御性编程

9.5 最小特权原则

9.6 使用chroot“监牢”

9.7 编写安全程序的技巧

9.8 总结

第三部分 输入/输出

第10章 文件和目录

10.1 引言

10.2路径名组件

10.3 stat、fstat和lstat函数

10.4 文件类型

10.5 设置-用户-ID和设置-组-ID

10.6 粘着位

10.7 文件访问权限

10.8 access函数

10.9 umask函数

10.10 chmod和fchmod函数

10.11 chown、fchown和lchown函数

10.12 文件尺寸

10.12.1 稀疏文件

10.13 文件截取

10.14 文件系统

10.15 link和unlink函数

10.16 remove和rename函数

10.17 符号链接

10.18 解析可能包含符号链接的路径

10.18.1 resolvepath函数

10.18.2 realpath函数

10.19 symlink和readlink函数

10.20 文件时间

10.21 改变文件的访问和修改时间

10.21.1 utime函数

10.21.2 utimes函数

10.22 创建和移除目录

10.23 读取目录

10.23.1 opendir和fdopendir函数

10.23.2 readdir和readdir_r函数

10.23.3 seekdir、rewinddir和telldir函数

10.23.4 closedir函数

10.23.5 ftw和nftw函数

10.24 chdir、fchdir和getcwd函数

10.25 chroot和fchroot函数

10.26 特殊文件

10.27 sync和fsync函数

10.28 综合讨论

10.29 小结

练习

第11章 使用文件系统

11.1 引言

11.2 磁盘术语

11.3 已挂载的文件系统表

11.3.2 hasmntopt函数

11.3.3 resetmnttab函数

11.3.4 putmntent函数

11.4 mntfs文件系统ioctl命令

11.5 文件系统默认值

11.5.1 getvfsent系列函数

11.5.2 添加项到/etc/vfstab

11.6 挂载和卸载文件系统

11.6.1 mount函数

11.6.2 umount和umount2函数

11.7 获得文件系统的状态

11.7.1 statvfs和fstatvfs函数

11.7.2 ustat函数

11.8 读取文件系统数据结构

11.8.1 超级块

11.8.2 信息节点表

11.8.3 柱面组

11.9 总结

练习

第12章 终端I/O

12.1 引言

12.2 终端I/O概述

12.3 特殊的输入字符

12.4 获得和设置终端属性

12.5 终端选项标志

12.5.1 stty命令

12.6 波特率函数

12.7 行控制函数

12.7.1 tcdrain函数

12.7.2 tcflow函数

12.7.3 tcflush函数

12.7.4 tcsendbreak函数

12.8 终端标识

12.8.1 ctermid和ctermid_r函数

12.8.2 isatty函数

12.8.3 ttyname和ttyname_r函数

12.9 规范模式

12.10 非规范模式

12.11 终端窗口尺寸

12.12 设备无关的终端控制

12.13 小结

练习

第13章 高级I/O

13.1 引言

13.2 非阻塞I/O

13.3 记录锁定

13.4 使用fcntl的记录锁定

13.5 使用lockf的记录锁定

13.6 死锁和活锁

13.7 锁继承性和释放

13.8 强制锁与建议锁的比较

13.9 STREAMS I/O子系统

13.9.1 isastream函数

13.10 STREAMS消息

13.11 putmsg和putpmsg函数

13.12 getmsg和getpmsg函数

13.13 STREAMS ioctl操作

13.14 使用read和write的STREAMS I/O

13.14.1 从STREAMS设备中读取

13.4.2 写入到STREAMS设备

13.15 I/O多路复用

13.16 select函数

13.17 poll函数

13.18 /dev/poll设备驱动程序

13.19 异步I/O

13.20 和STREAMS设备文件一起的异步I/O

13.21 和其他文件一起的异步I/O

13.21.1 aioread和aiowrite函数

13.21.2 aiowait函数

13.21.3 aiocancel函数

13.22 readv和writev函数

13.23 sendfile和sendfilev函数

13.23.1 sendfile函数

13.23.2 sendfilev函数

13.24 内存映射的I/O

13.25 mmap和munmap函数

13.26 mprotect函数

13.27 madvise函数

13.28 msync函数

13.29 在内存中锁定页面

13.29.1 mlock和munlock函数

13.29.2 mlockall和munlockall函数

13.29.3 plock函数

13.30 memcntl函数

13.31 内存映射I/O的小结

13.32 访问控制列表

13.33 acl和facl函数

13.34 aclfromtext和acltotext函数

13.35 aclcheck函数

13.36 aclfrommode和acltomode函数

13.37 aclsort函数

13.38 扩展的文件属性

13.39 openat和attropen函数

13.40 fstatat函数

13.41 unlinkat函数

13.42 renameat函数

13.43 fchownat函数

13.44 futimesat函数

13.45 改变扩展属性文件权限

13.46 小结

练习

第四部分 进程和进程控制

第14章 UNIX进程的环境

14.1 引言

14.2 进程启动

14.2.1 main函数

14.3 进程终止

14.3.1 exit和_exit函数

14.3.2 atexit函数

14.4 命令行参数

14.4.1 getexecname函数

14.5 环境变量

14.5.1 getenv函数

14.5.2 putenv函数

14.6 C程序的内存布局

14.6.1 查找程序中最近的位置

14.7 共享的对象

14.8 内存分配

14.8.1 sbrk函数

14.8.2 brk函数

14.9 setjmp和longjmp函数

14.9.1 自动变量、寄存器变量和易变的变量

14.9.2 _setjmp和_longjmp函数

14.9.3 使用自动变量时的常见错误

14.10 资源限制

14.11 小结

练习

第15章 进程控制

15.1 引言

15.2 进程标识符

15.2.1 getpid函数

15.2.2 getppid函数

15.3 fork和forkl函数

15.3.1 通过fork的文件共享

15.4 vfork函数

15.5 exit和_exit函数

15.6 wait函数

15.7 waitpid函数

15.8 wait3和wait4函数

15.9 waitid函数

15.10 竞争条件

15.11 exec函数

15.11.1 execl函数

15.11.2 execv函数

15.11.3 execle函数

15.11.4 execve函数

15.11.5 execlp函数

15.11.6 execvp函数

15.11.7 exec函数的总结

15.12 解释程序文件

15.13 system函数

15.14 进程记帐

15.15 小结

练习

第16章 进程关系

16.1 引言

16.2 终端登录

16.3 网络登录

16.4 进程组

16.4.1 创建或连接进程组

16.5 会话

16.5.1 创建新的会话

16.6 控制终端

16.7 tcgetpgrp和tcsetpgrp函数

16.8 tcgetsid函数

16.9 作业控制

16.10 程序的外壳执行

16.11 孤立的进程组

16.12 小结

练习

第17章 信号

17.1 引言

17.2 信号概念

17.3 signal函数

17.3.1 进程启动

17.4 不可靠的信号

17.5 可靠的信号

17.6 sigset函数

17.7 pause函数

17.8 sighold、sigrelse、sigignore和sigpause函数

17.9 中断的系统调用

17.10 可重入函数

17.11 比较SIGCHLD和SIGCLD信号

17.12 kill、killpg、raise、sigsend和sigsendset函数

17.12.1 kill函数

17.12.2 killpg函数

17.12.3 raise函数

17.12.4 sigsend和sigsendset函数

17.13 alarm函数

17.14 间隔计时器

17.15 POSIX信号

17.16 信号集

17.17 sigprocmask函数

17.18 sigpending函数

17.19 sigaction函数

17.20 sigfpe函数

17.21 sigsetjmp和siglongjmp函数

17.22 sigsuspend函数

17.23 sigwait函数

17.24 abort函数

17.25再谈system函数

17.26 重新审视sleep函数

12.27 作业控制信号

17.28 软件信号

17.29 备选信号栈

17.30 系统信号消息

17.31 sig2str和str2sig函数

17.32 小结

练习

第18章 守护进程

18.1 简介

18.2 守护程序的特性

18.3 错误日志

18.4 STREAMS log驱动器

18.5 syslog工具

18.6 成为守护程序

18.7仅启动守护程序的一个副本

18.8 结语

练习

第五部分 进程间通信

第19章 使用管道和FIFO的进程间通信

19.1 简介

19.2管道

19.3 popen和pclose函数

19.4 协作进程

19.5 FIFO

19.6 迭代服务器VS并行服务器

19.7 小结

练习

第20章 System V进程间的通信工具

20.1 简介

20.2 System V IPC的概念

20.3 System V消息队列

20.4 System V 信号量集

20.5 System V 共享内存

20.6 性能比较

20.7 小结

练习

第21章 高级进程间通信

21.1 引言

21.2 传递文件描述符

21.3 打开的服务器(版本1)

21.4 客户服务器连接函数

21.5 打开的服务器(版本2)

练习

第22章 门

22.1 引言

22.2 基本门函数

22.3 门信息函数

22.4 门高级功能

22.5 门客户或服务器的提前终止

22.6 小结

第23章 伪终端

23.1 引言

23.2 概述

23.3 打开伪终端设备

23.4 pty_fork函数

23.5 pty程序

23.6 使用pty程序

23.7 高级特征

23.8 小结

练习

附录A 国际化和本地化基本知识

附录B BSD源代码兼容性包

附录C 函数小结

附录D 其他源代码

附录E 部分练习题答案