- 博客(56)
- 资源 (19)
- 收藏
- 关注
原创 Linux进程间通信详解
IPC机制速度通信方式同步性复杂度场景管道中字节流否低父子进程,简单通信消息队列中消息结构是中任务调度,解耦系统共享内存高共享内存否高大量数据交换信号量高控制机制是高临界区、同步控制。
2025-04-08 09:30:33
229
原创 C++浅谈转型操作符
这些操作符各自针对不同的转换需求,提供了更严格的类型检查和清晰的语义表达,迫使开发者在进行转换时必须明确意图,避免了隐式转换可能带来的安全隐患和混淆问题。风格的转换语法没有明确的标签来指示转换的类型,仅仅依靠圆括号包装目标类型,使得代码中转换操作不易被识别。无论是数值转换、继承关系转换,还是底层位转换和常量转换,都能通过不同的操作符表达出来,避免了任何类型都能互相转换的糟糕现象。代码时,只要存在类型转换的可能,就应显式地使用相应的转型操作符,而非依赖于隐式转换或传统的。为了解决旧式转换造成的问题,C++
2025-04-05 09:12:36
257
原创 C指针类型,8个例子讲明白
这是一个整型的二级指针,用于存放一个内存的地址,该地址对应的内存中存放了另一个整型变量的地址。假定(*va[3])是X,外面是 int (X)(int),所以指针是指向函数的。这是一个数组,该数组里面的成员是整型的指针,分别指向int型的内存。注意,该地址类型是int [3]型,他的值是0x40004000,void (*va)(int) 这是一个指针,指向一个函数,这是一个整型指针变量,用于存放一个整型变量的地址,函数的形参是是int型,返回值是int型。这是一个指针,指向一个int型数组。
2025-04-03 14:23:47
143
原创 C结构体内存对齐
想象一下,你去超市购物,收银台前排了一长队。超市为了提高效率,规定:购买 1-3 件商品的顾客,必须站在 3 的倍数位置(第 3、6、9... 个位置)购买 4-7 件商品的顾客,必须站在 4 的倍数位置(第 4、8、12... 个位置)购买 8 件以上商品的顾客,必须站在 8 的倍数位置(第 8、16、24... 个位置)这样会怎样?队伍中肯定会出现空位!但收银员处理起来更有效率,因为他能快速判断每位顾客大概需要多长时间。内存对齐就是这个道理。
2025-04-03 14:19:44
833
原创 GDB调试工具详解
GDB,全称 GNU Debugger,是 GNU 开源组织发布的一款功能强大的程序调试工具。自 1986 年由理查德・斯托曼(Richard Stallman)编写以来,它不断发展和完善,如今已成为 Linux 系统下调试程序的首选工具 ,在整个 Linux 生态系统中占据着举足轻重的地位。它就像是一位经验丰富的侦探,深入程序的 “案发现场”,帮助开发者们找到隐藏在代码中的 “罪犯”——Bug。
2025-04-03 10:02:25
383
原创 C++ Lambda 默认捕获缺陷
所以你看,默认捕获模式[&]和[=][&]可能导致悬空引用,像个不定时炸弹 💣。[=]对指针的捕获可能是悬空指针的温床 💀,而且它对static变量的“无视”会让你误以为 Lambda 是完全独立的,其实它可能还和外部状态藕断丝连。尽量避免使用默认捕获模式!老老实实地显式捕获你需要的每一个变量,无论是按引用[&var]还是按值[var](或者 C++14 的广义捕获这就像是在和编译器签合同 ✍️,白纸黑字写清楚你的 Lambda 到底依赖谁、怎么依赖。
2025-04-01 08:54:32
886
原创 C++线程池
线程池(Thread Pool)是一种预先创建并维护若干线程的并发编程模型,所有任务提交后由池内线程处理,避免频繁创建销毁线程带来的系统开销。资源复用:复用固定数量的线程处理大量短时任务控制并发:防止线程数无控制增长导致内存耗尽或CPU调度崩溃任务排队:合理调度和管理任务执行顺序。
2025-04-01 08:39:20
432
原创 5个C++ 语法糖让你的代码效率提升
在 C++ 的发展历程中,不断引入了许多新特性,这些特性就像语法糖一样,让代码变得更加简洁、高效和易读。今天,我们就来详细介绍 5 个实用的 C++ 语法糖:auto、lambda、范围for、nullptr和std::initializer_list,帮助你提升代码编写效率。
2025-03-31 08:50:09
563
原创 Qt多线程同步机制
在多线程编程中,常常需要确保多个线程对共享资源的访问不会产生数据竞争。为此,我们使用同步机制来保证线程安全。在Qt/C++中,常见的同步机制包括QMutexstd::mutexQSemaphoreQAtomicInt将详细介绍这些机制,配合代码示例和注释,帮助你理解这些工具在多线程中的应用。互斥锁是一种常见的同步工具,用于防止多个线程同时进入临界区(共享资源的代码段)。在任何时刻,只有一个线程可以持有互斥锁并进入临界区,其他线程必须等待锁被释放后才能继续执行。
2025-03-30 09:09:40
566
原创 Qt正则表达式QRegularExpression
正则表达式(Regular Expression,简称正则)是一个特殊的文本字符串,它描述了搜索文本的模式。我们可以通过正则表达式定义匹配规则,进而用于文本搜索、替换、验证和分组提取数据。正则表达式广泛应用于数据验证、文本解析等场景。在 Qt 中,类用来处理正则表达式。相比于旧版的QRegExp类,提供了更现代、更强大的功能,特别是支持 ECMAScript 标准,使得它能够处理更复杂的正则表达式。在 Qt 中,
2025-03-28 20:40:35
745
原创 2025年15个图标库推荐
这几年写代码下来,我深深体会到:一个好的图标库对项目的影响有多大。图标不仅能提升用户体验,还能省去大量说明文字,让页面瞬间高级感满满。
2025-03-28 09:40:28
955
原创 指针的前世今生
当然,指针的用途远不止于此。想象一下,你的程序中有上百个数据,你需要记住每个数据分别存在哪个具体地址,这简直是噩梦!它就像是一张写有门牌号的纸条,告诉你:"嘿,你要找的东西在这个地址!想象一下,计算机的内存就像一条超长的街道,街道上有成千上万的房子,每个房子都有自己的门牌号(地址)。这就好比:我不给你我家的钥匙副本,而是直接告诉你我家的地址,你可以直接来我家拿东西或放东西。,我们改变了指针所指向地址上的值,因此 number 的值也变成了100。时,又创建了一个新的副本,对这个副本的修改也不会影响原始的。
2025-03-26 09:12:36
629
原创 Qt进程间通信:QSharedMemory 使用详解
是 Qt 中用于进程间共享内存的类。它允许多个进程共享一块内存区域,从而避免数据传输时的 IO 操作,提高通信速度。通过共享内存,多个进程可以直接读写这块内存,而无需经过文件或网络传递。QSharedMemory 的核心特点唯一键(Key)标识每块共享内存通过唯一的键(字符串)标识。不同进程通过相同的键连接到共享内存。线程安全性提供锁机制(lock()和unlock())以保护共享内存的读写。跨平台支持Qt 的跨平台特性使可以在不同操作系统上无缝使用。
2025-03-24 12:14:53
887
原创 C++编码8个性能技巧
复制大型对象是一种隐蔽的性能杀手,在C++11及之后的版本中,移动语义可以通过“移动”资源来帮助你避免不必要的复制。异常功能很强大,但如果过度使用可能成本很高,特别是在对性能要求苛刻的代码中。我可是吃了大亏才明白这个道理的,当时我的实时应用程序就因为过度的异常处理开始出现卡顿了。我以前一直没重视移动语义,直到我意识到我的程序慢得像蜗牛爬坡一样。这可能看起来有点吹毛求疵,但在紧密的循环中,每一微秒都很重要。的时候——就好像我的应用程序深吸了一口气然后放松下来了一样。我的程序性能一落千丈。
2025-03-22 14:52:20
390
转载 libuv使用openssl
在调用SSL_connect,SSL_read和SSL_write时,openssl可能需要读取更多的数据或者发送数据,这两个返回值表明openssl的意图。send_data_after_handshake函数也很简单,就是将需要发送的数据写入wirte_bio中然后丢给libuv发送,还需要处理有数据要读取的情况。最后是read_data_after_handshake,这个函数将openlls解密好的数据读取出来,同时还需要处理在读取数据的时候需要写入数据的问题。啰啰嗦嗦说了这么多,上代码才是王道。
2025-03-21 19:10:33
237
原创 Linux命令 - lsof
立刻定位到 PID 1234 的 node 进程占用了 3000 端口。可以查看进程与网络文件(如 sockets)的关联。的未授权连接,可能存在恶意软件。Linux 中一切皆文件,
2025-03-21 08:49:09
389
原创 C++ 关键字 volatile
例如,如果一个变量在某段代码中没有发生变化,编译器可能会将其缓存到寄存器中,而不再从内存中读取。但有些情况下,变量的值可能会在。在嵌入式开发中,通常需要访问硬件寄存器(如 I/O 端口、设备状态寄存器等),这些寄存器的值可能随时改变。在多线程环境下,一个线程可能会修改变量,而另一个线程需要检测该变量的变化。确保线程每次读取的都是最新值,而不是编译器优化后的缓存值。,编译器可能会直接优化掉这个循环,导致代码不按预期执行。),此时变量的值可能会在未知的时间点被修改。,如果涉及多个线程的同步,建议使用。
2025-03-18 08:52:09
429
原创 轻松搞懂字符串转Long整数
std::stol(String to Long)是 C++ 标准库中的一个字符串转换函数,它用于将或转换为long类型的整数,并支持不同进制的转换(如二进制、十进制、十六进制等)。它的实现方式类似于std::stoi,但返回long类型,适用于更大范围的整数。
2025-03-17 15:25:59
374
原创 QString::section 与 QString::split
将字符串按分隔符拆分为多个字段,适合需要逐一处理每个字段的场景。支持字段范围选择、负索引计数,以及通过标志控制分隔符的处理方式。提取字符串中特定字段,例如路径解析或选择特定的 CSV 列。需要通过标志控制字段提取行为(如跳过空字段、保留分隔符)。更适合提取特定字段或范围,常用于路径解析、字段选择等场景。需要处理路径、CSV 数据等分隔符格式化的字符串。用于提取字符串中基于分隔符的特定字段或字段范围。不支持字段范围选择,但可以处理空字段。更适合处理单个字段,默认保留空字段。需要逐一处理字符串中的所有字段。
2025-03-15 11:40:32
267
原创 C++单例进化论
private:// ✨ 如果使用成员变量形式,C++17允许inlinepublic:// ... 防止拷贝和移动🔍C++17强化inline静态成员革命 → 声明与定义合二为一,彻底告别传统C++的"声明-定义分离"噩梦(对比C++98:无需在.cpp文件单独定义→ 消除链接错误风险)基于指针的单例实现简化 → 支持延迟初始化同时保持代码优雅(传统指针方案需处理双重检查锁 + 内存屏障 → C++17可结合与智能指针实现更安全方案)
2025-03-09 12:49:18
790
原创 typedef 和 using 有什么区别?
在 C++ 编程中,类型别名(Type Aliases)是为已有类型定义新名称的一种机制,能够显著提升代码的可读性和可维护性。的基本功能,还支持模板别名,使其在泛型编程和复杂类型声明中更加灵活。在实际开发中,类型别名能够提升代码的可读性,而在面试中,熟练掌握。类型别名可以将冗长或复杂的类型声明简化为更直观的名称,从而让代码更易于理解。在 C++ 面试中,考官可能会要求考生展示对类型别名的理解,尤其是。的模板别名功能使其在泛型编程中大放异彩,能够简化复杂的类型声明。的所有功能,还扩展了对模板的支持。
2025-03-08 18:54:58
407
原创 Linux 之 sed
sed,全称Stream Editor(流编辑器)不打开文件,直接在命令行中修改、删除、替换文本,并且可以把修改后的结果输出到终端或保存到文件。换句话说,它不像vimnano那样需要手动编辑文件,而是自动化处理文本,适合处理日志、批量修改文件、数据提取等场景。📌sed '指令' 文件这个 指令 就是告诉sed你想干嘛,比如替换、删除、显示某些行。✅输出PeterBobCharlieBob💡: 代表最后一行📌 语法2,$👉 表示从第 2 行到最后一行d👉 表示删除。
2025-02-19 10:42:48
879
原创 C/C++ 指针避坑20条
看完这些指针的坑,是不是觉得其实也没那么可怕?指针就是个地址,搞清楚这个地址指向哪,什么时候有效,什么时候无效,基本就能避免大多数问题了。
2025-02-18 11:07:06
1005
原创 awk 命令实战教程
就像一个心灵手巧的老师傅,awk 最擅长的就是把大段大段的文本"解剖"开来,精准地找出你想要的信息。我们从最简单的日志过滤开始,逐步深入到了复杂的统计分析。记住,解决复杂的问题时,可以先拆分成小步骤,一步一步来处理。接下来我们来点高级的,带大家用 awk 处理日常工作中最常见的几个场景。还记得我遇到的第一个挑战:leader 让我从一个几GB的服务日志里找出造成系统故障的元凶。这些都是我平时工作中最常用的简单命令,基本够用了。今天,就让我用一个开发工程师的视角,带你认识这个陪伴了我 6 年多的老朋友。
2025-02-17 08:45:05
720
原创 深入浅出epoll
epoll是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。另一点原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。
2025-02-17 08:42:18
759
原创 C++最通用的编码规范
尽量避免使用宏定义,因为宏定义会导致代码难以调试和维护。如果确实需要使用宏定义,应确保其命名具有唯一性,并避免与变量、函数等命名冲突。
2025-01-08 10:23:28
978
原创 非ROOT权限程序拥有更多权限之setcap
setcap 是一个 Linux 命令,用于设置文件的 POSIX 能力。这些能力允许某些二进制文件在没有 root 权限的情况下执行特定操作,以提高系统安全性。该命令通常用于提供更少的特权访问,而不是将权限完全授予 root 用户。
2025-01-01 14:17:27
1199
原创 Linux下signal信号汇总
对于 SIGKILL 信号,进程是不能忽略的。假如您发送SIGKILL信号给进程,Linux就将进程停止在那里。在某些情况下,假如进程正在进行作业而且不能中断,那么进程可以忽略这个SIGTERM信号。SIGTERM 比较友好,进程能捕捉这个信号,根据您的需要来关闭程序。sigfillset 也初始化信号集合,只是将信号集合设置为所有信号的集合;sigemptyset 函数初始化信号集合set,将set 设置为空;sigaddset 将信号signo 加入到信号集合之中;
2024-12-30 18:17:08
1089
原创 sudo命令免密执行
注意: 有的时候你的将用户设了nopasswd,但是不起作用,原因是被后面的group的设置覆盖了,需要把group的设置也改为nopasswd。sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt、reboot、su等等。移动光标,到一行root ALL=(ALL) ALL的下一行,按a,进入append模式,输入。这样就把自己加入了sudo组,可以使用sudo命令了。然后按Esc,再输入:w保存文件,再:q退出。设置su为不需要密码。
2024-12-30 15:18:29
674
原创 linux 采用printf 实现光标移动及背景色和字体颜色设置
nC 光标向右 n 行。<<若已至屏幕最右端则无效>><<若已至屏幕最左端则无效>>[nP 删除光标右边n个字符,剩下部分左移,光标不动。<<若至屏幕顶端则无效>><<若至屏幕底端则无效>>[nM 删除光标之下n行,剩下行往上移,光标不动。[J或[0J 清除光标右下屏所有字符,光标不动。[K或[0K 清除光标行右边全部字符,光标不动。[1K 清除光标行左边全部字符,光标不动。[1J 清除光标左上屏所有字符,光标不动。[nX 清除光标右边n个字符,光标不动。[n@ 在当前光标处插入n个字符。
2024-11-10 18:00:06
304
1
原创 C++右值引用和std::move
引用本质是别名,可以通过引用修改变量的值,传参时传引用可以避免拷贝,其实现原理和指针类似。个人认为,引用出现的本意是为了降低C语言指针的使用难度,但现在指针+左右值引用共同存在,反而大大增加了学习和理解成本。在上边的代码里,看上去是左值a通过std::move移动到了右值ref_a_right中,那是不是a里边就没有值了?是一个非常有迷惑性的函数,不理解左右值概念的人们往往以为它能把一个变量里的内容移动到另一个变量,可见左右值的概念很清晰,有地址的变量就是左值,没有地址的字面值、临时值就是右值。
2024-11-10 16:54:37
503
原创 #define宏定义中的#,##,@#,\ 这些符号的神奇用法
其作用是:将宏定义中的传入参数名转换成用一对双引号括起来参数名字符串。其只能用于有传入参数的宏定义中,且必须置于宏定义体中的参数名前。只能用于有传入参数的宏定义中,且必须置于宏定义体中的参数名前。作用是将传的单字符参数名转换成字符,以一对单引用括起来其实就是给。的左右符号必须能够组成一个有意义的符号,否则预处理器会报错。如果你想要对展开后的宏参数进行字符串化,则需要使用两层宏。宏中被字符串化,所以它不是优先被宏展开。(反斜线)表示下一行继续此宏的定义。宏的一个普通参数,在被传递到。时,可以省略参数输入。
2024-11-10 11:23:54
252
原创 通过C++跨平台的预编译宏来区分不同的操作系统:Win32/Win64/Unix/Linux/MacOS
操作系统宏定义说明_WIN32_WIN64Apple__APPLE__Apple__MACH__iPhoneMacOSAndroid__unix__Linux__linux__Solaris__sunHP UX__hpuxBSDBSDFreeBSDNetBSD__NetBSD__OpenBSD请注意,宏对 GNU GCC 和 G++ 有效,并且可能因其他编译器而异。我们将通过一些基本示例,并探讨这些功能在现实生活中的使用。
2024-11-10 10:49:24
1786
转载 Linux 中如何编写 .service文件
如果此进程需要为系统中的其他进程提供服务, 那么必须在该服务启动之前先建立好通信渠道(例如套接字), 这样,在创建主服务进程之后、执行主服务进程之前,即可启动后继单元, 从而加快了后继单元的启动速度。有时候, 单元需要执行一个程序以完成某个设置(启动), 然后又需要再执行另一个程序以撤消先前的设置(停止), 而在设置持续有效的时段中,该单元应该视为处于"活动"(active)状态, 但实际上并无任何程序在持续运行。当此选项设置的命令被执行的时候,应该假定服务正处于完全正常的运行状态,可以正常的与其通信。
2024-05-31 08:45:57
825
电力通信协议模拟工具 SimElecProtocol
2022-06-02
SM2椭圆曲线算法软件.rar
2019-06-05
IEC61850服务端模拟软件 V1.0
2019-03-13
IEC61850 MMS客户端工具 V1.0.2
2018-11-12
IEC61850 SCL文件Schema校验
2017-12-14
久为影音 V2.0.2
2017-09-08
久为影音 V2.0.1
2017-09-08
久为影音 2.0.1
2017-09-07
久为影音 2.0
2017-09-07
NeHe OpenGL Qt4教学代码
2016-11-28
Qt+JS 饼,柱等图形展示
2016-07-04
IEC61850 MMS客户端工具 V1.0.1
2015-06-25
IEC61850 MMS客户端工具
2015-06-11
IEC61850 SCL文件编辑工具
2014-12-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人