Neil Matthew 和Richard Stones世界知名的Linux/UNIX专家,有数十年Linux/UNIX开发经验和从业经历。他们使用过几乎所有UNIX版本,并精通C/C++、LISP、Fortran、Perl、Tcl和Prolog等各种语言。他们从事过各种软件项目,从实时嵌入式系统到会计系统和零售信息系统。除本书外,他们还合著了PostgreSQL、MySQL方面的图书。
时至今日,Linux系统已经从一个个人作品发展为可以用于各种关键任务的成熟、高效和稳定的操作系统,因为具备跨平台、开源、支持众多应用软件和网络协议等优点,它得到了各大主流软硬件厂商的支持,也成为广大程序设计人员理想的开发平台。本书是Linux程序设计领域的经典名著,以简单易懂、内容全面和示例丰富而受到广泛好评。中文版前两版出版后,在国内的Linux爱好者和程序员中也引起了强烈反响,这一热潮一直持续至今。本书是国内读者翘首以待的第4版,此次新版内容组织更加严谨,译者更是细心雕琢,保留了这部权威著作的原汁原味。对Linux所提供的功能全面而准确的阐述,以及贯穿全书的示例程序体验,使本书不仅成为初学者的最佳Linux程序设计指南,而且是中高级程序员不可或缺的参考书。
第1章 入门1.1 UNIX、Linux和GNU简介1.1.1 什么是UNIX1.1.2 什么是Linux1.1.3 GNU项目和自由软件基金会1.1.4 Linux发行版1.2 Linux程序设计1.2.1 Linux程序1.2.2 文本编辑器1.2.3 C语言编译器1.2.4 开发系统导引1.3 获得帮助1.4 小结第2章 shell程序设计2.1 为什么使用shell编程2.2 一点哲学2.3 什么是shell2.4 管道和重定向2.4.1 重定向输出2.4.2 重定向输入2.4.3 管道2.5 作为程序设计语言的shell2.5.1 交互式程序2.5.2 创建脚本2.5.3 把脚本设置为可执行2.6 shell的语法2.6.1 变量2.6.2 条件2.6.3 控制结构2.6.4 函数2.6.5 命令2.6.6 命令的执行2.6.7 here文档2.6.8 调试脚本程序2.7 迈向图形化:dialog工具2.8 综合应用2.8.1 需求2.8.2 设计2.8.3 应用程序的说明2.9 小结第3章 文件操作3.1 Linux文件结构3.1.1 目录3.1.2 文件和设备3.2 系统调用和设备驱动程序3.3 库函数3.4 底层文件访问3.4.1 write系统调用3.4.2 read系统调用3.4.3 open系统调用3.4.4 访问权限的初始值3.4.5 其他与文件管理有关的系统调用3.5 标准I/O库3.5.1 fopen函数3.5.2 fread函数3.5.3 fwrite函数3.5.4 fclose函数3.5.5 fflush函数3.5.6 fseek函数3.5.7 fgetc、getc和getchar函数3.5.8 fputc、putc和putchar函数3.5.9 fgets和gets函数3.6 格式化输入和输出3.6.1 printf、fprintf和sprintf函数3.6.2 scanf、fscanf和sscanf函数3.6.3 其他流函数3.6.4 文件流错误3.6.5 文件流和文件描述符3.7 文件和目录的维护3.7.1 chmod系统调用3.7.2 chown系统调用3.7.3 unlink、link和symlink系统调用3.7.4 mkdir和rmdir系统调用3.7.5 chdir系统调用和getcwd函数3.8 扫描目录3.8.1 opendir函数3.8.2 readdir函数3.8.3 telldir函数3.8.4 seekdir函数3.8.5 closedir函数3.9 错误处理3.9.1 strerror函数3.9.2 perror函数3.10 /proc文件系统3.11 高级主题:fcntl和mmap3.11.1 fcntl系统调用3.11.2 mmap函数3.12 小结第4章 Linux环境4.1 程序参数4.1.1 getopt4.1.2 getopt_long4.2 环境变量4.2.1 环境变量的用途4.2.2 environ变量4.3 时间和日期4.4 临时文件4.5 用户信息4.6 主机信息4.7 日志4.8 资源和限制4.9 小结第5章 终端5.1 对终端进行读写5.2 与终端进行对话5.3 终端驱动程序和通用终端接口5.3.1 概述5.3.2 硬件模型5.4 termios结构5.4.1 输入模式5.4.2 输出模式5.4.3 控制模式5.4.4 本地模式5.4.5 特殊控制字符5.4.6 终端速度5.4.7 其他函数5.5 终端的输出5.5.1 终端的类型5.5.2 识别终端类型5.5.3 使用terminfo功能标志5.6 检测击键动作5.7 虚拟控制台5.8 伪终端5.9 小结第6章 使用curses函数库管理基于文本的屏幕6.1 用curses函数库进行编译6.2 curses术语和概念6.3 屏幕6.3.1 输出到屏幕6.3.2 从屏幕读取6.3.3 清除屏幕6.3.4 移动光标6.3.5 字符属性6.4 键盘6.4.1 键盘模式6.4.2 键盘输入6.5 窗口6.5.1 WINDOW结构6.5.2 通用函数6.5.3 移动和更新窗口6.5.4 优化屏幕刷新6.6 子窗口6.7 keypad模式6.8 彩色显示6.9 pad6.10 CD唱片应用程序6.10.1 新CD唱片应用程序的开始部分6.10.2 main函数6.10.3 建立菜单6.10.4 操作数据库文件6.10.5 查询CD数据库6.11 小结第7章 数据管理7.1 内存管理7.1.1 简单的内存分配7.1.2 分配大量的内存7.1.3 滥用内存7.1.4 空指针7.1.5 释放内存7.1.6 其他内存分配函数7.2 文件锁定7.2.1 创建锁文件7.2.2 区域锁定7.2.3 锁定状态下的读写操作7.2.4 文件锁的竞争7.2.5 其他锁命令7.2.6 死锁7.3 数据库7.3.1 dbm数据库7.3.2 dbm例程7.3.3 dbm访问函数7.3.4 其他dbm函数7.4 CD唱片应用程序7.4.1 更新设计7.4.2 使用dbm数据库的CD唱片应用程序7.5 小结第8章 MySQL8.1 安装8.1.1 MySQL软件包8.1.2 安装后的配置8.1.3 安装后的故障修复8.2 MySQL管理8.2.1 命令8.2.2 创建用户并赋予权限8.2.3 密码8.2.4 创建数据库8.2.5 数据类型8.2.6 创建表8.2.7 图形化工具8.3 使用C语言访问MySQL数据8.3.1 连接例程8.3.2 错误处理8.3.3 执行SQL语句8.3.4 更多的函数8.4 CD数据库应用程序8.4.1 创建表8.4.2 添加数据8.4.3 使用C语言访问数据8.5 小结第9章 开发工具9.1 多个源文件带来的问题9.2 make命令和makefile文件9.2.1 makefile的语法9.2.2 make命令的选项和参数9.2.3 makefile文件中的注释9.2.4 makefile文件中的宏9.2.5 多个目标9.2.6 内置规则9.2.7 后缀和模式规则9.2.8 用make管理函数库9.2.9 高级主题:makefile文件和子目录9.2.10 GNU make和gcc9.3 源代码控制9.3.1 RCS9.3.2 SCCS9.3.3 RCS和SCCS的比较9.3.4 CVS9.3.5 CVS的前端程序9.3.6 Subversion9.4 编写手册页9.5 发行软件9.5.1 patch程序9.5.2 其他软件发行工具9.6 RPM软件包9.6.1 使用RPM软件包文件9.6.2 安装RPM软件包9.6.3 创建RPM软件包9.7 其他软件包格式9.8 开发环境9.8.1 KDevelop9.8.2 其他开发环境9.9 小结第10章 调试10.1 错误类型10.2 常用调试技巧10.2.1 有漏洞的程序10.2.2 代码检查10.2.3 取样法10.2.4 程序的受控执行10.3 使用gdb进行调试10.3.1 启动gdb10.3.2 运行一个程序10.3.3 栈跟踪10.3.4 检查变量10.3.5 列出程序源代码10.3.6 设置断点10.3.7 用调试器打补丁10.3.8 深入学习gdb10.4 其他调试工具10.4.1 lint:清理程序中的“垃圾”10.4.2 函数调用工具10.4.3 用prof/gprof产生执行存档10.5 断言10.6 内存调试10.6.1 ElectricFence函数库10.6.2 valgrind10.7 小结第11章 进程和信号11.1 什么是进程11.2 进程的结构11.2.1 进程表11.2.2 查看进程11.2.3 系统进程11.2.4 进程调度11.3 启动新进程11.3.1 等待一个进程11.3.2 僵尸进程11.3.3 输入和输出重定向11.3.4 线程11.4 信号11.4.1 发送信号11.4.2 信号集11.5 小结第12章 POSIX线程12.1 什么是线程12.2 线程的优点和缺点12.3 第一个线程程序12.4 同时执行12.5 同步12.5.1 用信号量进行同步12.5.2 用互斥量进行同步12.6 线程的属性12.7 取消一个线程12.8 多线程12.9 小结第13章 进程间通信:管道13.1 什么是管道13.2 进程管道13.3 将输出送往popen13.3.1 传递更多的数据13.3.2 如何实现popen13.4 pipe调用13.5 父进程和子进程13.5.1 管道关闭后的读操作13.5.2 把管道用作标准输入和标准输出13.6 命名管道:FIFO13.6.1 访问FIFO文件13.6.2 高级主题:使用FIFO的客户/服务器应用程序13.7 CD数据库应用程序13.7.1 目标13.7.2 实现13.7.3 客户接口函数13.7.4 服务器接口server.c13.7.5 管道13.7.6 对CD数据库应用程序的总结13.8 小结第14章 信号量、共享内存和消息队列14.1 信号量14.1.1 信号量的定义14.1.2 一个理论性的例子14.1.3 Linux的信号量机制14.1.4 使用信号量14.2 共享内存14.2.1 shmget函数14.2.2 shmat函数14.2.3 shmdt14.2.4 shmctl14.3 消息队列14.3.1 msgget函数14.3.2 msgsnd函数14.3.3 msgrcv函数14.3.4 msgctl函数14.4 CD数据库应用程序14.4.1 修改服务器函数14.4.2 修改客户函数14.5 IPC状态命令14.5.1 显示信号量状态14.5.2 显示共享内存状态14.5.3 显示消息队列状态14.6 小结第15章 套接字15.1 什么是套接字15.2 套接字连接15.2.1 套接字属性15.2.2 创建套接字15.2.3 套接字地址15.2.4 命名套接字15.2.5 创建套接字队列15.2.6 接受连接15.2.7 请求连接15.2.8 关闭套接字15.2.9 套接字通信15.2.10 主机字节序和网络字节序15.3 网络信息15.3.1 因特网守护进程(xinetd/inetd)15.3.2 套接字选项15.4 多客户15.4.1 select系统调用15.4.2 多客户15.5 数据报15.6 小结第16章 用GTK+进行GNOME编程16.1 X视窗系统简介16.1.1 X服务器16.1.2 X客户端16.1.3 X协议16.1.4 Xlib库16.1.5 X工具包16.1.6 窗口管理器16.1.7 创建GUI的其他方法——平台无关的窗囗API16.2 GTK+简介16.2.1 GLib类型系统16.2.2 GTK+对象系统16.2.3 GNOME简介16.2.4 安装GNOME/GTK+开发库16.3 事件、信号和回调函数16.4 组装盒构件16.5 GTK+构件16.5.1 GtkWindow16.5.2 GtkEntry16.5.3 GtkSpinButton16.5.4 GtkButton16.5.5 GtkTreeView16.6 GNOME构件16.7 GNOME菜单16.8 对话框16.8.1 GtkDialog16.8.2 模式对话框16.8.3 非模式对话框16.8.4 GtkMessageDialog16.9 CD数据库应用程序16.10 小结第17章 用Qt进行KDE编程17.1 KDE和Qt简介17.2 安装Qt17.3 信号和槽17.4 Qt构件17.4.1 QLineEdit17.4.2 Qt按钮17.4.3 QComboBox17.4.4 QListView17.5 对话框17.5.1 QDialog17.5.2 QMessageBox17.5.3 QInputDialog17.5.4 使用qmake简化makefile文件的编写17.6 KDE的菜单和工具栏17.7 使用KDE/Qt编写CD数据库应用程序17.7.1 主窗口17.7.2 AddCdDialog17.7.3 LogonDialog17.7.4 main.cpp17.8 小结第18章 Linux标准18.1 C编程语言18.1.1 发展历史简介18.1.2 GNU编译器集18.1.3 gcc选项18.2 接口和LSB18.2.1 LSB标准函数库18.2.2 LSB用户和组18.2.3 LSB系统初始化18.3 文件系统层次结构标准18.4 更多标准18.5 小结
评论关闭。