新书速览|Linux C与C++一线开发实践

《Linux C与C++一线开发实践》

本书内容

Linux C/C++编程在Linux应用程序开发中占有重要的地位,掌握这项技术将在就业竞争中立于不败之地。《Linux C与C++一线开发实践》内容针对初中级读者,贴近软件公司一线开发实践。全书厚达620多页,知识点丰富,内容翔实,并配套示例源码、作者QQ群答疑服务

《Linux C与C++一线开发实践》共分为16章,内容包括Linux概述、搭建开发环境、C++语言基础、Linux文件编程、多进程编程、进程间通信、C++ Web编程、多线程基本编程、多线程高级编程、Linux下的库、TCP/IP基础、套接字基础、TCP套接字网络编程、UDP套接字网络编程、原始套接字网络编程,以及并发聊天服务器项目实战等。

本书作者

朱文伟,名校计算机专业统招硕士,20多年C\C++、Java开发经验。主导开发过密码、图形、人工智能等产品。精通Linux、Windows系统开发及数据库开发技术。著有图书:

《Rust编程与项目实战》《嵌入式Linux驱动开发实践》《高性能Linux网络编程核心技术揭秘》《Linux C/C++服务器开发实践》《Qt 6.x从入门到精通》《PyQt 5从入门到精通》《Linux C与C++ 一线开发实践》《Visual C++2017从入门到精通》《Windows C/C++加密解密实战》《密码学原理与Java实现》《OpenCV 4.5计算机视觉开发实战(基于VC++)》《OpenCV 4.5计算机视觉开发实战:基于Python》。

本书读者

《Linux C与C++一线开发实践》适合想全面学习Linux环境下C/C++语言编程的读,既可作为初中级开发人员的案头查阅与参考手册,也适合作为高等院校或高职高专相关课程的教学参考书

本书目录

第1章  Linux概述 1

1.1  什么是Linux 1

1.2  Linux的简史 2

1.3  Linux和Windows的比较 4

1.4  Linux主要应用领域 4

1.5  Linux的版本 5

1.6  使用哪个版本的Linux进行学习 5

1.7  Linux的特点 6

1.8  如何学习Linux 6

1.9  命令行还是图形界面 7

1.10  计算机启动的基本过程 7

1.10.1  按下电源 7

1.10.2  BIOS自检 7

1.10.3  系统引导 9

1.10.4  启动内核 10

1.11  认识Shell 11

1.12  图形界面和字符界面的切换 11

1.12.1  在不退出X-Window的情况下切换到字符界面 11

1.12.2  强行退出X-Window进入文本模式 12

1.12.3  设置每次开机进入字符界面 12

1.12.4  从字符界面进入图形界面 13

1.13  环境变量 14

第2章  搭建Linux C/C++开发环境 15

2.1  安装和配置虚拟机Linux 15

2.1.1  在VMware下安装Linux 15

2.1.2  开启登录时的root账号 18

2.1.3  配置Linux虚拟机环境 20

2.1.4  配置Linux虚拟机网络 24

2.1.5  通过终端工具连接Linux虚拟机 33

2.1.6  和虚拟机互传文件 36

2.2  gcc/g++编译器的使用 37

2.2.1  安装C/C++编译工具 37

2.2.2  gcc对C语言的编译过程 37

2.2.3  gcc所支持的后缀名文件 41

2.2.4  gcc的语法格式 42

2.2.5  gcc常见选项 44

2.2.6  g++的基本使用 54

2.3  搭建集成式开发环境 55

2.3.1  基于Visual C++ 2017搭建IDE 56

2.3.2  基于Visual Studio Code搭建IDE 59

2.4  搭建非集成式开发环境 70

2.4.1  基于Visual Studio Code编辑和上传源码 70

2.4.2  为何要学gdb调试器 74

2.4.3  gdb简介 74

2.4.4  重要准备 74

2.4.5  启动gdb 75

2.4.6  退出gdb 75

2.4.7  gdb的常用命令概述 76

2.4.8  file命令加载程序 77

2.4.9  list命令显示源码 77

2.4.10  run命令运行程序 80

2.4.11  break命令设置断点 82

第3章  C++语言基础 85

3.1  C++基础知识 85

3.1.1  C++程序结构 85

3.1.2  注释 88

3.1.3  变量和数据类型 88

3.1.4  标识 89

3.1.5  基本数据类型 89

3.1.6  变量的定义和C++11中的auto 90

3.1.7  变量的范围 93

3.1.8  变量初始化 94

3.1.9  常量 95

3.1.10  操作符/运算符 99

3.1.11  控制台交互 106

3.2  控制结构 110

3.2.1  条件结构 111

3.2.2  循环结构 112

3.2.3  分支控制和跳转 115

3.2.4  选择结构语句switch 116

3.3  函数 118

3.4  函数高级话题 122

3.4.1  参数按数值传递和按地址传递 122

3.4.2  函数参数默认值 124

3.4.3  函数重载 125

3.4.4  内联函数 125

3.4.5  递归 126

3.4.6  函数的声明 127

3.5  高级数据类型 128

3.5.1  数组 128

3.5.2  指针 138

3.5.3  动态分配内存 148

3.5.4  结构体 151

3.5.5  自定义数据类型 157

3.6  面向对象编程 160

3.6.1  类 160

3.6.2  构造函数和析构函数 163

3.6.3  构造函数重载 165

3.6.4  类的指针 167

3.6.5  由关键字struct和union定义的类 168

3.6.6  操作符重载 168

3.6.7  关键字this 171

3.6.8  静态成员 172

3.6.9  类之间的关系 173

3.6.10  多态 180

3.7  C++面向对象小结 186

3.8  C++高级知识 190

3.8.1  模板 190

3.8.2  命名空间 196

3.8.3  异常处理 200

3.8.4  预处理指令 203

3.8.5  预定义宏 206

3.8.6  C++11中的预定义宏 207

3.9  字符串 209

3.9.1  字符串基础 209

3.9.2  搜索与查找 217

3.10  再论异常处理 225

3.10.1  基本概念 225

3.10.2  抛出异常 225

3.10.3  捕获异常 226

3.10.4  C++标准异常 227

3.10.5  定义新的异常 227

3.11  再论函数模板 228

3.12  字符集 230

3.12.1  计算机上的3种字符集 230

3.12.2  查看Linux系统的字符集 232

3.12.3  修改Linux系统的字符集 233

3.12.4  Unicode编码的实现 233

3.12.5  C运行时库对Unicode的支持 238

3.12.6  C++标准库对Unicode的支持 238

3.12.7  字符集相关实例 239

第4章  Linux文件编程 240

4.1  文件系统及层次结构标准 240

4.2  文件的属性信息 241

4.3  i节点 242

4.3.1  基本概念 242

4.3.2  i节点的内容 242

4.3.3  i节点的使用状况 244

4.4  文件类型 246

4.4.1  普通文件 246

4.4.2  目录 247

4.4.3  块设备文件 248

4.4.4  字符设备文件 249

4.4.5  链接文件 249

4.5  文件权限 251

4.6  Linux文件I/O编程的基本方式 252

4.7  什么是I/O 252

4.8  Linux系统调用下的文件I/O编程 252

4.8.1  文件描述符 252

4.8.2  打开或创建文件 253

4.8.3  创建文件 255

4.8.4  关闭文件 256

4.8.5  读取文件中的数据 257

4.8.6  向文件写入数据 259

4.8.7  设定文件偏移量 260

4.8.8  获取文件状态 262

4.8.9  文件锁定 263

4.8.10  建立文件和内存映射 267

4.8.11  mmap和shm对比 270

4.9  C++方式下的文件I/O编程 271

4.9.1  流的概念 271

4.9.2  流的类库 271

4.9.3  打开文件 272

4.9.4  关闭文件 274

4.9.5  写入文件 274

4.9.6  读取文件 274

4.9.7  文件位置指针 276

4.9.8  状态标志符的验证 278

4.9.9  读写文件数据块 279

4.10  文件编程中的其他操作 281

4.10.1  获取文件有关信息 281

4.10.2  创建和删除文件目录项 283

第5章  多进程编程 286

5.1  进程的基本概念 286

5.2  进程的描述 287

5.2.1  进程的标识符 289

5.2.2  PID文件 291

5.3  进程的创建 294

5.3.1  使用fork创建进程 294

5.3.2  使用exec创建进程 295

5.3.3  使用system创建进程 301

5.4  进程调度 302

5.5  进程的分类 305

5.5.1  前台进程 305

5.5.2  后台进程 305

5.6  守护进程 306

5.6.1  守护进程的概念 306

5.6.2  守护进程的特点 307

5.6.3  查看守护进程 307

5.6.4  守护进程的分类 308

5.6.5  守护进程的常用启动方式 309

5.6.6  编写守护进程的步骤 309

第6章  Linux进程间的通信 312

6.1  信号 312

6.1.1  信号的基本概念 312

6.1.2  与信号相关的系统调用 317

6.2  管道 325

6.2.1  管道的基本概念 325

6.2.2  管道读写的特点 325

6.2.3  管道的局限性 326

6.2.4  创建管道函数pipe 326

6.2.5  读写管道函数read/write 326

6.2.6  等待子进程中断或结束的函数wait 327

6.2.7  使用管道的特殊情况 330

6.3  消息队列 330

6.3.1  创建和打开消息队列函数msgget 331

6.3.2  获取和设置消息队列的属性函数msgctl 332

6.3.3  将消息送入消息队列的函数msgsnd 333

6.3.4  从消息队列中读取一条新消息的函数msgrcv 333

6.3.5  生成键值函数ftok 334

第7章  C++ Web编程 342

7.1  CGI程序的工作方式 342

7.2  架设Web服务器Apache 343

第8章  多线程基本编程 346

8.1  使用多线程的好处 346

8.2  多线程编程的基本概念 347

8.2.1  操作系统和多线程 347

8.2.2  线程的基本概念 348

8.2.3  线程的状态 348

8.2.4  线程函数 349

8.2.5  线程标识 349

8.2.6  C++多线程开发的两种方式 349

8.3  利用POSIX多线程API函数进行多线程开发 350

8.3.1  线程的创建 350

8.3.2  线程的属性 355

8.3.3  线程的结束 366

8.3.4  线程退出时的清理机会 374

8.4  C++11中的线程类 379

8.4.1  线程的创建 380

8.4.2  线程的标识符 387

8.4.3  当前线程this_thread 388

第9章  多线程高级编程 393

9.1  多线程的同步和异步 393

9.2  线程同步 393

9.3  利用POSIX多线程API函数进行线程同步 398

9.3.1  互斥锁 398

9.3.2  读写锁 404

9.3.3  条件变量 411

9.4  C++11/14中的线程同步 417

9.5  线程池 421

9.5.1  线程池的定义 421

9.5.2  使用线程池的原因 421

9.5.3  用C++实现一个简单的线程池 422

第10章  Linux下的库 428

10.1  库的基本概念 428

10.2  库的分类 428

10.3  静态库 429

10.3.1  静态库的基本概念 429

10.3.2  静态库的创建和使用 429

10.4  动态库 432

10.4.1  动态库的基本概念 432

10.4.2  动态库的创建和使用 432

第11章  TCP/IP基础 437

11.1  什么是TCP/IP 437

11.2  TCP/IP的分层结构 437

11.3  应用层 441

11.3.1  DNS 441

11.3.2  端口的概念 442

11.4  传输层 442

11.4.1  TCP 442

11.4.2  UDP 443

11.5  网络层 443

11.5.1  IP 443

11.5.2  ARP 449

11.5.3  RARP 451

11.5.4  ICMP 452

11.6  数据链路层 459

11.6.1  数据链路层的基本概念 459

11.6.2  数据链路层的主要功能 460

第12章  套接字基础 462

12.1  网络程序的架构 463

12.2  套接字的类型 464

12.3  套接字的地址结构 464

12.4  主机字节序和网络字节序 465

12.5  出错信息的获取 467

第13章  TCP套接字编程 469

13.1  TCP套接字编程的基本步骤 469

13.2  协议簇和地址簇 470

13.3  socket地址 473

13.3.1  通用socket地址 473

13.3.2  专用socket地址 474

13.3.3  IP地址的转换 475

13.4  TCP套接字编程的相关函数 477

13.4.1  socket函数 477

13.4.2  bind函数 477

13.4.3  listen函数 480

13.4.4  accept函数 480

13.4.5  connect函数 480

13.4.6  write函数 483

13.4.7  read函数 484

13.4.8  send函数 484

13.4.9  recv函数 484

13.4.10  close函数 485

13.4.11  获得套接字地址 485

13.4.12  获得主机名称和主机信息 487

13.4.13  阻塞套接字的使用 489

13.4.14  非阻塞套接字的使用 496

第14章  UDP套接字编程 509

14.1  UDP套接字编程的基本步骤 509

14.2  UDP套接字编程的相关函数 510

14.2.1  消息发送函数sendto和sendmsg 510

14.2.2  消息接收函数recvfrom和recvmsg 512

14.3  实战UDP套接字 513

14.4  UDP丢包及无序问题 522

第15章  原始套接字编程 523

15.1  原始套接字概述 523

15.2  与标准套接字的区别 523

15.3  原始套接字的编程方法 524

15.4  面向链路层的原始套接字编程函数 524

15.4.1  创建原始套接字函数socket 524

15.4.2  接收函数recvfrom 525

15.4.3  发送函数sendto 526

15.5  以太网帧格式 529

15.6  获取网络接口的信息 530

15.7  实战链路层的原始套接字 534

15.7.1  常见的应用场景 534

15.7.2  混杂模式 560

15.7.3  链路层原始套接字开发注意事项 579

15.8  面向IP层的原始套接字编程 580

第16章  并发聊天服务器项目实战 588

16.1  系统平台的选择 588

16.1.1  应用系统平台模式的选择 588

16.1.2  C/S模式介绍 589

16.1.3  数据库系统的选择 590

16.2  系统需求分析 590

16.2.1  即时消息的一般需求 590

16.2.2  即时消息的协议需求 590

16.2.3  即时消息的安全需求 591

16.2.4  即时消息的加密和鉴别 591

16.2.5  即时消息的注册需求 591

16.2.6  即时消息的通信需求 591

16.3  系统总体设计 591

16.4  即时通信系统的实施原理 592

16.4.1  IM的工作方式 593

16.4.2  IM的基本技术原理 593

16.4.3  IM的通信方式 593

16.5  功能模块划分 594

16.5.1  模块划分 594

16.5.2  服务器端功能 595

16.5.3  客户端功能 595

16.5.4  服务器端多线程 595

16.5.5  客户端多线程 596

16.6  数据库设计 596

16.6.1  数据库的选择 596

16.6.2  准备MySQL环境 597

16.6.3  Linux下的MySQL的C编程 601

16.6.4  聊天系统数据库设计 607

16.7  服务器端设计 608

16.8  客户端设计 616

编辑推荐

1Linux C/C++编程在Linux应用程序开发中占有重要的地位,掌握这项技能将在就业竞争中立于不败之地。

2《Linux C与C++一线开发实践》内容针对初中级读者,贴近软件公司一线开发实践。

3《Linux C与C++一线开发实践》假设读者没有接触过C/C++编程和Linux系统开发,任何立志成为一名Linux开发工程师的人,都可以从本书起步。

4《Linux C与C++一线开发实践》虽然有点厚,但内容通俗易懂,由浅入深,并且实例丰富、步骤详细、注释充分,能帮助读者快速入门。

5《Linux C与C++一线开发实践》重点内容包括开发环境搭建、C/C++语言基础、文件编程、多进程、Web编程、多线程、库、TCP/IP协议、套接字,以及一个大型并发聊天服务器实战项目。

6对于初中级开发人员,均可把《Linux C与C++一线开发实践》作为Linux C/C++实际开发中的案头查阅与参考手册。

本文摘自《Linux C与C++一线开发实践》,获出版社和作者授权发布。

Linux C与C++一线开发实践(第2版)(Linux技术丛书)——jd

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/38120.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

51单片机第6步_stdlib.h库函数

本章重点学习stdlib.h库函数。 #include <REG51.h> //包含头文件REG51.h,使能51内部寄存器; #include <stdlib.h> //float atof (char *s1); //参数s1字符串可包含正负号,小数点或E(e)来表示指数部分,如123.456或123e-2; //若首字符是非数据字符,或为正负号…

[NSSCTF]-Reverse:[SWPUCTF 2021 新生赛]easyapp(安卓逆向,异或)

无壳 把后缀名改为zip&#xff0c;找到apk 查看jadx 这里调用了MainActivity的lambda$onCreate$0$MainActivity&#xff0c;然后又调用了Encoder进行异或。 exp&#xff1a; result棿棢棢棲棥棷棊棐棁棚棨棨棵棢棌 key987654321 flag for i in range(len(result)):flagchr(…

HarmonyOS开发:应用完整性校验

简介 为了确保应用的完整性和来源可靠&#xff0c;OpenHarmony需要对应用进行签名和验签。 应用开发阶段&#xff1a; 开发者完成开发并生成安装包后&#xff0c;需要开发者对安装包进行签名&#xff0c;以证明安装包发布到设备的过程中没有被篡改。OpenHarmony的应用完整性校…

关于响应式编程的理解与SpringCloudGateway的理解

关于响应式编程的理解与SpringCloudGateway的理解 一. 响应式编程与函数式编程的区别二. 响应式编程中常用的组件2.1 RxJava定义2.2 Rxjava基本概念2.3 RxJava 用法 三 SpringcloudGateway四 常见的四种限流规则 一. 响应式编程与函数式编程的区别 总的来说&#xff0c;响应式编…

GPIO和PIN

文章目录 1 GPIO和Pin1.1 GPIO和Pin基础概念1.2 GPIO输入模式1.3 GPIO输出模式1.4 GPIO的HAL库1.4.1 一些HAL库表示1.4.2 HAL库常用GPIO函数1.4.3 GPIO点亮led灯程序例子 1 GPIO和Pin 1.1 GPIO和Pin基础概念 ​ 单片机有很多的引脚&#xff0c;为了操控每一个引脚&#xff0c…

grpc学习golang版( 四、多服务示例 )

系列文章目录 第一章 grpc基本概念与安装 第二章 grpc入门示例 第三章 proto文件数据类型 第四章 多服务示例 第五章 多proto文件示例 第六章 服务器流式传输 第七章 客户端流式传输 第八章 双向流示例 文章目录 一、前言二、定义proto文件三、编写server服务端四、编写Client客…

MySQL之可扩展性(九)

可扩展性 直接连接 2.修改应用的配置 还有一个分发负载的办法是重新配置应用。例如&#xff0c;你可以配置多个机器来分担生成大报表操作的负载。每台机器可以配置成连接到不同的MySQL备库&#xff0c;并为第N个用户或网站生成报表。 这样的系统很容易实现&#xff0c;但如果…

Spring Boot集成jasypt快速入门Demo

1.什么是Jasypt&#xff1f; Jasypt&#xff08;Java Simplified Encryption&#xff09;是一个专注于简化Java加密操作的工具。 它提供了一种简单而强大的方式来处理数据的加密和解密&#xff0c;使开发者能够轻松地保护应用程序中的敏感信息&#xff0c;如数据库密码、API密…

stl的map和set

概念 map和set底层都是红黑树 set是key模型结构&#xff0c;本质就是看一个元素在不在容器中。 map是key/value结构&#xff0c;里面存了一个pair结构&#xff0c;可以通过一个值来查找另外一个值 map和set结构中遍历出来的都是有序并且去重了的&#xff0c;map和set都支持增…

Java高级重点知识点-17-异常

文章目录 异常异常处理自定义异常 异常 指的是程序在执行过程中&#xff0c;出现的非正常的情况&#xff0c;最终会导致JVM的非正常停止。Java处 理异常的方式是中断处理。 异常体系 异常的根类是 java.lang.Throwable&#xff0c;&#xff0c;其下有两个子类&#xff1a;ja…

【QT】概述|对象树模型|两种控件模式|信号和槽|lambda

目录 什么是QT 特点 QT程序 main函数 QT按钮 纯代码模式 图形化模式 对象树模型 信号和槽 连接与断开 自动连接 断开连接 信号的发射 lambda表达式 基本语法 捕获列表 Lambda表达式用于信号与槽的连接 例如 什么是QT Qt是一个跨平台的C图形用户界面应用…

办理河南公司企业信用等级3A证书流程和条件

企业信用等级3A证书属于一种荣誉资质&#xff0c;是提升企业公信力和影响力保障的一项资质。信用等级是信用 (资信)评估机构根据企业资信评估结果对企业信用度划分的等级类别&#xff0c;它反映了企业信用度的高低。AAA信用等级是一种等级划分。代指企业的信用经过行业、机构评…

零成本搭建个人图床服务器

前言 图床服务器是一种用于存储和管理图片的服务器&#xff0c;可以给我们提供将图片上传后能外部访问浏览的服务。这样我们在写文章时插入的说明图片&#xff0c;就可以集中放到图床里&#xff0c;既方便多平台文章发布&#xff0c;又能统一管理和备份。 当然下面通过在 Git…

中药材图像识别:中医与深度学习的融合(目标检测)

亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 一、引…

flink的窗口

目录 窗口分类 1.按照驱动类型分类 1. 时间窗口&#xff08;Time window&#xff09; 2.计数窗口&#xff08;Count window&#xff09; 2.按照窗口分配数据的规则分类 窗口API分类 API调用 窗口分配器器&#xff1a; 窗口函数 增量聚合函数&#xff1a; 全窗口函数…

MySQL高级-MVCC-原理分析(RC级别)

文章目录 1、RC隔离级别下&#xff0c;在事务中每一次执行快照读时生成ReadView2、先来看第一次快照读具体的读取过程&#xff1a;3、再来看第二次快照读具体的读取过程: 1、RC隔离级别下&#xff0c;在事务中每一次执行快照读时生成ReadView 我们就来分析事务5中&#xff0c;两…

VBA代码解决方案第十五讲:如何对单元格区域进行高亮显示

《VBA代码解决方案》(版权10028096)这套教程是我最早推出的教程&#xff0c;目前已经是第三版修订了。这套教程定位于入门后的提高&#xff0c;在学习这套教程过程中&#xff0c;侧重点是要理解及掌握我的“积木编程”思想。要灵活运用教程中的实例像搭积木一样把自己喜欢的代码…

【操作系统期末速成】EP06 | 学习笔记(基于五道口一只鸭)

文章目录 一、前言&#x1f680;&#x1f680;&#x1f680;二、正文&#xff1a;☀️☀️☀️2.1 考点十四&#xff1a;同步互斥的基本概念2.2 考点十五&#xff1a;实现临界区互斥的基本方法2.3 考点十六&#xff1a;信号量的含义及常用信号量 一、前言&#x1f680;&#x1…

操作系统概论(二)

一、单项选择题(本大题共20小题&#xff0c;每小题1分&#xff0c;共20分) 在每小题列出的四个备选项中只有一个选项是符合题目要求的&#xff0c;请将其代码填写在题后的括号内。错选、多选或未选均无分。 1&#xff0e;操作员接口是操作系统为用户提供的使用计算机系统的手…

Vitis IDE 艰难切换--从传统 Vitis GUI 到 2024.1 统一软件界面

目录 1. 简介 2. 界面展示 2.1 启动 2.2 Flow Navigator 2.1.1 C Simulation Dialog 2.1.2 C Synthesis 2.1.3 C/RTL Co-simulation 2.1.4 Implementation 2.1.5 Package 3. C Synthesis 详解 3.1 Classic Configuration Settings 3.1.1 config_array_partition 3…