![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux系统的C++编程
文章平均质量分 96
段舸
这个作者很懒,什么都没留下…
展开
-
第 10 章:在C++中使用协程进行系统编程
一个进程就是一个程序的运行实例。它有自己的地址空间,除了通过共享内存,不与其他进程共享。线程存在于进程中,它们不能脱离进程存在,尽管在Linux中,进程和线程都被视为任务。它们以相同的方式被调度,并且在内核级别有相同的控制结构。尽管如此,线程被认为是轻量级的,因为程序的初始负载的较大开销由父进程承担。但这并不是完整的情况。还有纤程和协程。如果说进程和线程是真正的并发并且在共享资源上并行工作,纤程就像线程,但不符合并发。虽然线程通常依赖于任务调度器的抢占式时间分片,纤程使用协作式多任务处理。原创 2024-01-31 20:54:24 · 795 阅读 · 0 评论 -
第 9 章:理解C++内存模型
在本章中,我们汇集了使用C++实现最佳代码性能所需的全部工具集。你学习了许多不同系统和软件层面上的技术,如果你现在想休息一下,这是可以理解的。确实,我们所涵盖的一些内容,例如分支预测和缓存友好性,或通过条件变量和内存顺序实现更多算法,值得花费更多时间。我们强烈鼓励你将本章作为改进系统和更有效工作方向的一步。下一章将致力于C++特性的另一个重大改进——协程。你将看到,对于这里讨论的一些机制,如事件等待,它们更为可取,而且更轻量。第7章第3章第2章。原创 2024-01-30 22:30:38 · 1026 阅读 · 0 评论 -
第 8 章:Linux中使用时钟、计时器和信号
在本章中,我们探索了Linux环境中可用的不同计时器。随后,我们了解了时钟纪元背后的重要性和UNIX时间的概念。接着,我们深入探讨了在Linux中准确测量时间的POSIX的实际实现。此外,我们研究了的领域,并检查了C++为有效的时间相关操作所提供的一系列功能。我们的探索随后带我们详细了解了框架内定义的持续时间、时间点和时钟。接下来,我们熟悉了内可用的各种时钟类型。随着我们的旅程继续,我们开始探索所提供的日历功能。最后,我们熟悉了时区,并提高了我们利用所提供的工具无缝执行时间转换的熟练度。原创 2024-01-29 19:49:28 · 1226 阅读 · 0 评论 -
第 7 章:进程间通信
我们很高兴再次讨论IPC主题。上次我们在[第3章]中讨论了管道,并使用了一些代码示例。您了解了进程间交换数据的基本机制,但如您所记,存在一些阻塞点。就像任何编程工具一样,管道有其特定用途——它们快速,可以帮助您从相关(forked)进程(通过匿名管道)和不相关进程(通过命名管道)发送和接收数据。同样,我们可以使用MQs传输数据,它们也适用于相关和不相关的进程。它们提供了将单个消息发送到多个接收进程的能力。但正如您所见,管道在发送和接收二进制数据方面是原始的,而MQs则引入了消息的概念。原创 2024-01-27 21:50:19 · 1110 阅读 · 0 评论 -
第 6 章:并发系统编程与C++
现代汽车已成为高度复杂的机器,不仅提供交通工具,还提供各种其他功能。这些功能包括信息娱乐系统,它允许用户播放音乐和视频,以及暖气和空调系统,用于调节乘客的温度。想象一下,如果这些功能不能同时工作的场景。在这种情况下,司机必须选择驾驶汽车、听音乐或保持舒适的气候之间进行选择。这不是我们对汽车的期望,对吧?我们期望所有这些功能同时可用,增强我们的驾驶体验,并提供舒适的旅程。为了实现这一点,这些功能必须并行运行。但它们真的是并行运行的,还是只是并发运行的?二者有什么区别?在计算机系统中,并发和并行。原创 2024-01-25 17:31:29 · 917 阅读 · 1 评论 -
第 5 章:使用C++处理错误
每位软件开发者都应该尽可能地编写可移植的代码。编写可移植代码提供了可重用性,这可以显著降低开发成本。当然,这并不总是可能的。有些情况下,你编写的代码专用于特定系统。但对于所有其他情况,将代码从底层系统抽象出来,可以让你轻松地将其迁移到其他系统,而无需进行大规模重构来使其工作。这更安全,成本更低。让我们回到之前的示例,我们试图抽象从POSIX系统调用接收到的错误代码。它应该可以与可移植错误条件(如)进行比较。我们将用以下用例来扩展这一点。假设我们有一个也与文件打交道的自定义库,我们称之为。原创 2024-01-24 00:49:13 · 983 阅读 · 0 评论 -
第 4 章:深入了解 C++ 对象
在 C++ 中,声明和定义这两个术语通常用来指不同方面的变量、函数或类。声明在上述示例中,xfoo和Point都是声明的,但未定义。变量声明中的extern关键字表明x在程序的其他地方定义。在声明中,不会分配内存。定义:定义为已声明的名称提供实际实现。int x;在上述示例中,xfoo和Point都是定义的。因此,声明引入了一个名称并指定了其类型,而定义提供了实际的实现并为对象分配了内存。现在我们熟悉了术语,让我们深入了解 C++ 中对象的细节。原创 2024-01-23 18:07:36 · 1685 阅读 · 0 评论 -
第 3 章:文件系统
在本章中,我们没有展示通过C++修改文件数据的任何示例。我们的目标主要是解释不同Linux文件系统实体。我们使用C++文件系统库丰富了这方面的知识 - 例如,提高系统编程意识。您了解了不同文件系统对象的角色及其特点。您还拥有C++工具来管理文件资源并提升您的抽象水平。还有一些实际示例,展示了如何通过匿名管道和命名管道在进程之间进行通信。它们在操作系统级别的实现也被讨论了,我们还简要探讨了Linux中的信号处理。在下一章中,我们将深入探讨C++语言,为其安全和安全的使用奠定基础,符合最新标准。原创 2024-01-22 23:11:30 · 2055 阅读 · 0 评论 -
第 2 章:深入了解进程管理
让我们看一个例子;是的,我们知道您可能之前见过类似的例子,并且清楚输出应该是什么 -fork()1]启动了一个新进程,并打印出两个pid在父进程中,fork()将返回新创建进程的ID;这样父进程就知道了它的子进程。在子进程中,将返回0。这种机制对于进程管理很重要,因为fork()创建了一个调用进程的副本。理论上,编译时段(textdata和BSS)在主内存中重新创建。新的栈。原创 2024-01-21 17:40:49 · 1010 阅读 · 0 评论 -
第 1 章:Linux 系统和 POSIX 标准入门
这里有一些误解,让我们简要澄清一下。Linux是一种类Unix操作系统,这意味着它提供了类似(有时甚至相同)的接口,如Unix——其功能,特别是API,旨在与Unix的接口相匹配。但它不是基于Unix的操作系统。它们的功能实现方式并不相同。在理解FreeBSD与macOS的关系时,也存在类似的误解。尽管两者共享了大量的代码,但它们的方法完全不同,包括它们的内核结构方式。牢记这些事实很重要,因为并不是所有我们将在本书中使用的功能都存在或可以在所有类Unix操作系统上访问。原创 2024-01-21 16:55:03 · 1024 阅读 · 0 评论