可能只会写BUG_社区达人页

个人头像照片
可能只会写BUG
已加入开发者社区1195

勋章 更多

个人头像照片
专家博主
专家博主
个人头像照片
星级博主
星级博主
个人头像照片
技术博主
技术博主
个人头像照片
江湖新秀
江湖新秀

成就

已发布68篇文章
0条评论
已回答0个问题
0条评论
已发布0个视频
github地址

我关注的人 更多

技术能力

兴趣领域
  • C++
  • C语言
擅长领域
技术认证

暂时未有相关云产品技术能力~

暂无个人介绍

暂无精选文章
暂无更多信息

2024年09月

  • 09.06 12:05:39
    发表了文章 2024-09-06 12:05:39

    C++ enable_shared_from_this

    `std::enable_shared_from_this<>` 是 C++11 引入的模板类,用于安全地在类中创建 `std::shared_ptr` 实例。它解决了成员函数中直接创建 `std::shared_ptr` 导致的对象多次销毁和未定义行为问题。通过继承 `std::enable_shared_from_this<>` 并调用 `shared_from_this()` 方法,可以在类的成员函数中安全地获取当前对象的 `std::shared_ptr`。
  • 09.06 12:04:32
    发表了文章 2024-09-06 12:04:32

    奇异递归模板模式

    CRTP(Curiously Recurring Template Pattern,奇异递归模板模式)是一种通过模板类与继承结合实现静态多态性的设计模式。其核心思想是让一个类通过模板参数继承自一个模板类,且该模板参数即为类本身。CRTP能够实现静态多态性,提高运行效率,同时提供代码复用、类型安全及避免菱形继承问题等优点。在C++示例中,`Base`模板基类提供通用功能,`Derived1`和`Derived2`分别继承自`Base<Derived1>`和`Base<Derived2>`,并实现各自的具体功能。
  • 09.05 12:27:30
    发表了文章 2024-09-05 12:27:30

    C++: std::once_flag 和 std::call_once

    `std::once_flag` 和 `std::call_once` 是 C++11 引入的同步原语,确保某个函数在多线程环境中仅执行一次。
  • 09.05 12:26:40
    发表了文章 2024-09-05 12:26:40

    C++ 原子变量atomic variable

    原子变量是 C++11 引入的一种同步机制,用于多线程环境中的无锁、线程安全操作。其操作不可分割,避免了数据竞争和不一致问题。原子变量位于 `<atomic>` 头文件中,支持多种类型如 `std::atomic<T>` 和特化类型。基本用法包括定义原子变量、加载、存储、交换及比较交换操作。内存顺序(如 `std::memory_order_seq_cst`)用于控制内存访问顺序和可见性,适用于不同场景。原子变量常用于线程安全的计数器和标志位等。
  • 09.04 11:57:41
    发表了文章 2024-09-04 11:57:41

    C++(二十)继承

    本文介绍了C++中的继承特性,包括公有、保护和私有继承,并解释了虚继承的作用。通过示例展示了派生类如何从基类继承属性和方法,并保持自身的独特性。此外,还详细说明了派生类构造函数的语法格式及构造顺序,提供了具体的代码示例帮助理解。
  • 09.04 11:56:20
    发表了文章 2024-09-04 11:56:20

    C++(十九)new/delete 重载

    本文介绍了C++中`operator new/delete`重载的使用方法,并通过示例代码展示了如何自定义内存分配与释放的行为。重载`new`和`delete`可以实现内存的精细控制,而`new[]`和`delete[]`则用于处理数组的内存管理。不当使用可能导致内存泄漏或错误释放。
  • 09.04 11:55:22
    发表了文章 2024-09-04 11:55:22

    C++(十八)Smart Pointer 智能指针简介

    智能指针是C++中用于管理动态分配内存的一种机制,通过自动释放不再使用的内存来防止内存泄漏。`auto_ptr`是早期的一种实现,但已被`shared_ptr`和`weak_ptr`取代。这些智能指针基于RAII(Resource Acquisition Is Initialization)原则,即资源获取即初始化。RAII确保对象在其生命周期结束时自动释放资源。通过重载`*`和`->`运算符,可以方便地访问和操作智能指针所指向的对象。
  • 09.04 11:54:18
    发表了文章 2024-09-04 11:54:18

    C++(十七)仿函数

    ### Functor 仿函数简介 Functor(仿函数)是一种通过在类中实现 `operator()` 使其行为像函数的对象。这种方式可以让类拥有更多可定制的功能,同时保持函数般的简洁调用方式。下面展示了如何定义和使用一个计算幂运算的仿函数类,并通过示例说明了其在 `std::sort` 中的优势与灵活性。
  • 09.04 11:53:02
    发表了文章 2024-09-04 11:53:02

    C++(十六)类之间转化

    在C++中,类之间的转换可以通过转换构造函数和操作符函数实现。转换构造函数是一种单参数构造函数,用于将其他类型转换为本类类型。为了防止不必要的隐式转换,可以使用`explicit`关键字来禁止这种自动转换。此外,还可以通过定义`operator`函数来进行类型转换,该函数无参数且无返回值。下面展示了如何使用这两种方式实现自定义类型的相互转换,并通过示例代码说明了`explicit`关键字的作用。
  • 09.04 11:51:36
    发表了文章 2024-09-04 11:51:36

    C++(十五) 运算符重载

    C++中的运算符重载允许对已有运算符的功能进行重新定义,从而扩展语言功能、简化代码并提升效率。重载遵循特定语法,如 `friend 类名 operator 运算符(参数)`。重载时需注意不可新增或改变运算符数量、语义、优先级、结合性和返回类型。常见示例包括双目运算符 `+=` 和单目运算符 `-` 及 `++`。输入输出流运算符 `<<` 和 `>>` 也可重载。部分运算符只能作为成员函数重载。
  • 09.04 11:49:07
    发表了文章 2024-09-04 11:49:07

    C++(十四) friend友元

    友元机制允许非成员函数或类访问私有成员,提高程序效率,但会破坏封装性。友元可以是函数或类,并以关键字`friend`声明。友元函数不是成员函数,需通过对象访问私有成员。友元类使所有成员函数可访问另一个类的私有成员,常用于简化开发。友元声明位置灵活,但不影响访问控制。使用友元需注意其单向性和非传递性。
  • 09.04 11:48:01
    发表了文章 2024-09-04 11:48:01

    C++(十三) 类的扩展

    本文详细介绍了C++中类的各种扩展特性,包括类成员存储、`sizeof`操作符的应用、类成员函数的存储方式及其背后的`this`指针机制。此外,还探讨了`const`修饰符在成员变量和函数中的作用,以及如何通过`static`关键字实现类中的资源共享。文章还介绍了单例模式的设计思路,并讨论了指向类成员(数据成员和函数成员)的指针的使用方法。最后,还讲解了指向静态成员的指针的相关概念和应用示例。通过这些内容,帮助读者更好地理解和掌握C++面向对象编程的核心概念和技术细节。
  • 09.04 11:47:42
    发表了文章 2024-09-04 11:47:42

    C++(十一)对象数组

    本文介绍了C++中对象数组的使用方法及其注意事项。通过示例展示了如何定义和初始化对象数组,并解释了栈对象数组与堆对象数组在初始化时的区别。重点强调了构造器设计时应考虑无参构造器的重要性,以及在需要进一步初始化的情况下采用二段式初始化策略的应用场景。
  • 09.04 11:45:43
    发表了文章 2024-09-04 11:45:43

    栈对象返回的问题 RVO / NRVO

    具名返回值优化((Name)Return Value Optimization,(N)RVO)是一种优化机制,在函数返回对象时,通过减少临时对象的构造、复制构造及析构调用次数来降低开销。在C++中,通过直接在返回位置构造对象并利用隐藏参数传递地址,可避免不必要的复制操作。然而,Windows和Linux上的RVO与NRVO实现有所不同,且接收栈对象的方式也会影响优化效果。
  • 09.04 11:44:51
    发表了文章 2024-09-04 11:44:51

    C++(十)operator=

    本文档介绍了 C++ 中赋值运算符 `operator=` 的重载方法,包括其概念、语法格式及特性,并通过实现一个 `mystring` 类展示了具体的代码示例。赋值运算符用于将一个已创建的对象赋值给另一个已创建的对象,需注意自赋值、内存泄漏和重析构等问题。文档中的 `mystring` 类实现了字符串对象的赋值、拼接及比较等功能。
  • 09.04 11:43:59
    发表了文章 2024-09-04 11:43:59

    C++(九)this指针

    `this`指针是系统在创建对象时默认生成的,用于指向当前对象,便于使用。其特性包括:指向当前对象,适用于所有成员函数但不适用于初始化列表;作为隐含参数传递,不影响对象大小;类型为`ClassName* const`,指向不可变。`this`的作用在于避免参数与成员变量重名,并支持多重串联调用。例如,在`Stu`类中,通过`this->name`和`this->age`明确区分局部变量与成员变量,同时支持链式调用如`s.growUp().growUp()`。
  • 09.04 11:43:16
    发表了文章 2024-09-04 11:43:16

    C++(八)拷贝构造器

    拷贝构造器用于根据已存在的对象创建新对象。其格式固定,系统提供默认的浅拷贝构造器。浅拷贝仅复制指针而非指针指向的对象,适用于所有数据位于栈上的情况;若类中包含堆数据,则需自定义深拷贝以避免多次析构问题。拷贝构造器在对象复制、作为参数或返回值时被调用。示例展示了拷贝构造器的应用及浅拷贝与深拷贝的区别。
  • 09.04 11:41:25
    发表了文章 2024-09-04 11:41:25

    C++(七)封装

    本文档详细介绍了C++封装的概念及其应用。封装通过权限控制对外提供接口并隐藏内部数据,增强代码的安全性和可维护性。文档首先解释了`class`中的权限修饰符(`public`、`private`、`protected`)的作用,并通过示例展示了如何使用封装实现栈结构。接着介绍了构造器和析构器的使用方法,包括初始化列表的引入以及它们在内存管理和对象生命周期中的重要性。最后,通过分文件编程的方式展示了如何将类定义和实现分离,提高代码的模块化和复用性。
  • 09.04 11:40:39
    发表了文章 2024-09-04 11:40:39

    C++(六)Namespace 命名空间

    命名空间(Namespace)是为了解决大型项目中命名冲突而引入的机制。在多库集成时,不同类库可能包含同名函数或变量,导致冲突。C++通过语法形式定义了全局无名命名空间,并允许对全局函数和变量进行作用域划分。命名空间支持嵌套与合并,便于协同开发。其使用需谨慎处理同名冲突。
  • 09.04 11:39:23
    发表了文章 2024-09-04 11:39:23

    C++(五)String 字符串类

    本文档详细介绍了C++中的`string`类,包括定义、初始化、字符串比较及数值与字符串之间的转换方法。`string`类简化了字符串处理,提供了丰富的功能如字符串查找、比较、拼接和替换等。文档通过示例代码展示了如何使用这些功能,并介绍了如何将数值转换为字符串以及反之亦然的方法。此外,还展示了如何使用`string`数组存储和遍历多个字符串。
  • 09.04 11:38:52
    发表了文章 2024-09-04 11:38:52

    C++(四)类型强转

    本文详细介绍了C++中的四种类型强制转换:`static_cast`、`reinterpret_cast`、`const_cast`和`dynamic_cast`。每种转换都有其特定用途和适用场景,如`static_cast`用于相关类型间的显式转换,`reinterpret_cast`用于低层内存布局操作,`const_cast`用于添加或移除`const`限定符,而`dynamic_cast`则用于运行时的类型检查和转换。通过具体示例展示了如何正确使用这四种转换操作符,帮助开发者更好地理解和掌握C++中的类型转换机制。
  • 09.04 11:37:38
    发表了文章 2024-09-04 11:37:38

    C++(三)内联函数

    本文介绍了C++中的内联函数概念及其与宏函数的区别。通过对比宏函数和普通函数,展示了内联函数在提高程序执行效率方面的优势。同时,详细解释了如何在C++中声明内联函数以及其适用场景,并给出了示例代码。内联函数能够减少函数调用开销,但在使用时需谨慎评估其对代码体积的影响。
  • 09.04 11:37:01
    发表了文章 2024-09-04 11:37:01

    C++(二)内存管理

    本文档详细介绍了C++中的内存管理机制,特别是`new`和`delete`关键字的使用方法。首先通过示例代码展示了如何使用`new`和`delete`进行单个变量和数组的内存分配与释放。接着讨论了内存申请失败时的处理方式,包括直接抛出异常、使用`try/catch`捕获异常、设置`set_new_handler`函数以及不抛出异常的处理方式。通过这些方法,可以有效避免内存泄漏和多重释放的问题。
  • 09.04 11:36:08
    发表了文章 2024-09-04 11:36:08

    从C语言到C++

    本文档详细介绍了C++相较于C语言的一些改进和新特性,包括类型检查、逻辑类型 `bool`、枚举类型、可赋值的表达式等。同时,文档还讲解了C++中的标准输入输出流 `cin` 和 `cout` 的使用方法及格式化输出技巧。此外,还介绍了函数重载、运算符重载、默认参数等高级特性,并探讨了引用的概念及其应用,包括常引用和引用的本质分析。以下是简要概述: 本文档适合有一定C语言基础的学习者深入了解C++的新特性及其应用。
  • 09.04 11:33:08
    发表了文章 2024-09-04 11:33:08

    C语言 多路复用 epoll

    本文详细介绍了 Linux 下的非阻塞 IO 多路复用技术——`epoll`,对比 `select` 和 `poll`,`epoll` 使用红黑树结构存储文件描述符,支持动态增删节点,无数量限制,采用回调机制提高效率。文章通过示例代码展示了如何使用 `epoll_create()` 创建 `epoll` 实例,`epoll_ctl()` 管理文件描述符,以及 `epoll_wait()` 等待事件。最后简要分析了 `epoll` 的核心数据结构 `struct eventpoll` 和红黑树节点 `struct epitem`。
  • 09.04 11:31:30
    发表了文章 2024-09-04 11:31:30

    C语言 多路复用 select源码分析

    本文详细介绍了阻塞IO与非阻塞IO的概念及其在Linux系统中的实现方式。首先阐述了常见的IO模型,包括阻塞型、非阻塞型及多路复用IO模型。阻塞IO模型会在IO请求未完成时阻塞进程,而非阻塞IO模型则允许在IO未完成时立即返回。非阻塞IO可通过设置`O_NONBLOCK`标志实现。接着介绍了多路复用IO模型,利用`select`、`poll`和`epoll`等系统调用监控多个文件描述符。`select`函数通过内核检测文件描述符是否就绪,并通知调用者。
  • 09.04 11:26:05
    发表了文章 2024-09-04 11:26:05

    C语言 网络编程(十六)广播和组播

    广播和组播是网络通信的重要方式。广播允许一台主机向子网内所有主机发送数据包,常用于局域网内的消息传播;组播则将数据包发送给特定的一组主机,适用于视频会议等应用场景。广播地址如 `192.168.1.255` 用于同一子网的所有主机。组播地址如 `224.0.0.0` 至 `239.255.255.255` 标识特定主机群。C语言示例展示了如何通过 UDP 实现广播和组播通信。此外,UNIX域套接字用于同一机器上进程间的高效通信。
  • 09.04 11:25:06
    发表了文章 2024-09-04 11:25:06

    C语言 网络编程(十五)套接字选项设置

    `setsockopt()`函数用于设置套接字选项,如重复使用地址(`SO_REUSEADDR`)、端口(`SO_REUSEPORT`)及超时时间(`SO_RCVTIMEO`)。其参数包括套接字描述符、协议级别、选项名称、选项值及其长度。成功返回0,失败返回-1并设置`errno`。示例展示了如何创建TCP服务器并设置相关选项。配套的`getsockopt()`函数用于获取这些选项的值。
  • 09.04 11:24:09
    发表了文章 2024-09-04 11:24:09

    C语言 网络编程(十四)并发的TCP服务端-以线程完成功能

    这段代码实现了一个基于TCP协议的多线程服务器和客户端程序,服务器端通过为每个客户端创建独立的线程来处理并发请求,解决了粘包问题并支持不定长数据传输。服务器监听在IP地址`172.17.140.183`的`8080`端口上,接收客户端发来的数据,并将接收到的消息添加“-回传”后返回给客户端。客户端则可以循环输入并发送数据,同时接收服务器回传的信息。当输入“exit”时,客户端会结束与服务器的通信并关闭连接。
  • 09.04 11:23:14
    发表了文章 2024-09-04 11:23:14

    C语言 网络编程(十三)并发的TCP服务端-以进程完成功能

    这段代码实现了一个基于TCP协议的多进程并发服务端和客户端程序。服务端通过创建子进程来处理多个客户端连接,解决了粘包问题,并支持不定长数据传输。客户端则循环发送数据并接收服务端回传的信息,同样处理了粘包问题。程序通过自定义的数据长度前缀确保了数据的完整性和准确性。
  • 09.04 11:22:14
    发表了文章 2024-09-04 11:22:14

    C语言 网络编程(十二)TCP通信创建-粘包

    TCP通信中的“粘包”现象指的是由于协议特性,发送方的数据包被拆分并在接收方按序组装,导致多个数据包粘连或单个数据包分割。为避免粘包,可采用定长数据包或先传送数据长度再传送数据的方式。示例代码展示了通过在发送前添加数据长度信息,并在接收时先读取长度后读取数据的具体实现方法。此方案适用于长度不固定的数据传输场景。
  • 09.04 11:20:19
    发表了文章 2024-09-04 11:20:19

    C语言 网络编程(十一)TCP通信创建流程---服务端

    在服务器流程中,新增了绑定IP地址与端口号、建立监听队列及接受连接并创建新文件描述符等步骤。`bind`函数用于绑定IP地址与端口,`listen`函数建立监听队列并设置监听状态,`accept`函数则接受连接请求并创建新的文件描述符用于数据传输。套接字状态包括关闭(CLOSED)、同步发送(SYN-SENT)、同步接收(SYN-RECEIVE)和已建立连接(ESTABLISHED)。示例代码展示了TCP服务端程序如何初始化socket、绑定地址、监听连接请求以及接收和发送数据。
  • 09.04 11:17:29
    发表了文章 2024-09-04 11:17:29

    C语言 网络编程(十)TCP通信创建流程---客户端

    在TCP通信中,客户端需通过一系列步骤与服务器建立连接并进行数据传输。首先使用 `socket()` 函数创建一个流式套接字,然后通过 `connect()` 函数连接服务器。连接成功后,可以使用 `send()` 和 `recv()` 函数进行数据发送和接收。最后展示了一个完整的客户端示例代码,实现了与服务器的通信过程。
  • 09.04 11:16:16
    发表了文章 2024-09-04 11:16:16

    C语言 网络编程(九)并发的UDP服务端 以线程完成功能

    这是一个基于UDP协议的客户端和服务端程序,其中服务端采用多线程并发处理客户端请求。客户端通过UDP向服务端发送登录请求,并根据登录结果与服务端的新子线程进行后续交互。服务端在主线程中接收客户端请求并创建新线程处理登录验证及后续通信,子线程创建新的套接字并与客户端进行数据交换。该程序展示了如何利用线程和UDP实现简单的并发服务器架构。
  • 09.04 11:15:16
    发表了文章 2024-09-04 11:15:16

    C语言 网络编程(八)并发的UDP服务端 以进程完成功能

    这段代码展示了如何使用多进程处理 UDP 客户端和服务端通信。客户端通过发送登录请求与服务端建立连接,并与服务端新建的子进程进行数据交换。服务端则负责接收请求,验证登录信息,并创建子进程处理客户端的具体请求。子进程会创建一个新的套接字与客户端通信,实现数据收发功能。此方案有效利用了多进程的优势,提高了系统的并发处理能力。
  • 09.04 11:13:59
    发表了文章 2024-09-04 11:13:59

    C语言 网络编程(七)UDP通信创建流程

    本文档详细介绍了使用 UDP 协议进行通信的过程,包括创建套接字、发送与接收消息等关键步骤。首先,通过 `socket()` 函数创建套接字,并设置相应的参数。接着,使用 `sendto()` 函数向指定地址发送数据。为了绑定地址,需要调用 `bind()` 函数。接收端则通过 `recvfrom()` 函数接收数据并获取发送方的地址信息。文档还提供了完整的代码示例,展示了如何实现 UDP 的发送端和服务端功能。
  • 09.04 11:12:36
    发表了文章 2024-09-04 11:12:36

    C语言 网络编程(六)字节序

    本文介绍了在不同操作系统中查看IP地址和网络状态的方法,包括Windows下的`ipconfig`与Linux下的`ifconfig`命令,并详细解析了网络字节序转换函数。通过`inet_aton()`和`inet_addr()`可将IP字符串转换为网络字节序,而`inet_ntoa()`则实现相反操作。此外,还提供了`htons()`与`ntohs()`等函数进行主机字节序与网络字节序之间的转换,并附带示例代码帮助理解。
  • 09.04 11:11:38
    发表了文章 2024-09-04 11:11:38

    C语言 网络编程(五)Socket和端口

    Socket 是 TCP/IP 五层网络模型中应用层的编程接口,用于实现不同主机间应用程序的双向通信。它作为网络通信的端点,连接应用层与网络协议栈,提供可靠的流式或非流式数据传输服务。Socket 包括流式(SOCKET_STREAM)、数据报(SOCK_DGRAM)和原始套接字(SOCK_RAW)三种类型,分别适用于不同场景。通过 IP 地址和端口号,Socket 能准确识别并转发数据包至指定进程。端口号分为知名端口(1-1023)、注册端口(1024-49151)和动态端口(49152-65535),确保数据准确交付。
  • 09.04 11:09:45
    发表了文章 2024-09-04 11:09:45

    C语言 网络编程(四)常见网络模型

    这段内容介绍了目前被广泛接受的三种网络模型:OSI七层模型、TCP五层模型以及TCP/IP四层模型,并简述了多个网络协议的功能与特性,包括HTTP、HTTPS、FTP、DNS、SMTP、TCP、UDP、IP、ICMP、ARP、RARP及SSH协议等,同时提到了ssh的免费开源实现openssh及其在Linux系统中的应用。
  • 09.04 11:08:10
    发表了文章 2024-09-04 11:08:10

    C语言 网络编程(三)UDP 协议

    UDP(用户数据报协议)是一种无需建立连接的通信协议,适用于高效率的数据传输,但不保证数据的可靠性。其特点是无连接、尽力交付且面向报文,具备较高的实时性。UDP广泛应用于视频会议、实时多媒体通信、直播及DNS查询等场景,并被许多即时通讯软件和服务(如MSN/QQ/Skype、流媒体、VoIP等)采用进行实时数据传输。UDP报文由首部和数据部分组成,首部包含源端口、目的端口、长度和校验和字段。相比TCP,UDP具有更高的传输效率和更低的资源消耗。
  • 09.04 11:02:20
    发表了文章 2024-09-04 11:02:20

    C语言 网络编程(二)TCP 协议

    TCP(传输控制协议)是一种面向连接、可靠的传输层协议,通过校验和、序列号、确认应答等机制确保数据完整性和可靠性。通信双方需先建立连接,再进行通信,采用三次握手建立连接,四次挥手断开连接。TCP支持任意字节长度的数据传输,具备超时重传、流量控制及拥塞控制机制。三次握手用于同步序列号和确认双方通信能力,四次挥手则确保双方均能完成连接关闭操作,保证数据传输的可靠性。
  • 09.04 10:57:51
    发表了文章 2024-09-04 10:57:51

    C语言 网络编程(一)

    网络采用分而治之的方法设计,将其功能划分为不同模块并分层组合。各层实现特定功能,并以透明方式对外提供服务。网络体系结构包括OSI七层模型和实际应用更广泛的TCP/IP五层模型。TCP/IP协议是互联网核心协议,定义了数据封装与传递过程。数据发送时经历从应用层到物理层的逐层封装,接收时则相反。WireShark可用于分析IP数据包格式,其中包含版本、首部长度、总长度等字段。
  • 09.04 10:53:46
    发表了文章 2024-09-04 10:53:46

    静态库和动态库

    本文详细介绍了静态库和动态库的概念及使用方法。在 Linux 系统中,静态库以 `libxxx.a` 形式存在,而动态库则为 `libxxx.so`。文章分别讲解了如何创建和使用这两种库,并提供了具体的命令示例。此外,还介绍了将库文件添加到系统目录的方法,包括直接复制到默认库路径、修改环境变量以及编辑系统配置文件等方案。适合初学者了解库文件的基本操作。
  • 09.04 10:52:57
    发表了文章 2024-09-04 10:52:57

    C语言 字符串操作函数

    本文档详细介绍了多个常用的字符串操作函数,包括 `strlen`、`strcpy`、`strncpy`、`strcat`、`strncat`、`strcmp`、`strncpy`、`sprintf`、`itoa`、`strchr`、`strspn`、`strcspn`、`strstr` 和 `strtok`。每个函数均提供了语法说明、参数解释、返回值描述及示例代码。此外,还给出了部分函数的自实现版本,帮助读者深入理解其工作原理。通过这些函数,可以轻松地进行字符串长度计算、复制、连接、比较等操作。
  • 09.04 10:51:00
    发表了文章 2024-09-04 10:51:00

    C语言 多进程编程(七)信号量

    本文档详细介绍了进程间通信中的信号量机制。首先解释了资源竞争、临界资源和临界区的概念,并重点阐述了信号量如何解决这些问题。信号量作为一种协调共享资源访问的机制,包括互斥和同步两方面。文档还详细描述了无名信号量的初始化、等待、释放及销毁等操作,并提供了相应的 C 语言示例代码。此外,还介绍了如何创建信号量集合、初始化信号量以及信号量的操作方法。最后,通过实际示例展示了信号量在进程互斥和同步中的应用,包括如何使用信号量避免资源竞争,并实现了父子进程间的同步输出。附带的 `sem.h` 和 `sem.c` 文件提供了信号量操作的具体实现。
  • 09.04 10:47:33
    发表了文章 2024-09-04 10:47:33

    C语言 多进程编程(六)共享内存

    本文介绍了Linux系统下的多进程通信机制——共享内存的使用方法。首先详细讲解了如何通过`shmget()`函数创建共享内存,并提供了示例代码。接着介绍了如何利用`shmctl()`函数删除共享内存。随后,文章解释了共享内存映射的概念及其实现方法,包括使用`shmat()`函数进行映射以及使用`shmdt()`函数解除映射,并给出了相应的示例代码。最后,展示了如何在共享内存中读写数据的具体操作流程。
  • 09.04 10:47:10
    发表了文章 2024-09-04 10:47:10

    C语言 多进程编程(五)消息队列

    本文介绍了Linux系统中多进程通信之消息队列的使用方法。首先通过`ftok()`函数生成消息队列的唯一ID,然后使用`msgget()`创建消息队列,并通过`msgctl()`进行操作,如删除队列。接着,通过`msgsnd()`函数发送消息到消息队列,使用`msgrcv()`函数从队列中接收消息。文章提供了详细的函数原型、参数说明及示例代码,帮助读者理解和应用消息队列进行进程间通信。
  • 09.04 10:43:42
    发表了文章 2024-09-04 10:43:42

    C语言 多进程编程(四)定时器信号和子进程退出信号

    本文详细介绍了Linux系统中的定时器信号及其相关函数。首先,文章解释了`SIGALRM`信号的作用及应用场景,包括计时器、超时重试和定时任务等。接着介绍了`alarm()`函数,展示了如何设置定时器以及其局限性。随后探讨了`setitimer()`函数,比较了它与`alarm()`的不同之处,包括定时器类型、精度和支持的定时器数量等方面。最后,文章讲解了子进程退出时如何利用`SIGCHLD`信号,提供了示例代码展示如何处理子进程退出信号,避免僵尸进程问题。
  • 09.04 10:41:50
    发表了文章 2024-09-04 10:41:50

    C语言 多进程编程(三)信号处理方式和自定义处理函数

    本文详细介绍了Linux系统中进程间通信的关键机制——信号。首先解释了信号作为一种异步通知机制的特点及其主要来源,接着列举了常见的信号类型及其定义。文章进一步探讨了信号的处理流程和Linux中处理信号的方式,包括忽略信号、捕捉信号以及执行默认操作。此外,通过具体示例演示了如何创建子进程并通过信号进行控制。最后,讲解了如何通过`signal`函数自定义信号处理函数,并提供了完整的示例代码,展示了父子进程之间通过信号进行通信的过程。
  • 09.04 10:39:10
    发表了文章 2024-09-04 10:39:10

    C语言 多进程编程(二)管道

    本文详细介绍了Linux下的进程间通信(IPC),重点讨论了管道通信机制。首先,文章概述了进程间通信的基本概念及重要性,并列举了几种常见的IPC方式。接着深入探讨了管道通信,包括无名管道(匿名管道)和有名管道(命名管道)。无名管道主要用于父子进程间的单向通信,有名管道则可用于任意进程间的通信。文中提供了丰富的示例代码,展示了如何使用`pipe()`和`mkfifo()`函数创建管道,并通过实例演示了如何利用管道进行进程间的消息传递。此外,还分析了管道的特点、优缺点以及如何通过`errno`判断管道是否存在,帮助读者更好地理解和应用管道通信技术。
  • 发表了文章 2024-09-06

    奇异递归模板模式

  • 发表了文章 2024-09-06

    C++ enable_shared_from_this

  • 发表了文章 2024-09-05

    C++: std::once_flag 和 std::call_once

  • 发表了文章 2024-09-05

    C++ 原子变量atomic variable

  • 发表了文章 2024-09-04

    C++(五)String 字符串类

  • 发表了文章 2024-09-04

    C语言 多路复用 epoll

  • 发表了文章 2024-09-04

    C++(十八)Smart Pointer 智能指针简介

  • 发表了文章 2024-09-04

    C++(七)封装

  • 发表了文章 2024-09-04

    C++(四)类型强转

  • 发表了文章 2024-09-04

    C++(十六)类之间转化

  • 发表了文章 2024-09-04

    C++(十)operator=

  • 发表了文章 2024-09-04

    从C语言到C++

  • 发表了文章 2024-09-04

    C++(三)内联函数

  • 发表了文章 2024-09-04

    栈对象返回的问题 RVO / NRVO

  • 发表了文章 2024-09-04

    C++(十五) 运算符重载

  • 发表了文章 2024-09-04

    C++(六)Namespace 命名空间

  • 发表了文章 2024-09-04

    C++(十四) friend友元

  • 发表了文章 2024-09-04

    C++(九)this指针

  • 发表了文章 2024-09-04

    C++(十七)仿函数

  • 发表了文章 2024-09-04

    C++(二十)继承

正在加载, 请稍后...
滑动查看更多
正在加载, 请稍后...
暂无更多信息
正在加载, 请稍后...
暂无更多信息