Linux开发
文章平均质量分 74
Linux在秋名山
一起学习嵌入式!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++里的统一初始化:花括号走天下
C++11统一初始化({})解决了初始化语法的混乱问题,支持所有类型初始化,包括内置类型、数组和容器。相比传统方式,它能防止窄化转换带来的精度损失,提高类型安全性。对类成员初始化更优雅,可直接在声明时赋默认值。但需注意当类存在initializer_list构造函数时,{}会优先匹配该构造函数。统一初始化提升了代码一致性、安全性和可读性,是推荐的初始化方式。原创 2025-09-21 09:52:26 · 306 阅读 · 0 评论 -
网络抓包神器:tcpdump 的常用技巧
摘要:本文介绍了Linux下轻量级抓包工具tcpdump的使用技巧。作者首先指出在嵌入式环境中tcpdump比Wireshark更加实用,然后详细讲解了基本命令格式、必备参数(-nn、-s0、-vv、-l等)、常用过滤表达式(按主机、端口、协议等)以及抓包结果保存与分析方法。文章还提供了多个典型应用场景示例,并给出使用建议,如实时观察时加-l参数、先用大范围再缩小过滤范围等。最后强调掌握这些技巧可以快速定位大多数网络问题,是运维和开发中的实用工具。原创 2025-09-13 17:04:12 · 307 阅读 · 0 评论 -
C++ std::optional,让代码更优雅
C++17引入的std::optional提供了一种优雅的解决方案,用于处理"可能有值可能无值"的场景。相比传统使用特殊值(-1/nullptr)或输出参数的方式,std::optional使代码更清晰、更安全。文章介绍了其基本用法,包括创建、判断和取值操作,并展示了三个典型应用场景:表示可能失败的返回值、替代"bool+输出参数"模式以及作为可选函数参数。这个小工具能显著提升代码可读性和健壮性,值得在项目中推广应用。原创 2025-08-30 15:57:37 · 453 阅读 · 0 评论 -
程序卡住了?先不要Kill!GDB来救你!
当程序卡住但不崩溃时,不要直接kill -9重启。可用gdb调试工具分析:1)通过ps aux查找进程PID;2)用sudo gdb -p <PID>连接进程;3)执行thread apply all bt查看所有线程调用栈。通过栈信息可判断死锁、IO阻塞或死循环等问题。文中用C++死锁示例演示了该方法,能清晰定位线程卡在锁获取的位置。这种方法能有效保留现场,快速定位问题根源。原创 2025-08-24 14:32:21 · 323 阅读 · 0 评论 -
使用C++做一个进度条
摘要:通过ANSI转义序列实现终端动态输出效果。使用\033[2K\r清除当前行并返回行首,结合C++实现进度百分比和彩色进度条。示例代码展示了如何动态刷新输出,提升命令行程序的交互体验。该技巧适用于状态更新和命令行动画效果,让终端输出更生动有趣。原创 2025-07-26 15:01:56 · 564 阅读 · 0 评论 -
C++ 引用魔法揭秘:std::move 和 std::forward 的真相
摘要:本文深入讲解C++中的两个重要工具函数std::move和std::forward。std::move本质是类型转换工具,将左值转为右值以触发移动构造/赋值,而非真正移动数据。std::forward则用于完美转发,在模板编程中保持参数原始值类别(左值/右值)。通过代码示例展示了它们的使用场景和运行效果,帮助读者理解这两个关键函数在C++移动语义和泛型编程中的作用。文章强调正确理解这两个工具对提升C++编程效率的重要性。原创 2025-07-26 14:57:28 · 410 阅读 · 0 评论 -
Wireshark 显示过滤实战技巧:快速锁定你要的包
《Wireshark显示过滤实用指南》摘要:本文介绍了Wireshark显示过滤器的核心用法,帮助用户从海量数据包中精准定位目标。关键技巧包括:1)端口/IP地址过滤(如udp.port==12345、ip.src==192.168.1.100);2)逻辑组合(AND/OR/NOT);3)协议筛选(http/dns等);4)右键快速生成表达式等实用功能。文章还提供了保存常用过滤器和自定义颜色高亮等进阶技巧,通过"协议.字段 运算符 值"的标准表达式格式,让网络流量分析更加高效直观。原创 2025-07-08 20:30:58 · 863 阅读 · 0 评论 -
深入理解 C++ 中的引用:左值引用与右值引用
本文介绍了C++的左值引用与右值引用原创 2025-06-27 22:09:52 · 369 阅读 · 0 评论 -
C++左值、右值你分清了吗
本文简明解析了C++中左值(Lvalue)与右值(Rvalue)的核心区别。左值是有名称、可获取地址的持久实体(如变量),右值则是临时生成、无法取地址的表达式结果(如计算值或函数返回值)。通过具体代码示例和对比表格,文章清晰展示了两者在身份、地址获取、生命周期等方面的关键差异。理解这一基础概念对C++编程、调试和优化至关重要,特别是掌握"是否有名""能否取地址""是否临时"三个判断标准,能够帮助开发者正确处理相关编译问题。原创 2025-06-15 19:21:35 · 308 阅读 · 0 评论 -
GTest进阶:使用Test Fixture、Mock与覆盖率构建可维护的单元测试
本文通过一个加法器案例,详细讲解了GTest的高级应用技巧。首先介绍了Test Fixture(测试夹具)的使用方法,通过继承::testing::Test来共享测试初始化和清理逻辑;其次演示了如何使用Mock模拟依赖对象的行为;最后指导了如何利用lcov工具生成代码覆盖率报告。文章通过具体代码示例,展示了如何测试加法器的正常和溢出场景,并分析了覆盖率未达100%的原因。这些方法可以帮助开发者编写更清晰、可维护的测试代码,并评估测试的完原创 2025-06-07 14:39:26 · 1344 阅读 · 0 评论 -
使用GTest进行单元测试的简明指南
本文介绍了如何使用Google Test(GTest)框架进行C++单元测试。通过一个简单的加法函数示例,展示了从零搭建测试环境的过程,包括项目结构、代码实现、测试编写和CMake配置。文章强调单元测试的重要性,它能早期发现bug、增强代码信心、提供文档和满足流程要求。示例项目包含头文件、实现文件和测试文件,使用CMake管理构建流程,演示了基本的EXPECT_EQ断言用法。最后指出单元测试的实际价值并提供了代码仓库地址,鼓励开发者将单元测试作为开发习惯。原创 2025-06-01 16:34:47 · 879 阅读 · 0 评论 -
为什么要学会Rebase,而不总是用Merge
摘要: 本文深入解析git rebase的核心机制,通过与git merge对比,揭示其"重写分支基础"的本质。当主分支更新时,rebase将特性分支的提交重新应用到最新主分支节点(如C→C'),形成线性历史,避免冗余合并节点。操作流程包括:创建分支→主分支更新→执行rebase→处理冲突。关键注意:rebase会改写提交历史,适合本地分支整理,但需谨慎用于已共享的远程分支。掌握该技巧可使Git历史更简洁清晰。(150字)原创 2025-05-24 21:09:13 · 804 阅读 · 0 评论 -
Git时间旅行:优雅地改写历史提交
本文介绍了如何在 Git 中优雅且安全地修改提交历史。首先,文章解释了 Git 历史的本质,强调每个提交都有唯一的哈希值,任何修改都会生成新的哈希。接着,文章详细讲解了在个人分支上修改历史的方法,包括使用 --amend 修改最近一次提交和通过 rebase 修改更早的提交。最后,文章提醒在多人协作中修改历史的风险,建议谨慎使用强制推送,并提出了三个问题以帮助判断是否适合修改历史。文章旨在帮助开发者更好地维护 Git 提交记录,同时避免在协作中引发问题。原创 2025-05-18 12:06:50 · 505 阅读 · 0 评论 -
Git Merge实战手册:分支合并的智慧
本文详细介绍了Git合并的原理、策略及冲突解决方法。合并的本质是寻找两个分支的共同祖先,通过差异对比生成新版本。常见的合并策略包括普通合并(Fast-Forward)、保留历史的合并(--no-ff)和压缩合并(Squash),分别适用于不同场景。合并冲突时,Git会标记冲突部分,开发者需手动解决并提交。文章还提供了合并前的预演、日志分析、更新本地分支等建议,帮助开发者避免常见问题,提升团队协作效率。掌握这些技巧,能有效应对合并中的各种挑战。原创 2025-05-10 15:50:59 · 546 阅读 · 0 评论 -
C++ 数据结构之std::vector介绍
std::vector是C++标准库中的动态数组,能够自动管理内存大小,适用于处理不确定数量的数据。其关键特性包括动态伸缩、快速访问和内存连续排列。核心操作包括创建与初始化、增删元素和随机访问。进阶操作涉及处理动态对象,如游戏中的敌人。性能优化建议包括预分配空间、选择正确的构造方式、高效删除技巧和利用现代C++特性。避坑指南提醒避免盲目使用[]操作符、在循环中反复扩容和忽视迭代器失效问题。std::vector是处理动态数组时的首选工具,合理使用可显著提升程序效率。原创 2025-05-02 22:27:48 · 300 阅读 · 0 评论 -
C++ UML 类图介绍
UML类图是面向对象分析与设计中的核心工具,用于描述系统的静态结构。它通过展示类、接口、属性、方法及其之间的关系,帮助开发者理解系统架构,减少沟通成本,并为系统实现提供可视化方案。类图的核心组成部分包括类(Class)和接口(Interface),类用矩形表示,分为类名、属性和方法三部分,接口则用带<<interface>>的矩形表示,仅包含方法声明。类之间的关系包括依赖(Dependency)、关联(Association)、聚合(Aggregation)、组合(Compositi原创 2025-04-03 21:40:37 · 1413 阅读 · 0 评论 -
在C语言中,可以用free释放NULL吗?
在C语言中,动态分配的内存需要通过free函数手动释放,以避免内存泄漏。当指针可能为空时,调用free(ptr)是否安全?根据C99标准,free函数在ptr为空指针时不执行任何操作,因此释放空指针是安全的,不会导致程序崩溃或未定义行为。这一特性简化了代码编写,并提高了程序的健壮性。在实际编程中,建议在释放指针后将其设置为NULL,以避免悬空指针问题。这一设计避免了额外的检查负担,确保了free(NULL)的安全性。原创 2025-03-14 21:46:47 · 727 阅读 · 0 评论 -
C++ 格式化输出浮点数
在性能分析或日志记录中,打印时间戳并比较其差异时,C++默认的浮点数输出格式可能导致时间戳显示不直观。默认情况下,C++会根据数值大小自动选择固定小数格式或科学计数法格式,当数值超出[1e-4, 1e6]范围时,会使用科学计数法。为了解决这一问题,可以使用std::fixed强制浮点数以固定小数格式输出,并结合std::setprecision控制小数点后的位数。通过这种方式,可以确保时间戳以固定小数格式输出,清晰展示具体的时间值。原创 2025-02-28 18:51:54 · 670 阅读 · 0 评论 -
Windows安装Ubuntu24.04双系统指南
本文详细介绍了在Windows电脑上安装Ubuntu 24.04双系统的步骤。首先,准备工作包括备份数据、下载Ubuntu ISO镜像、制作启动U盘,并通过磁盘管理为Ubuntu腾出至少50GB的空间。接着,系统设置部分指导用户关闭Windows的快速启动功能,并在BIOS中确保启动模式为UEFI、关闭安全启动、将SATA配置为AHCI模式。最后,安装Ubuntu的步骤包括从U盘启动、选择语言、键盘布局、网络连接、安装方式(选择与Windows共存)、创建用户、选择时区等。安装完成后,用户可以通过GRUB菜原创 2025-02-15 12:24:32 · 7495 阅读 · 7 评论 -
如何将tag推送到远程仓库
在多人协作的软件开发项目中,tag(标签)是Git中用于标记和管理版本的重要机制。通过为特定版本打上标签,可以方便集成人员拉取代码,提高版本的可追溯性。推送标签到远程仓库的操作包括:推送单个标签(git push origin <tag_name>)、推送多个标签(git push origin <tag_name_1> <tag_name_2>)、推送所有本地标签(git push origin --tags)以及删除远程标签(git push origin --del原创 2024-12-07 17:40:11 · 1333 阅读 · 0 评论 -
GDB调试进阶
在实际工作中,掌握这些高级功能可以大大提高开发和调试效率。如果你还没用过这些功能,不妨在下次调试中尝试一下~最后,欢迎大家关注我的公众号《嵌入式3分钟》,一起学习嵌入式~原创 2024-11-30 20:25:30 · 725 阅读 · 0 评论 -
SSH免密登陆的原理与应用
SSH免密登录通过非对称加密技术实现,使用公钥和私钥进行身份验证,提高了登录效率和安全性。其工作原理包括连接建立、公钥验证、挑战-响应和响应验证四个步骤。具体应用时,首先在客户端生成密钥对,然后将公钥配置到远程服务器的authorized_keys文件中,最后即可实现免密登录。为确保安全,需正确设置远程服务器上相关文件的权限。这种方法不仅减少了密码输入的麻烦,还降低了密码泄露的风险。原创 2024-10-15 08:43:02 · 1126 阅读 · 0 评论 -
GDB基本使用指南
GDB(GNU Debugger)是一个强大的调试工具,主要用于调试 C、C++ 和其他语言编写的程序。它让我们可以监控、控制程序的执行,从而查找并修复错误。原创 2024-10-15 08:41:47 · 608 阅读 · 0 评论 -
Float类型的有效位数有几位
C语言中的Float类型是单精度浮点数,占用4个字节(32位),按照IEEE 754标准存储。Float类型的有效位数是7位,这意味着它可以精确表示7位十进制数。当数值超过16777216时,Float类型无法精确表示所有整数,导致精度丢失。例如,Float可以表示16777218,但无法表示16777217,因为后者的有效位数超过了24位二进制的限制。通过理解有效位数和科学计数法,可以更好地掌握Float类型的精度和表示范围。原创 2024-09-16 11:27:21 · 3303 阅读 · 0 评论 -
Linux 如何将pwd的结果同步复制到剪贴板
pwd命令用于显示当前路径,但通常我们还需要复制路径,操作繁琐。通过结合xclip工具,可以实现显示路径的同时将其复制到剪贴板。具体步骤为:安装xclip,使用echo -n $(pwd) | xclip -selection clipboard && pwd命令,既显示路径又复制路径。为简化操作,可以将该命令设置为别名cpwd,并添加到.bashrc或.zshrc中。此外,通过X11转发功能,cpwd命令也可在远程登录时使用,方便复制远程路径。这一方法显著提升了路径复制的效率,适用于本地和原创 2024-09-07 10:40:46 · 1297 阅读 · 0 评论 -
Linux 如何存储Core dump文件
在Linux开发中,程序崩溃如Segmentation fault是常见问题,尤其在问题不易复现或处于生产环境时,直接使用gdb调试效率较低。此时,core dump文件的重要性凸显,它是程序崩溃时自动生成的内存快照,包含寄存器状态、调用栈等信息,可用于分析崩溃原因。默认情况下,Linux可能不会生成core dump文件,需通过ulimit -c unlimited解除大小限制,并配置/proc/sys/kernel/core_pattern指定存储路径。通过编写故意崩溃的C程序,可验证core dump原创 2024-08-31 14:45:47 · 1071 阅读 · 0 评论
分享