新法_社区达人页

个人头像照片
新法
已加入开发者社区310

勋章 更多

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

成就

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

粉丝 更多

技术能力

兴趣领域
擅长领域
技术认证

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

cpp

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

2024年05月

  • 01.16 12:02:14
    发表了文章 2024-01-16 12:02:14

    C++异步网络库workflow入门教程(1)HTTP任务

    创建任务方法原型 在workflow中所有的客户端任务都放在`WFTaskFactory`工厂类中 + `url:`请求的http url + `redirect_max:`表示最大重定向次数。如果在请求过程中遇到重定向,该参数指定了最多允许重定向的次数。 + `retry_max`:表示最大重试次数。如果请求失败,该参数指定了最多可以重试的次数。 + `callback`:这是一个回调函数的指针,用于处理请求的响应。原型为`using http_callback_t = std::function
  • 01.16 12:00:59
    发表了文章 2024-01-16 12:00:59

    Linux获取文件信息的利器stat,fstat,lstat,fstatat

    stat系列函数是C语言中的一个系统调用函数,用于获取文件的信息。通过提供文件路径,它能够返回包含文件属性的结构体数据。
  • 01.16 12:00:30
    发表了文章 2024-01-16 12:00:30

    workFlow c++异步网络库编译教程与简介

    搜狗公司C++服务器引擎,编程范式。支撑搜狗几乎所有后端C++在线服务,包括所有搜索服务,云输入法,在线广告等,每日处理数百亿请求。这是一个设计轻盈优雅的企业级程序引擎,可以满足大多数后端与嵌入式开发需求。 编程范式 结构化并发与任务隐藏回调与内存回收机制
  • 01.16 11:59:54
    发表了文章 2024-01-16 11:59:54

    GO闭包实现原理(汇编级讲解)

    函数闭包一点也不神秘,它就是函数和引用环境而组合的实体。在Go中,闭包在底层是一个结构体对象,它包含了函数指针与自由变量。Go编译器的逃逸分析机制,会将闭包对象分配至堆中,这样自由变量就不会随着函数栈的销毁而消失,它能依附着闭包实体而一直存在。因此,闭包使用的优缺点是很明显的:闭包能够避免使用全局变量,转而维持自由变量长期存储在内存之中;但是,这种隐式地持有自由变量,在使用不当时,会很容易造成内存浪费与泄露。附着闭包实体而一直存在。
  • 01.16 11:59:21
    发表了文章 2024-01-16 11:59:21

    Linux 零拷贝splice函数

    splice是 Linux 系统中用于在两个文件描述符之间移动数据的系统调用。它的主要作用是在两个文件描述符之间传输数据,而无需在用户空间进行数据拷贝。也是零拷贝操作.
  • 01.16 11:58:47
    发表了文章 2024-01-16 11:58:47

    Linux 零拷贝sendfile函数

    sendfile函数允许在两个文件描述符之间直接传输数据,而无需将数据从内核空间复制到用户空间再发送。它在 Linux 系统上首次出现于 2.2 内核版本。效率很高,这被称为零拷贝。out_fd是输出文件描述符,通常是网络套接字描述符。in_fd是输入文件描述符,通常是打开的文件或套接字。offset是一个指向 off_t 类型的指针,用于指定从输入文件的哪个位置开始传输数据。如果为NULL,则从当前文件偏移量开始传输。count是要传输的字节数。
  • 01.16 11:58:15
    发表了文章 2024-01-16 11:58:15

    muduo源码剖析之TcpServer服务端

    TcpServer拥有Acceptor类,新连接到达时new TcpConnection后续客户端和TcpConnection类交互。TcpServer管理连接和启动线程池,用Acceptor接受连接。服务端封装 - muduo的server端维护了多个tcpconnection注意TcpServer本身不带Channel,而是使用Acceptor的Channel。
  • 01.16 11:57:44
    发表了文章 2024-01-16 11:57:44

    muduo源码剖析之TcpConnection连接管理

    TcpCon用于管理一个具体的 TCP 连接,比如消息的接收与发送,完成用户指定的连接回调 connectionCallback。TcpConnection 构造时接收参数有 TCP 连接的 sockfd,服务端地址 localAddr,客户端地址 peerAddr,并通过 Socket 封装 sockfd。并用 Channel 管理该 sockfd,向 Channel 注册可读、可写、关闭、出错回调函数,用于 Poller 返回就绪事件后 Channel::handleEvent() 执行相应事件的回调。
  • 01.16 11:56:28
    发表了文章 2024-01-16 11:56:28

    QT自定义信号,信号emit,信号参数注册

    使用signals声明返回值是void在需要发送信号的地方使用emit 信号名字(参数)进行发送在需要链接的地方使用connect进行链接ct进行链接。
  • 01.16 11:55:56
    发表了文章 2024-01-16 11:55:56

    qt槽函数的四种写法

    QT槽函数的四种写法
  • 01.16 11:55:25
    发表了文章 2024-01-16 11:55:25

    Qt3个窗口类的区别

    一个普通的窗口,不包含菜单栏、状态栏,除了登录界面,新建项目时建议使用QWidget,因为大部分的窗口可能都要做成无边框窗口,需要自定义标题栏,实现拉伸等;QMainWindow使用的场景不多。:对话框,常用来做登录窗口、弹出窗口(例如设置界面):包含菜单栏、工具栏、状态栏。
  • 01.16 11:54:56
    发表了文章 2024-01-16 11:54:56

    三分钟学完Git版本控制常用指令

    Git本地有三个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)。如果在加上远程的git仓库(Remote Directory)就可以分为四个工作区域。文件在这四个区域之间的转换关系如下:
  • 01.16 11:54:23
    发表了文章 2024-01-16 11:54:23

    muduo源码剖析之Connector客户端连接类

    Connector负责主动发起连接,不负责创建socket,只负责连接的建立,外部调用Connector::start就可以发起连接,Connector具有重连的功能和停止连接的功能,连接成功建立后返回到TcpClient。
  • 01.16 11:53:48
    发表了文章 2024-01-16 11:53:48

    muduo源码剖析之TcpClient客户端类

    muduo用TcpClient发起连接,TcpClient有一个Connector连接器,TCPClient使用Conneccor发起连接, 连接建立成功后, 用socket创建TcpConnection来管理连接, 每个TcpClient class只管理一个TcpConnecction,连接建立成功后设置相应的回调函数。很显然,TcpClient用来管理客户端连接,真正连接交给Connector。
  • 01.16 11:53:08
    发表了文章 2024-01-16 11:53:08

    加密算法小结

    加密算法解密小结 MD5 提取结果通常是 32 位,不受明文长度影响; Base64 编码结果末尾通常会出现一或二个等于符号,受明文长度影响; 一长串无规律数字与字母组合的字符大概率是 AES、DES、SHA 相关加密; SHA1 加密结果值为 40 位,不受明文长度影响; SHA256 加密结果值为 64 位,不受明文长度影响; 另外,AES、RSA 等对称和非对称加密都喜欢将结果值用 Base64 进行编码,这样易于传递; 如果你看到一长串字符里出现 + 号、\ 号和末尾的 = 号,那大概率就是上一行描
  • 01.16 11:52:35
    发表了文章 2024-01-16 11:52:35

    muduo源码剖析之TimerQueue类

    通过timerfd实现的定时器功能,为EventLoop扩展了一系列runAt,runEvery,runEvery等函数TimerQueue中通过std::set维护所有的Timer,也可以使用优先队列实现muduo的TimerQueue是基于timerfd_create实现,这样超时很容易和epoll结合起来。等待超时事件保存在set集合中,注意set集合的有序性,从小到大排列,整个对TimerQueue的处理也就是对set集合的操作。
  • 01.16 11:52:03
    发表了文章 2024-01-16 11:52:03

    muduo源码剖析之Timer定时器

    Timer 类是 muduo 网络库中的一个定时器类,用于在指定的时间间隔后执行某个任务。Timer 类提供了一系列的方法来创建、启动、停止和删除定时器,以及设置定时器的时间间隔和回调函数等。在 muduo 网络库中,Timer 类被广泛应用于各种网络任务中,例如定期发送心跳包、更新缓存、清理资源等。通过使用 Timer 类,我们可以方便地实现定时任务,提高网络应用程序的可靠性和稳定性。:启动定时器,在指定的时间间隔后调用回调函数。:停止定时器,不再执行定时任务。
  • 01.16 11:51:34
    发表了文章 2024-01-16 11:51:34

    muduo源码剖析之InetAddress

    InetAddress 类在 muduo 网络库中被广泛使用,用于表示网络中的通信实体的地址信息,例如服务器地址、客户端地址等。通过 InetAddress 类,我们可以方便地操作 IP 地址和端口号,实现网络通信的功能。InetAddress 类是 muduo 网络库中的一个重要类,用于表示网络中的 IP 地址和端口号。源码比较简单,已经编写详细注释。
  • 01.16 11:51:04
    发表了文章 2024-01-16 11:51:04

    muduo源码剖析之SocketOps类

    对socket设置API的封装。比较简单,已经编写注释。
  • 01.16 11:50:36
    发表了文章 2024-01-16 11:50:36

    muduo源码剖析之Socket类

    封装了一个sockfd相关的设置。比较简单,已经编写注释。
  • 01.16 11:49:56
    发表了文章 2024-01-16 11:49:56

    muduo源码剖析之Acceptor监听类

    Acceptor类用于创建套接字,设置套接字选项,调用socket()->bind()->listen()->accept()函数,接受连接,然后调用TcpServer设置的connect事件的回调。listen()//在TcpServer::start中调用封装了一个listen fd相关的操作,用于mainLoop接受器封装,实质上就是对Channel的多一层封装监听连接 当新连接进入时,调用Socket::accept创建套接字,触发TcpServer的回调TcpServer通过该接口设置回调,
  • 01.16 11:49:16
    发表了文章 2024-01-16 11:49:16

    Linux文件描述符和文件指针互转

    文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描述符这一概念往往只适用于UNIX、Linux这样的操作系统。FILE *指针变量标识符;其中FILE应为大写,它实际上是由系统定义的一个结构,该结构中含有文件名、文件状态和文件当前位置等信息。在编写源程序时不必关心FILE结构的细节。
  • 01.16 11:48:47
    发表了文章 2024-01-16 11:48:47

    C++单元测试GoogleTest和GoogleMock十分钟快速上手(gtest&gmock)

    gtest是Google开源的一个跨平台的(Liunx、Mac OS X、Windows等)的 C++ 单元测试框架,可以帮助程序员测试 C++ 程序的结果预期。它提供了丰富的断言、致命和非致命判断、参数化、”死亡测试”等等。另一方面,gmock并不是一个独立的测试框架,而是gtest的辅助框架,主要用于模拟没有实现的类的操作,以便在没有完整类的情况下进行测试。通过配合使用gtest和gmock,开发者可以编写出更为复杂且健壮的C++单元测试。
  • 01.16 11:48:14
    发表了文章 2024-01-16 11:48:14

    muduo源码剖析之Buffer缓冲区类

    Buffer封装了一个可变长的buffer,支持廉价的前插操作,以及内部挪腾操作避免额外申请空间使用vector作为缓冲区(可自动调整扩容)
  • 01.16 11:47:33
    发表了文章 2024-01-16 11:47:33

    muduo源码剖析之poller/EpollPoller多路复用类

    poller是I/O多路复用接口抽象虚基类,对I/O多路复用API的封装,muduo提供了EPollPoller和PollPoller派生类(epoll和poll),所以不支持select.newDefaultPoller()默认选择epoll。
  • 01.16 11:46:54
    发表了文章 2024-01-16 11:46:54

    Linux文件描述符和打开文件之间的关系

    文件描述符和打开的文件之间似乎呈现出一一对应的关系。然而,实际并非如此。多个文件描述符指向同一打开文件,这既有可能,也属必要。这些文件描述符可在相同或不同的进程中打开。要理解具体情况如何,需要查看由内核维护的 3 个数据结构。进程级的文件描述符表。系统级的打开文件表。文件系统的 i-node 表。上述讨论揭示出如下要点。两个不同的文件描述符,若指向同一打开文件句柄,将共享同一文件偏移量。
  • 01.16 11:46:18
    发表了文章 2024-01-16 11:46:18

    Linux创建临时文件mkstemp()tmpfile()

    有些程序需要创建一些临时文件,仅供其在运行期间使用,程序终止后即行删除。 很多编译器程序会在编译过程中创建临时文件。GNU C 语言函数库为此而提供了一系列库函数。(之所以有“一系列”的库函数,部分原因是由于这些函数分别继承自各种 UNIX 实现。)本节将介绍其中的两个函数:mkstemp()和 tmpfile()。
  • 01.16 11:45:39
    发表了文章 2024-01-16 11:45:39

    muduo源码剖析之EventLoopThreadPool

    EventLoopThreadPool是EventLoopThread类的线程池类封装了若干个EventLoopThread的线程池,所有者是一个外部的EventLoop。
  • 01.16 11:42:48
    发表了文章 2024-01-16 11:42:48

    muduo源码剖析之EventLoopThread

    EventLoopThread类包装了一个thread类和一个EventLoop类,(one loop per thread)是封装了一个EventLoop的独立线程。
  • 01.16 11:42:19
    发表了文章 2024-01-16 11:42:19

    muduo源码剖析之EventLoop事件循环类

    EventLoop.cc就相当于一个reactor,多线程之间的函数调用(用eventfd唤醒),epoll处理,超时队列处理,对channel的处理。运行loop的进程被称为IO线程,EventLoop提供了一些API确保相应函数在IO线程中调用,确保没有用互斥量保护的变量只能在IO线程中使用,也封装了超时队列的基本操作。
  • 01.16 11:41:48
    发表了文章 2024-01-16 11:41:48

    c++以exception_ptr传递异常

    自C++11起,C++标准库提供一个能力:将异常存储于类型为exception_ptr的对象中,稍后才在其他情境(context)中处理它们:
  • 01.16 11:41:15
    发表了文章 2024-01-16 11:41:15

    muduo源码剖析之AsyncLogging异步日志类

    AsyncLogging是muduo的日志,程序如果直接让文件写日志可能会发生阻塞,muduo前端设计了2个BufferPtr,分别是currentBuffer_和nextBuffer_,还有一个存放BufferPtr的vector(buffers_)。多个前端线程往currentBuffer_写数据,currentBuffer_写满了将其放入buffers_,通知后端线程读。前端线程将currentBuffer_和nextBuffer_替换继续写currentBuffer_。
  • 01.16 11:40:44
    发表了文章 2024-01-16 11:40:44

    Linux进程与线程的内核实现

    task_struct称为进程描述符结构,该结构定义在文件中。进程描述符中包含一个具体进程的所有信息 进程描述符中包含的数据能完整地描述一个正在执行的程序:它打开的文件,进程的地址空间,挂起的信号,进程的状态等
  • 01.16 11:39:58
    发表了文章 2024-01-16 11:39:58

    muduo源码剖析之channel通道类

    channel是muduo中的事件分发器,它只属于一个EventLoop,Channel类中保存着IO事件的类型以及对应的回调函数,每个channel只负责一个文件描述符,但它并不拥有这个文件描述符。channel是在epoll和TcpConnection之间起沟通作用,故也叫做通道,其它类通过调用channel的setCallbcak来和建立channel沟通关系。
  • 01.16 11:39:21
    发表了文章 2024-01-16 11:39:21

    常见进程控制函数记录

    进程控制函数记录
  • 01.16 11:38:53
    发表了文章 2024-01-16 11:38:53

    Linux截断文件truncate和ftruncate

    truncate()和 ftruncate()系统调用将文件大小设置为 length 参数指定的值。
  • 01.16 11:38:20
    发表了文章 2024-01-16 11:38:20

    C语言malloc与free实现原理

    malloc()的实现很简单。它首先会扫描之前由 free()所释放的空闲内存块列表,以求找到尺寸大于或等于要求的一块空闲内存。(取决于具体实现,采用的扫描策略会有所不同。例如,first-fit 或 best-fito。)如果这一内存块的尺寸正好与要求相当,就把它直接返回给调用者。如果是一块较大的内存,那么将对其进行分割,在将一块大小相当的内存返回给调用者的同时,把较小的那块空闲内存块保留在空闲列表中。 如果在空闲内存列表中根本找不到足够大的空闲内存块,那么 malloc()会调用 sbrk()以分配更多
  • 01.16 11:37:45
    发表了文章 2024-01-16 11:37:45

    Linux在文件特定偏移量处读写pread和pwrite

    系统调用 pread()和 pwrite()完成与 read()和 write()相类似的工作,只是前两者会在 offset 参数所指定的位置进行文件 I/O 操作,而非始于文件的当前偏移量处,且它们不会改变文件的当前偏移量。
  • 01.16 11:37:07
    发表了文章 2024-01-16 11:37:07

    Linux alloca函数栈动态内存分配

    Linux C提供了在**栈中动态分配内存**的函数`alloca`,用法和`malloc`一样,但不用`free`,因为他是在栈中分配空间,超出定义域后自动释放
  • 01.16 11:31:57
    发表了文章 2024-01-16 11:31:57

    Doxygen常用语法与字段记录

    【代码】Doxygen常用语法与字段记录。
  • 01.16 11:30:12
    发表了文章 2024-01-16 11:30:12

    Linux文件空洞与fallocate快速创建大文件

    在UNIX文件操作中,文件位移量可以大于文件的当前长度,在这种情况下,对该文件的下一次写将延长该文件,并在文件中构成一个空洞,这一点是允许的。位于文件中但没有写过的字节都被设为 0。如果 offset 比文件的当前长度更大,下一个写操作就会把文件“撑大(extend)”。这就是所谓的在文件里创造“空洞(hole)”。没有被实际写入文件的所有字节由重复的 0 表示。空洞是否占用硬盘空间是由文件系统(file system)决定的。大部分文件系统是不占用的。
  • 01.16 11:25:46
    发表了文章 2024-01-16 11:25:46

    Linux io多块读写readv函数和writev函数

    fd参数是被操作的目标文件描述符。iov参数的类型是iovec结构数组,该结构体描述一块内存区。iovcnt参数是iov数组的长度,即有多少块内存数据需要从fd读出或写到fd。readv和writev在成功时返回读出/写入fd的字节数,失败则返回-1并设置errno。readv函数将数据从文件描述符读到分散的内存块中,即分散读;writev函数则将多块分散的内存数据一并写入文件描述符中,即集中写。
  • 01.16 11:25:01
    发表了文章 2024-01-16 11:25:01

    Linux dup函数文件重定向

    dup函数创建一个新的文件描述符,该新文件描述符和原有文件描述符file_descriptor指向相同的文件、管道或者网络连接。并且dup返回的文件描述符总是取系统当前可用的最小整数值。dup2和dup类似,不过它将返回第一个不小于file_descriptor_two的整数值。dup和dup2系统调用失败时返回-1并设置errno。有时我们希望把标准输入重定向到一个文件,或者把标准输出重定向到一个网络连接(比如CGI编程)。
  • 01.16 11:24:23
    发表了文章 2024-01-16 11:24:23

    protobuf万字语法详解

    当用protocol buffer编译器来运行.proto文件时,编译器将生成所选择语言的代码,这些代码可以操作在.proto文件中定义的消息类型,包括获取、设置字段值,将消息序列化到一个输出流中,以及从一个输入流中解析消息。
  • 01.16 11:23:34
    发表了文章 2024-01-16 11:23:34

    socket常用api记录

    (2) close 终止读和写两个方向的数据传送。既然TCP连接是全双工的,有时候我们需要告知对端我们已经完成了数据发送,即使对端仍有数据要发送给我们。这就是我们在前一节中遇到的str_cli 函数在批量输入时的情况。图6-12展示了这样的情况下典型的函数调用。(1) close 把描述符的引用计数减1,仅在该计数变为0时才关闭套接字。我们已在4.8节讨论过这一点。使用shutdown 可以不管引用计数就激发TCP的正常连接终止序列(图2-5中由FIN开始的4个分节)。(建立与tcp服务器的连接)
  • 01.16 11:22:39
    发表了文章 2024-01-16 11:22:39

    socket字节序转换与地址转换函数记录

    【代码】socket字节序转换与地址转换函数记录。
  • 01.16 11:21:47
    发表了文章 2024-01-16 11:21:47

    socket名称与地址转换api

    注意gethostbyname & gethostbyaddr函数已被引入 getaddrinfo 函数弃用。敦促应用程序的开发人员使用 getaddrinfo 函数而不是 gethostbyname。
  • 01.16 11:21:02
    发表了文章 2024-01-16 11:21:02

    c++网络库Libevent万字详解

    libevent和libev都是c语言实现的异步事件库;通过注册异步事件,库检测事件触发,从而库根据发生事件的先后顺序,调用相应回调函数进行处理;事件包括:网络io事件,定时事件,信号事件;事件循环:等待并分发事件;用于管理事件;libevent 和 libev 主要封装了异步事件库与操作系统的交互;让用户不用关注平台的差异,只需着手事件的具体处理;创建事件处理框架event_base event_base_new()创建新事件event event_new()
  • 01.16 11:19:15
    发表了文章 2024-01-16 11:19:15

    Linux进程间的通信万字总结大全

    POSIX(Portable Operating System Interface for Computing Systems)是由IEEE 和ISO/IEC 开发的一簇标准。该标准是基于现有的UNIX 实践和经验,描述了操作系统的调用服务接口,用于保证编制的应用程序可以在源代码一级上在多种操作系统上移植运行。它是在1980 年早期一个UNIX 用户组(usr/group)的早期工作的基础上取得的。该UNIX 用户组原来试图将AT&T 的系统V 和Berkeley CSRG的BSD 系统的调用接口之间的区别
  • 01.16 11:18:38
    发表了文章 2024-01-16 11:18:38

    socket套接字选项getsockopt&setsockopt

    setsockopt()函数用于任意类型、任意状态套接口的设置选项值。尽管在不同协议层上存在选项,但本函数仅定义了最高的“套接口”层次上的选项。在Unix网络编程中通常用到getsockopt和setsockopt两个函数来获取和设置套接口的选项。getsockopt()函数用于获取任意类型、任意状态套接口的选项当前值,并把结果存入optval。
  • 发表了文章 2024-05-15

    Linux 零拷贝sendfile函数

  • 发表了文章 2024-05-15

    muduo源码剖析之TcpConnection连接管理

  • 发表了文章 2024-05-15

    C++单元测试GoogleTest和GoogleMock十分钟快速上手(gtest&gmock)

  • 发表了文章 2024-05-15

    Linux创建临时文件mkstemp()tmpfile()

  • 发表了文章 2024-05-15

    muduo源码剖析之Acceptor监听类

  • 发表了文章 2024-05-15

    muduo源码剖析之AsyncLogging异步日志类

  • 发表了文章 2024-05-15

    C语言malloc与free实现原理

  • 发表了文章 2024-05-15

    Linux alloca函数栈动态内存分配

  • 发表了文章 2024-05-15

    Linux dup函数文件重定向

  • 发表了文章 2024-05-15

    socket套接字选项getsockopt&setsockopt

  • 发表了文章 2024-05-15

    C/C++原子操作与atomic CAS底层实现原理

  • 发表了文章 2024-05-15

    Linux获取文件信息的利器stat,fstat,lstat,fstatat

  • 发表了文章 2024-05-15

    GO闭包实现原理(汇编级讲解)

  • 发表了文章 2024-05-15

    muduo源码剖析之Connector客户端连接类

  • 发表了文章 2024-05-15

    muduo源码剖析之TcpClient客户端类

  • 发表了文章 2024-05-15

    muduo源码剖析之TimerQueue类

  • 发表了文章 2024-05-15

    muduo源码剖析之SocketOps类

  • 发表了文章 2024-05-15

    Linux文件描述符和打开文件之间的关系

  • 发表了文章 2024-05-15

    muduo源码剖析之Buffer缓冲区类

  • 发表了文章 2024-05-15

    muduo源码剖析之EventLoopThread

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