标签分类
当前位置:首页 > 操作系统电子书 > Linux电子书网盘下载
Linux系统编程 Linux系统编程
「已注销」

「已注销」 提供上传

资源
40
粉丝
46
喜欢
193
评论
18

    Linux系统编程 PDF 高清第2版

    Linux电子书
    • 发布时间:

    给大家带来的一篇关于Linux相关的电子书资源,介绍了关于Linux、系统编程方面的内容,本书是由人民邮电出版社出版,格式为PDF,资源大小2.1 MB,Robert Love编写,目前豆瓣、亚马逊、当当、京东等电子书综合评分为:8.2,更多相关的学习资源可以参阅 操作系统电子书Linux视频、等栏目。

  • Linux系统编程 PDF 下载
  • 下载地址:https://pan.baidu.com/s/10NvTgei7DtjJSrBPT6iHyQ
  • 分享码:uni2
  • Linux系统编程 PDF

    这书详尽论述了怎样撰写与Linux核心及其关键系统软件库出示的服务项目立即有关的手机软件。在这里这书中,Linux核心推动者Robert Love全方位论述了Linux系统软件程序编写,具体指导怎样开展Linux系统调用,并从权威专家视角剖析怎样撰写更雅致、运作迅速的编码。
    这书创作者对POSIX规范涵数和Linux出示的某些特殊服务项目十分掌握。这书第2版增加了章节专业详细介绍多核,它是对第1版的升级和拓展,一起这书从基础理论和运用视角详细分析Linux,涉及到的程序编写主题风格很广,包含下列精彩文章: 

    1. Linux核心、C库和Cc语言编译器概览; 

    2. 基本I/O实际操作,如文档读写能力; 

    3. 高級I/O插口、运行内存投射及其开发技术; 

    4. 有关基础流程管理的系统调用; 

    5. 高級进程管理,包含即时系统进程; 

    6. 进程定义,多线程编程和Pthreads; 

    7. 文档和文件目录管理方法; 

    8. 运行内存分派和提升运行内存浏览有关的插口; 

    9. 基础的和高級的数据信号插口,以及在系统软件中的功效; 

    10. 数字时钟管理方法,包含POSIX数字时钟和高精记时器。

    系统软件程序编写就是指撰写操作系统,其编码在最底层运作,立即跟核心和关键系统软件库会话。《Linux系统软件程序编写(第2版)》是1本有关Linux系统软件程序编写的实例教程,都是1本详细介绍Linux系统软件程序编写的指南,還是1本怎样保持更雅致迅速编码的内情手册。全书分成11章和2个附则,详解了Linux系统软件程序编写基本要素、文档I/O、缓存I/O、高級文档I/O、进程管理、高級进程管理、进程、文档和文件目录管理方法、数据信号和時间等主题风格。附则得出了gcc和GNU C出示的许多語言拓展,及其阅读推荐的有关推荐书目。《Linux系统软件程序编写(第2版)》的创作者是著名的Linux核心权威专家,多本热销技术性书籍的创作者。《Linux系统软件程序编写(第2版)》必须在C程序编写和Linux程序编写自然环境下工作中的程序猿阅读文章,针对愿意推进基本或掌握核心的高級软件程序员,《Linux系统软件程序编写(第2版)》也很有实用价值。

    目录

    • 第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章 内存管理 
    • 9.1 进程地址空间 
    • 9.1.1 页和页面调度 
    • 9.1.2 内存区域 
    • 9.2 动态内存分配 
    • 9.2.1 数组分配 
    • 9.2.2 调整已分配内存大小 
    • 9.2.3 释放动态内存 
    • 9.2.4 对齐 
    • 9.3 数据段的管理 
    • 9.4 匿名内存映射 
    • 9.4.1 创建匿名内存映射 
    • 9.4.2 映射到设备文件/dev/zero 
    • 9.5 高级内存分配 
    • 9.5.1 调试内存分配 
    • 9.5.2 获取统计信息 
    • 9.6 基于栈的分配 
    • 9.6.1 把字符串复制到栈中 
    • 9.6.2 变长数组 
    • 9.7 选择合适的内存分配机制 
    • 9.8 内存操作 
    • 9.8.1 字节设置 
    • 9.8.2 字节比较 
    • 9.8.3 字节移动 
    • 9.8.4 字节查找 
    • 9.8.5 字节加密 
    • 9.9 内存锁定 
    • 9.9.1 锁定部分地址空间 
    • 9.9.2 锁定全部地址空间 
    • 9.9.3 内存解锁 
    • 9.9.4 锁的限制 
    • 9.9.5 该页在物理内存中吗 
    • 9.10 投机性内存分配策略 
    • 第10章 信号 
    • 10.1 信号相关的概念 
    • 10.1.1 信号标识符 
    • 10.1.2 Linux支持的信号 
    • 10.2 基本信号管理 
    • 10.2.1 等待信号 
    • 10.2.2 示例 
    • 10.2.3 执行和继承 
    • 10.2.4 把信号编号映射为字符串 
    • 10.3 发送信号 
    • 10.3.1 权限 
    • 10.3.2 示例 
    • 10.3.3 给进程本身发送信号 
    • 10.3.4 给整个进程组发送信号 
    • 10.4 重入 
    • 10.5 信号集 
    • 10.5.1 更多的信号集函数 
    • 10.5.2 获取待处理信号 
    • 10.5.3 等待信号集 
    • 10.6 高级信号管理 
    • 10.6.1 结构体siginfo_t 
    • 10.6.2 si_code的相关说明 
    • 10.6.3 发送带附加信息(payload)的信号 
    • 10.6.4 示例 
    • 10.7 信号是个UNIX“瑕疵”吗 
    • 第11章 时间 
    • 11.1 时间的数据结构 
    • 11.1.1 原始表示 
    • 11.1.2 微秒级精度 
    • 11.1.3 更精确的:纳秒级精度 
    • 11.1.4 对时间进行分解 
    • 11.1.5 进程时间类型 
    • 11.2 POSIX时钟 
    • 11.3 时间源精度 
    • 11.4 取得当前时间 
    • 11.4.1 更好的接口 
    • 11.4.2 高级接口 
    • 11.4.3 获取进程时间 
    • 11.5 设置当前时间 
    • 11.5.1 设置支持高精度的时间 
    • 11.5.2 设置时间的高级接口 
    • 11.6 玩转时间 
    • 11.7 睡眠和等待 
    • 11.7.1 以微秒级精度睡眠 
    • 11.7.2 以纳秒级精度睡眠 
    • 11.7.3 实现睡眠的高级方法 
    • 11.7.4 sleep的可移植实现 
    • 11.7.5 超时(Overrun) 
    • 11.7.6 睡眠的其他方式 
    • 11.8 定时器 
    • 11.8.1 简单的闹钟 
    • 11.8.2 计时器(interval timer) 
    • 11.8.3 高级定时器 
    • 附录A C语言的GCC扩展 
    • 附录B 参考书目

    上一篇:UNIX环境高级编程  下一篇:Linux内核设计与实现

    展开 +

    收起 -

    码小辫二维码
     ←点击下载即可登录

    Linux相关电子书
    学习笔记
    网友NO.879397

    linux 下配置安装mysql以及配置【经验】

    在linux系统下学习 MySQL ,第一道坎就是如何在linux下安装和配置mysql。这种一劳永逸的事,我们就有耐心的做好。 系统版本:ubuntu14.04 mysql版本:mysql-server-5.5 mysql-client-5.5 先检查是否已经安装了mysql,(Ctrl+Alt+T)终端输入命令: sudo netstat -tap|grep mysql 若无反应,或没有显示安装成功的信息,则表示没有安装。 下面来开始我们的安装工作。 解决第一难: 1,安装命令: sudo apt-get install mysql-server mysql-client 【对于新用户可能出现】: 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是 因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件 包尚未被创建或是它们已被从新到(Incoming)目录移出。 下列信息可能会对解决问题有所帮助: 下列软件包有未满足的依赖关系: mysql-client : 依赖: mysql-client-5.5 但是它将不会被安装 mysql-server : 依赖: mysql-server-5.5 但是它将不会被安装 E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。 【解决办法】:sudo apt-get install mysql-client-core-5.5 如果没有安装,则安装MySQL. sudo apt-get install mysql-server mysql-client 在此安装过程中会让你输入root用户(管理M……

    网友NO.471694

    linux下mysql 5.1 和 5.7的安装教程

    以下内容的操作系统为:centos 6.7 yum安装mysql 5.1.73 卸载系统自带的mysql 执行以下命令查看是否有自带mysql: rpm -qa | grep mysql 如果发现有输出结果,那么执行以下命令依次删除: rpm -e **** --nodeps 开始安装mysql 首先安装mysql客户端: yum install mysql 然后安装mysql服务端: yum install mysql-server yum install mysql-devel 至此mysql相关组件已经安装成功! 修改字符集 mysql的配置文件路径为: /etc/my.cnf 在配置文件中加入如下配置来修改字符集: default-character-set=utf8 启动和停止 执行如下命令来启动: service mysqld start 停止的命令为: service mysqld stop 启动结果如下则启动成功: 将mysql加入开机启动 加入开机启动后,下次再重启机器就不用手动启动mysql服务了: chkconfig --level 345 mysqld on 执行后,查看结果,执行命令: chkconfig --list | grep mysql 结果如下,则证明加入开机启动成功: 配置初始密码 执行如下命令来设置root的初始密码: mysqladmin -u root password yourPassword 登陆mysql 利用root和上一步中设置的密码,进行登陆,执行: mysql -u root -p 如下,则登陆成功: 允许远程登录 执行sql: GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'yourpasswd' WITH GRANT OPTION;FLUSH RIVILEGES; 执行结束后,分别在localhost和任意远程主机测试是否可以登录即可! mysql 5.7.19安装 此版本的mysql需要glibc14支持,但是centos 6.7只能支持到……

    网友NO.203628

    Linux 安装JDK Tomcat MySQL的教程(使用Mac远程访问)

    一 环境 阿里云服务器: CentOS 7.4 64位(基于RedHat) 本机: macOS High Sierra 二 压缩包 JDK http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Tomcat https://tomcat.apache.org/download-80.cgi#8.5.31 MySQL https://dev.mysql.com/downloads/mysql/ 三 文件传输 输入SFTP命令连接 - 输入实例登录密码 sftp root@公网IP 上传 put 本地文件 服务器路径 下载 get 服务器文件 本地路径 四 远程访问 输入SSH命令连接 -输入实例登录密码 ssh root@公网IP 五 关闭防火墙 关闭防火墙 systemctl stop firewalld.service 关闭防火墙开机自启动功能 systemctl disable firewalld.service 查看防火墙状态 firewall-cmd --state 六 安装JDK 查看当前Linux系统是否已安装java rpm -qa | grep java 卸载已安装java rpm -e --nodeps 要卸载的软件 新建目录 cd /usr/local mkdir jdk 解压 cd jdk压缩包所在目录 tar -xvf jdk-8u171-linux-x64.tar.gz -C /usr/local/jdk 配置jdk环境变量 将下面配置拷贝进去 vim /etc/profile # java environmentJAVA_HOME=/usr/local/jdk/jdk1.8.0_171CLASSPATH=.:$JAVA_HOME/lib.tools.jarPATH=$JAVA_HOME/bin:$PATHexport JAVA_HOME CLASSPATH PATH 重新加载/etc/profile配置文件 source /etc/profile 七 安装Tomcat 新建目录 cd /usr/local mkdir tomcat 解压 cd tomcat压缩包所在目录 tar -xvf apache-tomcat-8.5.31.tar.gz -C /usr/local/tomcat 进入bin目录 cd /usr/local/tomcat/apache-tomcat-8.5.31/bin 启动 ./startup.sh 关闭 ./s……

    网友NO.815539

    SELinux导致PHP连接MySQL异常Can't connect to MySQL server的解决方法

    同事报告一起奇怪的现象,一个最简单的测试PHP代码,在测试环境很正常,但是在正式环境下,无论用何种方式(tcp/ip、unix socket)都无法连接mysql。 我协助查看了下,确实如此,无论是指定IP、端口的tcp/ip方式连接,或者是用unix socket方式连接,报错信息都类似: Could not connect: Can't connect to MySQL server on 'MYSQL.SERVER' (13) 无论如何修改MySQL的授权,或者调整php.ini中关于MySQL的设置,或者修改MySQL的监听网口,都无法解决。 而如果用命令行人工连接MySQL,则一切正常。 问题看起来像是php(with apache)不被允许连接MySQL,但是防火墙也没有限制。想来想去,唯有SELinux的因素会导致这个问题。 getsebool -a|grep -i httpd 可以看到这里设置了httpd进程的许可模式,再仔细看一下,有一个选项: getsebool -a|grep -i httpd_can_network_connect httpd_can_network_connect -- off 现在明白了,原来是SELinux限制了httpd对外访问的权限。将其开启即可: setsebool -P httpd_can_network_connect=1 如果对SELinux不熟悉,也可以直接修改系统配置文件 /etc/sysconfig/selinux,全局关闭: # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. #SELINUX=enforcing #把设置……

    Copyright 2018-2019 xz577.com 码农之家

    版权责任说明