- 博客(341)
- 资源 (10)
- 问答 (1)
- 收藏
- 关注
原创 C++11 并发指南九(综合运用 C++11 多线程下生产者消费者模型详解)
前面八章介绍了 C++11 并发编程的基础(抱歉哈,第五章-第八章还在草稿中),本文将综合运用 C++11中的新的基础设施(主要是多线程、锁、条件变量)来阐述一个经典问题——,并给出完整的解决方案。
2023-01-29 13:07:15 4222
原创 C++11 并发指南六(atomic 类型详解四 C 风格原子操作介绍)
前面三篇文章《C++11 并发指南六(atomic 类型详解一 atomic_flag 介绍)》、《C++11 并发指南六( 类型详解二 std::atomic )》、《C++11 并发指南六(atomic 类型详解三 std::atomic (续))》都是采用 C++ 的方式介绍原子对象,本节我会给大家介绍 C++11 原子操作中 C 风格的 API。
2023-01-29 13:04:50 4499 1
原创 C++多线程07:thread_local
thread-local storage 和static(或者说global) 存储很类似,每一个线程都将拥有一份这个数据的拷贝,对象的生命周期从线程开始时开始(对于全局变量),或者首先分配空间。当线程退出的时候对象析构;一般在声明时赋值,在本thread中只执行一次。当用于类成员变量时,必须是static的。C++11 thread_local用法 - 知乎 (zhihu.com)存储类说明符 - cppreference.com。
2023-01-20 15:47:40 3091
原创 16.扩展属性
扩展属性(EA)可以用于实现访问控制列表(ACLs)、文件能力等功能。此外,它们还可以记录文件的版本号、MIME类型、字符集信息或指向图标资源的指针等。命名空间:EA被划分为不同的命名空间,包括usertrustedsystem和security。每个命名空间有不同的用途和权限要求。user:非特权用户可以在权限允许的情况下读取和修改这些属性。trusted:需要特权进程才能修改。system:主要用于内核级别的操作,例如ACLs。security。
2025-01-13 01:35:17 291
原创 15.文件属性
和 futimens()提供了更高精度和更灵活的方式来设置文件的时间戳。这些函数允许独立设置访问时间和修改时间,并且支持纳秒级精度。可以使用特殊值UTIME_NOW和UTIME_OMIT来简化时间戳的设置操作。支持符号链接的直接操作,而futimens()则适用于通过文件描述符打开的文件。通过这些高级接口,开发者能够更精细地控制文件的时间戳,满足各种应用需求。新建文件的UID总是取自进程的有效用户ID。新建文件的GID取决于文件系统的挂载选项和父目录的设置。使用chown()
2025-01-13 01:33:10 260
原创 14.系统编程概念
定义:文件系统是对文件和目录的组织集合。内容:本章将解释与文件系统相关的概念,并以传统的Linux ext2文件系统为例进行说明。同时,会简要介绍Linux支持的日志文件系统。系统调用:讨论用于挂载(mount)和卸载(unmount)文件系统的系统调用,以及获取已挂载文件系统信息的库函数。本章介绍了文件系统和设备专用文件的基本概念,重点讨论了设备文件的类型、设备驱动程序的作用以及Linux中设备管理的演进。通过udev和sysfs。
2025-01-13 01:16:05 509
原创 13. 文件IO缓冲
stdio库通过缓冲机制减少了系统调用次数,提高了 I/O 性能。使用setvbuf()可以设置流的缓冲模式(无缓冲、行缓冲、全缓冲)。fflush()用于强制刷新输出流的缓冲区。在编写可移植代码时,应注意不同 C 库的行为差异,并显式调用fflush()以确保正确性。fsync()和:用于强制刷新文件数据和元数据到磁盘。O_SYNC标志:使所有写操作同步执行,但会显著降低性能。O_DSYNC和O_RSYNC标志:提供了更细粒度的同步控制。性能优化使用大缓冲区减少系统调用次数。
2025-01-13 01:03:27 884
原创 12.Linux 进程信息
proc文件系统提供了一种简单的方式来访问内核和进程的信息。每个进程在/proc中都有一个以 PID 命名的目录,包含进程的详细信息(如statuscmdlinefd等)。线程组中的每个线程在目录下都有一个以 TID 命名的子目录。/proc文件系统的内容会随着内核版本的演进而变化,因此解析时应谨慎处理。/proc文件系统提供了对内核和系统信息的访问。可以通过 Shell 命令或编程语言(如 C、Python)读取和修改/proc文件。/proc/PID。
2025-01-13 00:53:25 617
原创 11 Linux 系统限制和选项
编译时:通过包含标准头文件(如)获取固定的限制值。运行时:通过调用SUSv3定义的函数(如sysconf()pathconf()和)获取可能变化的限制和选项。SUSv3为开发者提供了一套标准化的接口和规定,帮助处理不同系统之间的差异,从而确保应用程序在不同UNIX实现上的可移植性和正确性。SUSv3通过定义最小限制值和提供标准化接口(如sysconf()pathconf()和),帮助开发者编写可移植的应用程序。
2025-01-13 00:46:10 1036
原创 10.Linux 时间
这段文字主要讨论了计算机程序中涉及的两种时间类型:真实时间和进程时间,并详细介绍了日历时间的概念及其在UNIX系统中的表示方式。真实时间:进程时间:进程使用的CPU时间总量,用于性能检查和优化。硬件时钟:计算机体系结构内置的时钟,帮助内核计算真实时间和进程时间。日历时间的表示:总结:程序关注真实时间和进程时间,UNIX系统使用Epoch以来的秒数表示日历时间,32位系统存在2038年问题,64位系统可以解决这一问题。用于获取日历时间,精度可达微秒。函数原型:返回值:成功返回0,失败返回-1。参数:
2025-01-13 00:45:25 775
原创 9.LINUX 进程凭证
实际用户 ID 和实际组 ID:RUID 和 RGID 确定了进程的真实身份,用于审计和日志记录。它们在进程创建时从父进程继承,并且通常不会更改。有效用户 ID 和有效组 ID:EUID 和 EGID 是用于权限检查的主要标识符。它们决定了进程在执行各种操作时的权限。EUID 和 EGID 可以通过 SUID 和 SGID 程序或系统调用动态更改。保存的 set-user-ID 和保存的 set-group-ID。
2025-01-06 00:15:23 537
原创 8. LINUX 用户和组
存储用户账户的基本信息,包括登录名、用户 ID、组 ID、主目录和登录 Shell 等。Shadow 密码机制:为了提高安全性,加密后的密码通常存储在文件中,而不是直接存储在中。网络环境:在分布式系统中,密码信息可以通过 NIS 或 LDAP 进行分发,保持对应用程序的透明性。通过理解文件的结构和功能,系统管理员可以更好地管理和维护用户账户,确保系统的安全性和稳定性。:存储用户的加密密码和其他与安全性相关的字段,只有超级用户可以读取。它提高了系统的安全性,防止密码被轻易破解。
2025-01-05 23:50:50 822
原创 Linux 基础七 内存
malloc()和free()是 C 语言中常用的动态内存分配和释放函数,提供了比brk()和sbrk()更高级、更灵活的接口。malloc()分配的内存块会被对齐,以便高效访问各种数据结构。free()通常不会立即减少,而是将释放的内存块添加到空闲列表中,供后续的malloc()调用重用。只有当释放的内存块位于堆的顶部且足够大时,free()才会调用sbrk()来降低。通过合理的内存管理和释放策略,malloc()和free()可以有效地减少内存碎片,提高内存利用率。malloc()和。
2025-01-05 23:38:37 820
原创 Linux 基础 6.进程
clearenv():清除整个环境变量列表,将environ设置为NULL。putenv():添加或修改环境变量。它接受一个name=value形式的字符串,并将其直接添加到环境中。注意,putenv()不会复制字符串,因此不应使用自动变量作为参数。setenv():添加或修改环境变量。它为name=value形式的字符串分配新的内存,并将name和value复制到该内存中。可以安全地使用自动变量作为参数。unsetenv():移除指定的环境变量。如果该变量不存在,unsetenv()也不会报错。
2025-01-05 20:32:33 1058
原创 5.深入文件IO
i-node 是 Linux/UNIX 文件系统的核心组成部分,它通过分离文件内容和元数据、支持硬链接、提供高效的文件查找和访问机制、记录文件的访问权限和时间戳、支持文件锁定和并发控制、实现稀疏文件、支持大文件和高效的磁盘空间管理等方式,极大地提升了文件系统的灵活性、效率和可靠性。i-node 的存在使得文件系统能够更好地管理文件资源,满足现代操作系统的需求。可以在编译时通过命令行选项定义64// 其他头文件。
2025-01-05 20:31:38 618
原创 Linux 基础 4.文件IO 通用的IO模型
在 Linux 和其他类 Unix 操作系统中,文件描述符(file descriptor)是操作系统内核用来标识打开文件的非负整数。它们用于表示所有类型的已打开文件,包括普通文件、管道(pipe)、FIFO、套接字(socket)、终端和设备等。每个进程都有自己独立的一组文件描述符,这意味着不同进程之间的文件描述符不会相互影响。UNIX I/O模型的通用性极大地简化了应用程序的开发,使得开发者无需关心底层的具体细节,只需专注于业务逻辑。同时,当需要访问特定设备或文件系统的高级功能时,ioctl()
2025-01-05 20:29:25 1252
原创 11.python文件
Python 提供了强大的文件输入输出(I/O)功能,使得你可以轻松地读取、写入和管理文件。以下是关于Python文件I/O的详细总结,涵盖了基本操作、高级特性以及与操作系统交互的方法。Python的文件I/O功能非常强大且灵活,能够满足各种文件处理需求。通过掌握open()read()write()seek()tell()等基本方法,以及os和shutil模块提供的高级功能,你可以轻松地进行文件的读取、写入、重命名、删除和目录管理等操作。使用with语句可以确保文件的安全关闭,避免资源泄漏问题。
2024-12-16 00:05:43 1350
原创 10.python函数
在Python中,使用def关键字来定义一个函数。函数可以接受参数(也称为形参),并且可以选择性地返回一个值。"""文档字符串 - 函数的简短描述"""# 函数体return [expression] # 可选: 函数的名字。parameters: 参数列表,可以为空。return: 返回语句,用于返回一个值给调用者。如果没有return语句或仅使用return,则函数默认返回None。Python函数提供了强大的功能,使得代码更加模块化和可重用。
2024-12-16 00:04:25 655
原创 9.Python 条件语句和循环语句
通过上述详细的解释,我们介绍了 Python 中的条件语句和循环语句,包括ifelifelsewhilefor、循环嵌套以及breakcontinue和pass控制语句。这些控制结构是编写复杂逻辑和重复操作的基础,掌握它们可以帮助你编写更加灵活和高效的 Python 代码。如果你有任何具体问题或需要进一步的解释,请随时告诉我!
2024-12-16 00:03:02 604
原创 8.python字典
字典是 Python 中一种非常灵活且强大的数据结构,它允许你存储键值对(key-value pairs),并且可以快速地根据键查找对应的值。字典是可变的(mutable),意味着你可以在创建后修改、添加或删除其中的键值对。通过上述详细的解释,我们全面介绍了 Python 字典的基本概念、访问方式、修改操作、内置函数和方法、高级用法以及性能优化技巧。字典是 Python 中非常强大且灵活的数据结构,掌握这些知识可以帮助你在编写代码时更加高效地处理和操作数据。
2024-12-16 00:02:31 917
原创 7.python元组
元组是 Python 中的一种不可变序列类型,与列表类似,但元组中的元素一旦创建后就不能被修改。元组使用小括号()来表示,而列表使用方括号[]。元组的不可变性使其在某些场景下比列表更安全和高效。通过上述详细的解释,我们全面介绍了 Python 元组的基本概念、访问方式、不可变性、内置函数和方法、高级用法以及性能优势。元组是 Python 中非常重要的数据结构,尤其适合用于存储固定的数据集合或作为字典的键。掌握这些知识可以帮助你在编写代码时更加高效地处理和操作数据。
2024-12-16 00:01:53 980
原创 6.python列表
Python 列表 (List) 深度总结1. 列表的基本概念2. 访问列表中的元素3. 修改列表4. 删除列表元素5. 列表的操作符6. 列表的内置函数7. 列表的方法8. 列表的高级用法8.1 列表推导式 (List Comprehensions)8.2 列表的浅拷贝与深拷贝8.3 列表的性能优化9. 列表的多线程和并发处理10. 列表的国际化和本地化总结列表是 Python 中最常用的数据结构之一,它是一个有序的、可变的集合,允许存储不同类型的元素。列表使用方括号[]
2024-12-16 00:01:19 1208
原创 5.字符串
字符串是 Python 中最常用的数据类型之一,用于表示和操作文本数据。Python 提供了丰富的字符串创建、访问、操作和格式化功能,使得处理文本变得非常方便。以下是关于 Python 字符串的详细总结,涵盖了字符串的创建、访问、操作、格式化以及常用方法。通过上述详细的解释,我们全面介绍了 Python 字符串的创建、访问、操作、格式化、Unicode 支持、常用方法以及三引号字符串等内容。这些知识不仅涵盖了字符串的基本用法,还包括了许多高级功能,帮助你在编程中更高效地处理文本数据。
2024-12-16 00:00:35 862
原创 4.Python 数字类型
Python 数字类型总结1. 数字类型概述特点2. 数字类型的创建与赋值3. 数字类型转换4. 数学运算与函数`math` 模块`cmath` 模块5. 随机数生成6. 三角函数7. 数学常量总结Python 提供了多种数字类型来存储和操作数值数据。这些类型包括整数、浮点数、长整数(在 Python 3 中已与整数合并)和复数。每种类型都有其特定的特性和使用场景。以下是关于 Python 数字类型的详细总结,包括它们的特点、转换方法以及常用的数学和随机数函数。整型 (int。
2024-12-16 00:00:01 674
原创 2.python变量
通过上述详细的解释,我们不仅涵盖了 Python 中的基本变量类型和数据结构,还深入探讨了它们的特性和操作方法。此外,我们还介绍了进阶概念,如不可变与可变类型、内存管理、垃圾回收和类型提示。这些知识将帮助你更好地理解和使用 Python 编程语言,编写高效、可靠的代码。如果你有任何具体问题或需要进一步的解释,请随时告诉我!
2024-12-15 23:58:31 1060
原创 0.基础语法
Python 基础语法涵盖了从安装和运行 Python 程序到理解语言核心概念的各个方面。以下是基于你提供的信息的一个总结,并附有例子帮助你更好地理解。以上就是对 Python 基础语法的一些关键点的总结。希望这些信息对你学习 Python 有所帮助。如果你有任何具体问题或需要进一步的例子,请随时提问!
2024-12-15 23:57:56 945
原创 1.输入输出
Python 的输入输出功能非常强大且易于使用。通过input()和print()函数,你可以轻松地与用户进行交互;通过open()函数,你可以方便地进行文件读写操作。格式化输出则让你能够更灵活地控制输出的内容和格式。
2024-12-15 23:57:12 551
原创 现代C++ 21 any
是 C++17 引入的一个类,用于表示一个类型安全的容器,可以存储任何可复制构造类型的单个值。它提供了一种灵活的方式来处理不同类型的对象,而不需要提前知道具体的类型。是 C++17 引入的一个非常灵活的工具,特别适用于需要存储和处理不同类型值的场景。的设计目标是提供一种通用的、类型安全的方式来进行值的存储和访问。如果你有更多具体的问题或需要进一步的帮助,请随时提问!
2024-12-09 00:44:05 565
原创 现代C++20 variant
是 C++17 引入的一个非常有用的工具,特别适用于需要在多个不同类型之间切换的场景。它提供了类型安全的联合体功能,并且通过。提供了更强的类型安全性和更丰富的功能。它可以在任何给定时间包含多个备用类型之一的值,并且可以处理这些类型的转换和访问。在任何给定时间点要么包含其备用类型之一的值,要么在错误的情况下不包含任何值(这种情况很少见,通常发生在异常抛出时)。是 C++17 引入的一个类模板,用于表示类型安全的联合体(union)。如果你有更多具体的问题或需要进一步的帮助,请随时提问!中的值变得非常方便。
2024-12-09 00:41:09 992
原创 现代C++ 19 expected
是 C++23 引入的一个非常强大的工具,特别适用于处理可能失败的操作。它提供了一种清晰且安全的方式来表示成功值和错误值,并且通过丰富的单子操作(如。总是包含一个值,无论是成功值还是错误值。这使得它在处理函数返回值时更加灵活和强大,尤其是在需要区分成功和失败的情况下。它提供了一种更安全、更清晰的方式来处理可能失败的操作,相比于传统的返回值加错误码的方式,是 C++23 引入的一个类模板,用于表示两种可能的值之一:一个预期的成功值(类型为。这使得它非常适合用于函数返回值,尤其是那些可能会失败的操作。
2024-12-09 00:40:17 1038
原创 现代C++ 18 optional
是 C++17 引入的一个类模板,用于管理一个可能包含值也可能不包含值的对象。它提供了一种更安全、更清晰的方式来处理可能失败的操作或可选的返回值,相比使用指针(如。是 C++ 标准库中一个非常有用的功能,特别适用于处理可能失败的操作或可选的返回值。它提供了清晰的语法和丰富的功能,使得代码更加安全和易读。对象在任何给定时间点要么包含一个值,要么不包含值。,你可以避免使用指针或布尔标志来表示是否存在值,从而减少了潜在的错误和复杂性。如果你有更多具体的问题或需要进一步的帮助,请随时提问!更加直观和易于理解。
2024-12-09 00:38:34 797
原创 现代C++17 tuple
是 C++ 标准库中一个非常强大的工具,特别适用于需要将多个不同类型的数据组合在一起的情况。的“形状”——它的尺寸、元素类型和这些类型的排序——是其类型签名的组成部分,因此它们必须在编译时都可用,并且只能依赖于其他编译时信息。进行许多条件操作——尤其是条件前缀/后缀和过滤——只有在条件可以在编译时进行评估的情况下才有可能。是 C++ 标准库中的一个类模板,用于表示固定大小的异构值集合。中的元素解包到单独的对象中,或者创建一个由引用组成的。的泛化版本,允许存储任意数量的不同类型的元素。的析构函数是平凡的。
2024-12-09 00:37:32 1054
原创 现代C++16 pair
你还可以通过提供自定义的比较函数来控制std::set中std::pair的排序方式。例如,如果你想只根据pair的second// 自定义比较函数,只比较 second 元素// 创建一个 std::set,使用自定义比较函数// 插入一些 pair// 遍历 set 并输出元素return 0;
2024-12-09 00:36:05 1126
原创 现代C++14 交换
是 C++ 标准库中的一个通用函数,用于交换两个对象的值。它最初定义在头文件 中,但从 C++11 开始,它的主要定义被移动到了头文件 中,而数组的特化版本仍然可以在 中找到。此外,某些特定类型的 特化可能在其他头文件中定义,例如 。 的基本形式如下:这个模板函数接受两个引用参数 和 ,并交换它们的值。 的行为是通过调用 类型的移动构造函数和移动赋值运算符来实现的,因此要求 必须满足 和 。 规范:从 C++11 开始, 可以被标记为 ,具体取决于 的移动构造和移动赋值操作是否是 的。
2024-12-09 00:33:11 1312
原创 现代C++12 函数对象
在 C++ 中,函数对象(也称为仿函数或functor)是指实现了函数调用运算符operator()的对象。这意味着你可以像调用普通函数一样调用这些对象。C++ 标准库提供了多种内置的函数对象,并且用户也可以定义自己的函数对象。更高的灵活性:可以将函数对象作为参数传递给其他函数或算法。状态保持:与普通函数不同,函数对象可以拥有内部状态,允许它们在多次调用之间保持信息。更好的性能:编译器可以对函数对象进行内联优化,而普通函数指针通常无法享受这种优化。
2024-12-09 00:29:41 1350
原创 现代C++ 12 内存管理库,智能指针
可以用于管理任何类型的自定义资源,例如操作系统句柄、文件描述符等。// 自定义删除器,用于关闭文件描述符close(fd);// 使用 std::unique_ptr 管理文件描述符// 打开文件并创建 unique_ptrreturn 1;// 写入文件\n";// 文件描述符会在离开作用域时自动关闭return 0;这些示例展示了在各种场景下的应用,包括文件资源、线程资源、数据库连接、动态数组、多态对象链表、共享内存、自定义资源(如句柄)以及网络套接字。通过使用。
2024-12-09 00:28:20 861
vcpkg 文档 vcpkg是一款免费的C/C++包管理器,用于获取和管理库 从1500多个开源库中进行选择,只需一步即可下载和
2024-07-20
SELinux:为任何Linux环境带来世界级的安全性! SELinux为Linux/UNIX集成商、管理员和开发人员提供了最
2024-01-16
SELinux by Example
2024-01-16
SELinux Notebook 是一本关于 SELinux 的开源书籍,最初由 Richard Haines创建并捐赠给 SE
2024-01-15
python Django web 联通用户管理系统实训代码
2023-06-16
python Django web 实训项目的实验报告
2023-06-16
《C++17 完全指南》
2023-01-21
C# Asp MVC 五层 .net 学生管理系统main.tar
2022-09-13
网二维数组的动态创建和释放.pdf 网负号重载(1).pdf 网负号重载pdf 赋值号“==“重载(1).pdf 赋值号"==
2022-07-21
git reset 的三个参数.pdf
2022-06-13
C#实现的学生管理系统,期末实训报告
2022-05-15
在派生类的构造函数的初始化列表中,为什么不能包含对基类子对象的初始化。
2021-07-30
TA创建的收藏夹 TA关注的收藏夹
TA关注的人