Linux系统编程(第2版)

Linux系统编程(第2版) pdf epub mobi txt 电子书 下载 2025

[美] Robert Love 著,祝洪凯,李妹芳,付途 译
图书标签:
  • Linux
  • 系统编程
  • C语言
  • Unix
  • 内核
  • API
  • POSIX
  • 网络编程
  • 进程管理
  • 内存管理
  • 文件系统
想要找书就要到 新城书站
立刻按 ctrl+D收藏本页
你会得到大惊喜!!
出版社: 人民邮电出版社
ISBN:9787115346353
版次:2
商品编码:11448626
品牌:异步图书
包装:平装
开本:16开
出版时间:2014-04-01
用纸:胶版纸
页数:420
字数:450000
正文语种:中文

具体描述

内容简介

  系统编程是指编写系统软件,其代码在底层运行,直接跟内核和核心系统库对话。
  《Linux系统编程(第2版)》是一本关于Linux系统编程的教程,也是一本介绍Linux系统调用的手册,还是一本如何实现更优雅更快代码的内幕指南。《Linux系统编程(第2版)》分为11章和2个附录,详细介绍了Linux系统编程基本概念、文件I/O、缓冲I/O、高级文件I/O、进程管理、高级进程管理、线程、文件和目录管理、信号和时间等主题。附录给出了gcc和GNU C提供的很多语言扩展,以及推荐阅读的相关书目。

目录

第1章 入门和基本概念
1.1 系统编程
1.1.1 为什么要学习系统编程
1.1.2 系统编程的基础
1.1.3 系统调用
1.1.4 C库
1.1.5 C编译器
1.2 API和ABI
1.2.1 API
1.2.2 ABI
1.3 标准
1.3.1 POSIX和SUS的历史
1.3.2 C语言标准
1.3.3 Linux和标准
1.3.4 本书和标准
1.4 Linux编程的概念
1.4.1 文件和文件系统
1.4.2 进程
1.4.3 用户和组
1.4.4 权限
1.4.5 信号
1.4.6 进程间通信
1.4.7 头文件
1.4.8 错误处理

第2章 文件I/O
2.1 打开文件
2.1.1 系统调用open
2.1.2 新建文件的所有者
2.1.3 新建文件的权限
2.1.4 creat()函数
2.1.5 返回值和错误码
2.2 通过read()读文件
2.2.1 返回值
2.2.2 读入所有字节
2.2.3 非阻塞读
2.2.4 其他错误码
2.2.5 read()调用的大小限制
2.3 调用write()写
2.3.1 部分写(Partial Write)
2.3.2 Append(追加)模式
2.3.3 非阻塞写
2.3.4 其他错误码
2.3.5 write()大小限制
2.3.6 write()行为
2.4 同步I/O
2.4.1 fsync()和fdatasync()
2.4.2 sync()
2.4.3 O_SYNC标志位
2.4.4 O_DSYNC和O_RSYNC
2.5 直接I/O
2.6 关闭文件
2.7 用lseek()查找
2.7.1 在文件末尾后查找
2.7.2 错误码
2.7.3 限制
2.8 定位读写
2.9 文件截短
2.10 I/O多路复用
2.10.1 select()
2.10.2 poll()
2.10.3 poll()和select()的区别
2.11 内核内幕
2.11.1 虚拟文件系统
2.11.2 页缓存
2.11.3 页回写
2.12 结束语

第3章 缓冲I/O
3.1 用户缓冲I/O
3.2 标准I/O
3.3 打开文件
3.4 通过文件描述符打开流
3.5 关闭流
3.6 从流中读数据
3.6.1 每次读取一个字节
3.6.2 每次读一行
3.6.3 读二进制文件
3.7 向流中写数据
3.7.1 写入单个字符
3.7.2 写入字符串
3.7.3 写入二进制数据
3.8 缓冲I/O示例程序
3.9 定位流
3.10 Flush(刷新输出)流
3.11 错误和文件结束
3.12 获取关联的文件描述符
3.13 控制缓冲
3.14 线程安全
3.14.1 手动文件加锁
3.14.2 对流操作解锁
3.15 对标准I/O的批评
3.16 结束语

第4章 高级文件I/O
4.1 分散/聚集I/O
4.2 Event Poll
4.2.1 创建新的epoll实例
4.2.2 控制epoll
4.2.3 等待epoll事件
4.2.4 边缘触发事件和条件触发事件
4.3 存储映射
4.3.1 mmap()
4.3.2 munmap()
4.3.3 存储映射实例
4.3.4 mmap()的优点
4.3.5 mmap()的不足
4.3.6 调整映射的大小
4.3.7 改变映射区域的权限
4.3.8 通过映射同步文件
4.3.9 给出映射提示
4.4 普通文件I/O提示
4.4.1 系统调用posix_fadvise()
4.4.2 readahead()系统调用
4.4.3 “经济实用”的操作提示
4.5 同步(Synchronized),同步(Synchronous)
及异步(Asynchronous)操作
4.6 I/O调度器和I/O性能
4.6.1 磁盘寻址
4.6.2 I/O调度器的功能
4.6.3 改进读请求
4.6.4 选择和配置你的I/O调度器
4.6.5 优化I/O性能
4.7 结束语

第5章 进程管理
5.1 程序、进程和线程
5.2 进程ID
5.2.1 分配进程ID
5.2.2 进程体系
5.2.3 pid_t
5.2.4 获取进程ID和父进程ID
5.3 运行新进程
5.3.1 exec系统调用
5.3.2 fork()系统调用
5.4 终止进程
5.4.1 终止进程的其他方式
5.4.2 atexit()
5.4.3 on_exit()
5.4.4 SIGCHLD
5.5 等待子进程终止
5.5.1 等待特定进程
5.5.2 等待子进程的其他方法
5.5.3 BSD中的wait3()和wait4()
5.5.4 创建并等待新进程
5.5.5 僵尸进程
5.6 用户和组
5.6.1 改变实际用户/组ID和保留的用户/组ID
5.6.2 改变有效的用户ID或组ID
5.6.3 BSD改变用户ID和组ID的方式
5.6.4 HP-UX中改变用户ID和组ID的方式
5.6.5 操作用户ID/组ID的首选方法
5.6.6 对保留的用户ID的支持
5.6.7 获取用户ID和组ID
5.7 会话(Session)和进程组
5.7.1 与会话相关的系统调用
5.7.2 与进程组相关的系统调用
5.7.3 废弃的进程组函数
5.8 守护进程
5.9 结束语

第6章 高级进程管理
6.1 进程调度
6.1.1 时间片
6.1.2 I/O约束型进程和处理器约束型进程
6.1.3 抢占式调度
6.2 完全公平调度器
6.3 让出处理器
6.4 进程优先级
6.4.1 nice()
6.4.2 getpriority()和setpriority()
6.4.3 I/O优先级
6.5 处理器亲和力(Affinity)
6.6 实时系统
6.6.1 硬实时系统和软实时系统
6.6.2 延迟、抖动和截止期限
6.6.3 Linux的实时支持
6.6.4 Linux调度策略和优先级
6.6.5 设置调度参数
6.6.6 sched_rr_get_interval()
6.6.7 关于实时进程的注意事项
6.6.8 确定性
6.7 资源限制
6.7.1 限制项
6.7.2 获取和设置资源限制

第7章 线程
7.1 二进制程序、进程和线程
7.2 多线程
7.2.1 多线程代价
7.2.2 其他选择
7.3 线程模型
7.3.1 用户级线程模型
7.3.2 混合式线程模型
7.3.3 协同程序
7.4 线程模式
7.4.1 每个连接对应一个线程
7.4.2 事件驱动的线程模式
7.5 并发性、并行性和竞争
7.6 同步
7.6.1 互斥
7.6.2 死锁
7.7 Pthreads
7.7.1 Linux线程实现
7.7.2 Pthread API
7.7.3 链接Pthreads
7.7.4 创建线程
7.7.5 线程ID
7.7.6 终止线程
7.7.7 join(加入)线程和detach(分离)线程
7.7.8 线程编码实例
7.7.9 Pthread互斥
7.8 进一步研究

第8章 文件和目录管理
8.1 文件及其元数据
8.1.1 一组stat函数
8.1.2 权限
8.1.3 所有权
8.1.4 扩展属性
8.1.5 扩展属性操作
8.2 目录
8.2.1 获取当前工作目录
8.2.2 创建目录
8.2.3 删除目录
8.2.4 读取目录内容
8.3 链接
8.3.1 硬链接
8.3.2 符号链接
8.3.3 解除链接
8.4 拷贝和移动文件
8.4.1 拷贝
8.4.2 移动
8.5 设备节点
8.5.1 特殊设备节点
8.5.2 随机数生成器
8.6 带外通信(Out-of-Band Communication)
8.7 监视文件事件
8.7.1 初始化inotify
8.7.2 监视
8.7.3 inotify事件
8.7.4 高级监视选项
8.7.5 删除inotify监视
8.7.6 获取事件队列大小
8.7.7 销毁inotify实例
……
第9章 内存管理
第10章 信号
第11章 时间
附录A C语言的GCC扩展
附录B 参考书目

前言/序言


深入探索,掌控一切:现代软件开发者的必备指南 在飞速发展的数字时代,软件开发已成为推动社会进步的核心力量。而支撑起无数高性能、高可靠性应用的基石,往往隐藏在操作系统深邃的内核之中。对于渴望精进技艺、驾驭底层力量的开发者而言,理解并运用操作系统的系统调用,无疑是迈向更高阶的关键一步。本书正是为怀揣此目标的您量身打造,它将带领您深入Linux系统的方方面面,助您从使用者蜕变为一名能够深入理解并高效操控系统资源的软件架构师。 本书并非对某个特定应用程序或库的浅尝辄止,而是致力于为您构建一个坚实而全面的Linux系统编程知识体系。我们将从最基础的视角出发,逐步揭示Linux系统中那些至关重要的接口和机制,让您明白程序是如何与硬件交互、如何管理进程、如何处理数据流、以及如何构建安全可靠的应用程序。 核心概念的深度解析: 在本书的开篇,我们将首先聚焦于Linux系统编程的基石——系统调用。这不仅仅是函数调用的简单集合,而是用户空间程序与内核空间进行交互的唯一途径。我们将详细剖析不同类型的系统调用,例如: 文件I/O系统调用: `open`、`read`、`write`、`close`、`lseek` 等,我们将探讨文件的概念、文件描述符的工作原理,以及如何在不同场景下高效、安全地进行文件读写操作。从字节流到目录的遍历,从文件权限的管理到硬链接与符号链接的创建,您将学会如何细致地控制数据的存储和访问。 进程管理系统调用: `fork`、`execve`、`wait`、`exit`、`getpid`、`getppid` 等,理解进程的概念是掌握多任务操作系统的关键。本书将深入讲解进程的创建、销毁、状态切换,以及父子进程之间的通信机制。您将学会如何启动新的程序,如何等待子进程完成,以及如何获取进程相关的各种信息。 内存管理系统调用: `mmap`、`munmap`、`brk` 等,内存是程序运行的战场。我们将探讨虚拟内存的概念,以及用户程序如何通过系统调用来申请、映射和释放内存。理解`mmap`的强大之处,例如文件映射、匿名映射,将极大地拓展您处理大量数据的能力。 进程间通信(IPC)机制: 除了基本的信号量和管道,本书还将深入探讨更高级的IPC机制,如System V IPC(消息队列、共享内存、信号量)和POSIX IPC(POSIX消息队列、POSIX共享内存、POSIX信号量)。您将学会如何在独立的进程之间安全、高效地传递数据和同步操作,为构建分布式系统和复杂应用打下基础。 线程编程: 随着多核处理器的普及,线程已成为提高程序并发性和性能的关键。我们将深入介绍POSIX Threads (pthreads) 库,包括线程的创建、同步(互斥量、条件变量、信号量)、销毁以及线程安全的概念。您将学会如何编写高效的多线程程序,避免常见的并发问题。 网络编程: 互联网的兴起使得网络编程成为现代软件开发不可或缺的一部分。本书将系统地介绍BSD sockets API,从基本的TCP/IP套接字编程开始,涵盖客户端-服务器模型、UDP通信、套接字选项的配置,以及更高级的网络协议(如HTTP)的实现思路。您将能够构建能够跨网络通信的应用程序。 信号处理: 信号是Linux系统中用于进程间异步通信的一种机制。我们将详细讲解不同类型的信号,以及如何使用`signal`和`sigaction`等系统调用来捕获和处理信号。理解信号机制对于编写健壮、能够响应外部事件的程序至关重要。 定时器和时间管理: 程序往往需要执行定时任务或精确测量时间。我们将介绍各种定时器机制,如`alarm`、`setitimer`、`timer_create`,以及如何使用`gettimeofday`、`clock_gettime`等函数来获取和处理时间信息。 超越 API 的深度洞察: 本书的价值不仅在于罗列和讲解API,更在于深入剖析这些API背后的工作原理和设计哲学。我们将: 探讨内核与用户空间的边界: 深入理解系统调用如何跨越用户空间和内核空间的鸿沟,以及这种边界带来的安全和性能考量。 揭示底层数据结构: 了解文件描述符表、进程控制块(PCB)、内存映射区域(VMA)等内核数据结构的内部表示,将帮助您更深刻地理解系统行为。 分析性能优化技巧: 通过理解系统调用在内核中的实现,您可以发现性能瓶颈,并学习如何通过选择合适的系统调用、优化数据访问模式来提升应用程序的效率。 关注健壮性和错误处理: 掌握如何正确处理系统调用的返回值和设置`errno`,以及如何利用信号和异常处理机制来编写健壮、能够优雅处理错误的程序。 讲解安全编程实践: 在理解系统调用后,您将能更好地识别潜在的安全漏洞,例如缓冲区溢出、权限绕过等,并学习如何编写更安全的代码。 实践出真知:动手构建您的系统工具 理论知识的学习离不开大量的实践。本书将贯穿丰富的代码示例,涵盖各种实际的编程场景。这些示例不仅仅是功能的堆砌,而是精心设计的,旨在帮助您: 理解API的实际应用: 通过阅读和运行示例代码,您将直观地看到每个系统调用是如何被使用的,以及它们在实际场景中扮演的角色。 掌握调试技巧: 学习如何使用`gdb`等调试工具来跟踪程序执行,查看变量值,理解系统调用在执行过程中的细节。 构建自己的系统工具: 您将有机会根据书中提供的思路和示例,动手编写自己的系统管理工具,例如简单的日志系统、进程监视器、文件复制工具等,从而加深对系统编程的理解。 本书的受众: 本书适合以下人群: 有一定C语言基础的开发者: 熟悉C语言是理解系统调用和内核接口的基础。 想要深入理解Linux操作系统原理的程序员: 无论是应用开发者、系统管理员还是嵌入式工程师,本书都能为您提供宝贵的洞察。 希望提升程序性能和可靠性的开发者: 掌握系统编程是优化和构建高稳定性应用的必经之路。 对底层技术充满好奇心的学习者: 如果您渴望了解程序是如何在操作系统上运行的,那么这本书将是您的理想选择。 展望未来: 掌握Linux系统编程,意味着您将拥有驾驭复杂系统、构建高性能应用的能力。您将不再是被动的程序使用者,而是能够主动去理解、去优化、去创造的工程师。本书将为您铺就这条通往精通之路,为您打开一扇通往更广阔技术视野的大门。准备好迎接挑战,深入探索Linux系统的每一个角落,掌控您的软件开发生涯吧!

用户评价

评分

作为一名软件架构师,我需要对底层系统有足够深入的理解,才能设计出高效、稳定、可扩展的系统。在阅读《Linux系统编程(第2版)》之前,我虽然接触过Linux,但对它的系统调用层面总觉得隔靴搔痒。《Linux系统编程(第2版)》这本书,就像一把钥匙,为我打开了Linux系统编程的殿堂。它不仅详细讲解了Linux内核的接口,还深入剖析了各个系统调用的实现原理和应用场景。书中对于进程间通信(IPC)的讲解尤为精彩,从最基础的管道到更复杂的 POSIX IPC,都讲解得非常透彻,并且提供了很多实用的技巧。我特别欣赏书中对网络编程的详尽阐述,从 socket 的创建到 TCP/UDP 的通信,再到阻塞与非阻塞 I/O 的处理,都给出了清晰的解释和示例。这些内容对于我设计高性能的网络服务至关重要。读完这本书,我对Linux系统调用的理解上升到了一个全新的高度,这极大地帮助我优化了现有系统的性能瓶颈,并为我设计更复杂的分布式系统提供了坚实的理论和实践基础。

评分

我是一名正在学习嵌入式开发的工程师,Linux系统是我的主要开发环境。在此之前,我对Linux的系统调用层面的知识了解得比较零散,很多时候都是在项目紧的时候临时抱佛脚,效果不尽如人意。《Linux系统编程(第2版)》这本书,可以说是为我量身打造的。它系统地梳理了Linux系统编程的方方面面,从最基础的进程管理,到复杂的网络 socket 编程,都讲解得鞭辟入里。书中对于一些经典的IPC机制,比如消息队列、共享内存、信号量等,都给出了非常清晰的讲解和代码示例,让我能够真正理解它们是如何工作的,以及在实际项目中如何选择和使用。更难得的是,这本书并没有停留在理论层面,而是通过大量的实战案例,展示了如何将这些系统调用技巧应用于解决实际问题。我尤其对书中关于多线程并发编程和信号处理的部分印象深刻,这些内容对于我开发稳定可靠的嵌入式系统至关重要。通过阅读这本书,我的Linux系统编程能力得到了质的飞跃,为我后续更深入的嵌入式系统开发打下了坚实的基础。

评分

说实话,我一开始是被这本书的厚度给吓到了,但真正翻开之后,就彻底被吸引住了。《Linux系统编程(第2版)》这本书的内容非常丰富,但组织得非常有条理。它从最基础的Linux文件系统I/O讲起,逐步深入到进程管理、线程控制、信号处理、内存管理等各个方面。我之前写C语言程序的时候,经常会遇到一些难以排查的bug,很多时候都跟系统调用使用不当有关。这本书为我提供了非常系统化的解决方案。它不仅讲解了每个系统调用的基本用法,还详细说明了它们的工作原理、潜在的陷阱以及如何进行错误处理。书中提供的代码示例也都很经典,可以直接拿来参考和学习。尤其让我印象深刻的是,书中对同步机制的讲解,包括互斥锁、条件变量、信号量等,都非常细致,让我能够更好地理解和编写多线程程序。总而言之,这是一本非常扎实、非常有用的Linux系统编程参考书,强烈推荐给所有想要提升C/C++开发能力的开发者。

评分

这本书对我来说,简直是一次“拨云见日”的体验。我一直对Linux的底层运行机制非常好奇,特别是那些驱动着应用程序运行的系统调用。《Linux系统编程(第2版)》这本书,以一种非常系统和深入的方式,解答了我一直以来的疑问。它不仅仅是简单地罗列API,而是真正地剖析了Linux系统调用的本质,以及它们是如何与内核交互的。我特别喜欢书中关于内存管理和进程同步的章节,这些内容对于理解程序的行为和性能至关重要。书中还详细讲解了各种进程间通信(IPC)的机制,这对于开发分布式系统或者需要多个进程协同工作的应用程序来说,简直是宝藏。我之前对这些IPC机制的理解一直比较模糊,通过这本书的学习,我才真正明白了它们的工作原理和适用场景。这本书的语言清晰流畅,即使是复杂的概念,也能被解释得明明白白,而且还配有大量的代码示例,帮助读者更好地理解和实践。可以说,这本书彻底改变了我对Linux系统编程的看法,让我能够更自信地进行底层开发。

评分

这本《Linux系统编程(第2版)》简直是我的救星!我之前写C++程序的时候,总觉得对底层的系统调用理解不够透彻,很多时候只能靠查阅API文档,效率低下不说,还容易踩坑。这本书的出现,彻底改变了我的编程习惯。它深入浅出地讲解了Linux系统中进程、线程、信号、IPC(进程间通信)、文件I/O、网络编程等核心概念,并且提供了大量贴近实际的示例代码。我尤其喜欢它对各个系统调用的详细解释,包括它们的工作原理、参数含义、返回值以及可能出现的错误。书中的图示也非常精炼,帮助我直观地理解了一些复杂的概念,比如多线程的同步与互斥,或者管道的实现机制。读完这本书,我感觉自己对Linux底层有了全新的认识,写起程序来也更加得心应手,代码的健壮性和效率都有了显著提升。如果说之前我是在“使用”Linux,那么读了这本书,我感觉自己是在“驾驭”Linux。对于任何想要深入理解Linux系统并提升编程技能的开发者来说,这本书绝对是必不可少的参考。

评分

都是在jd买书 质量很好

评分

很不错,京东买书很实惠。很满意。

评分

还不错,买来还没细看,大致翻了下,可以作为入门和进阶用

评分

很不错,适合入门

评分

书还是挺不错的,还没看,希望有能力提升。

评分

送货快,内容很好!

评分

值得一读,对于长期做windows开发的,可以解除一个不一样的世界。

评分

朋友推荐的。。不错的书。。

评分

字数补丁,字数补丁,字数补丁

相关图书

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 book.cndgn.com All Rights Reserved. 新城书站 版权所有