自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 ELF文件节结构和其他os下的可执行文件、目标文件、共享库、核心转储的文件格式

ELF文件(可执行与可链接格式)是Unix-like系统中的标准二进制文件格式,用于可执行文件、目标文件、共享库等。其结构包含ELF Header(文件元信息)、Program Header Table(运行时加载段)、Sections(功能区域)和Section Header Table(节属性描述)。ELF文件提供链接视图(关注节)和执行视图(关注段)。常见节包括.text(代码)、.data(初始化数据)、.bss(未初始化数据)、.symtab(符号表)等,各具特定类型和标志。程序头部表则管理内存加

2026-01-21 20:00:03 980

原创 链接错误(collect2: ld 返回1):原型与定义不符(undefined reference)

检查 poly.c 是否有 poly_show 的定义。如果没有,添加或链接包含定义的文件。确保声明和定义完全匹配(参数、返回类型、名称)。用nm会显示未定义符号 (U poly_show)。如果是多文件,修改 Makefile 添加所有 .o 文件。编译时加开启警告,早发现不匹配。这个推断完全基于错误消息的结构和C构建过程。如果有视频完整代码或更多上下文,能更精确确认"原型不符"的具体点。这不是简单的"函数没写",而更可能是函数声明和实现的接口不一致。

2026-01-16 17:22:14 198

原创 创建链表注意项(三):使用内存池减少malloc开销(用标志位或空闲链表)

摘要:C语言中一次性预分配多个链表节点(如malloc(sizeof(node)*n))虽能减少内存碎片,但释放时存在严重限制。关键点在于free()只能释放整个malloc块,不能单独释放其中部分节点,否则会导致未定义行为。正确做法包括:1)整体释放整个内存块;2)使用内存池管理节点状态(通过标记位);3)混合策略(区分池内/独立分配节点)。必须注意free()参数必须是malloc直接返回的指针,而非内存块内部地址。(149字)

2026-01-16 16:19:16 340

原创 创建链表注意项(二):malloc函数的使用/替代;errno;内存释放

free。

2026-01-14 17:30:55 307

原创 C语言malloc函数的errno(错误返回值)

摘要:标准C规定malloc失败时返回NULL且不设置errno,但POSIX和Windows通常会设置errno为ENOMEM。最佳实践是以返回值为准判断失败,在POSIX/Windows环境下可附带读取errno记录日志。相关函数如calloc/realloc行为类似,posix_memalign则直接返回错误码而非设置errno。仅当需要区分内存耗尽或其他错误时,errno才有参考价值,但不可单独依赖。不同平台(Linux/Windows等)的具体实现可能有所差异。

2026-01-14 16:28:54 407

原创 创建链表注意项(一):创建和插入节点的函数最好返回成功创建节点的个数

该代码实现了链表的两种创建方式:尾插法和头插法,并返回成功创建的节点数。主要功能包括:1)创建新节点并处理内存分配失败情况;2)尾插法顺序创建链表;3)头插法逆序创建链表;4)打印和释放链表。代码具有完善的错误处理机制,在内存分配失败时会自动释放已创建节点,并返回成功创建的节点数。示例演示了两种创建方法的使用,并展示了链表的打印和内存释放过程。整个实现结构清晰,包含必要的辅助函数,便于调试和维护。

2026-01-14 13:42:39 111

原创 消息队列Message Queue(MQ),队列链表(queue),消费者,生产者

消息队列(MQ)是队列数据结构在分布式系统中的工程化实现,核心仍保持FIFO特性,但增加了更多实用功能。与数据结构中的队列相比,MQ支持持久化存储、分布式部署、多消费者模式及可靠性机制(如ACK确认、重试等)。典型实现包括RabbitMQ、Kafka等,它们通过生产者-消费者模型实现系统间异步通信,生产者发送消息到队列,消费者按顺序处理。MQ不仅具备队列的基本特性,还扩展了路由、延迟队列等功能,成为现代分布式系统的重要基础设施。

2026-01-14 12:02:14 680

原创 int (*a)[3]和int (*b)[4]的核心区别:步长不同

本文包含两部分内容:1) C语言中指针数组的正确声明方式,强调int (*a)[3]与int *a[3]的区别,指出前者是指向3个int元素数组的指针,步长为3*sizeof(int);后者是包含3个int指针的数组。2) 介绍国家气象中心(NMC)及其域名nmc.cn,包含单词"meteorological"(气象的)的音标和例句。两部分内容无直接关联,分别涉及编程语法和气象术语。

2026-01-13 21:52:08 365

原创 老代码(例如链表)复用:编译为libxxx.a库文件

本文介绍了C语言项目中代码复用的标准做法,包括将常用数据结构封装成独立库文件的方法。重点讲解了如何通过Makefile将.o文件打包成静态库(.a),以及ar rcs命令的具体用法和参数含义。同时解释了Makefile中的自动化变量$@、$^和$<的作用,这些变量分别代表目标文件、所有依赖文件和第一个依赖文件。文章还提供了静态库命名规范建议和实际使用示例,说明了这种标准化做法既便于项目扩展,又能提高代码复用性,特别适合嵌入式或小型项目开发。

2026-01-13 16:33:26 129

原创 C语言里面的中断程序:“exit()”和“return返回”

摘要:《C Primer Plus》示例代码films3.c中,初始化阶段使用exit(EXIT_FAILURE)处理内存分配失败这类致命错误,以立即终止程序;而main函数末尾用return 0表示正常结束。exit()会强制终止整个程序,适合处理不可恢复错误;return则从当前函数返回,在main中使用时效果与exit()相似但语义更清晰。两者都会执行清理操作,但exit()可在程序任何位置调用实现全局终止,体现了防御性编程思想。

2026-01-08 17:10:54 336

原创 C语言数组初始化

摘要:本文总结了C语言数组声明的常见错误和正确用法。主要错误包括:1) 数组大小必须为正整数,不能为0;2) 二维数组声明时必须指定第二维大小。正确用法包括:1) 使用初始化列表让编译器推断数组大小;2) 函数参数中数组声明等价于指针;3) 二维数组初始化时编译器可推断第一维大小。重点强调了数组声明时编译器需要足够信息来确定内存分配。

2026-01-07 17:31:12 188

原创 经典数据结构练习题:链表实现2个多项式的合并

经典数据结构教材如严蔚敏《数据结构》、《算法导论》等都将链表实现多项式运算作为标配例题。该练习的经典性体现在:多项式天然稀疏,链表能高效存储非零项;加法操作完美展示有序链表合并过程,需处理同次项系数相加和零系数节点删除;难度适中,全面考察链表基本操作和边界处理。这道题常见于大学课程实验、考研真题和编程面试,是数据结构学习的经典范例。

2026-01-07 14:22:48 702

原创 关闭VS Code中的GitHub Copilot部分功能,降低远程开发机服务器的CPU内存使用率

如果你想完全关闭自动建议,可以试着禁用 “All files” 或使用命令面板搜索 “Copilot toggle” 来切换。启用后,Copilot 会考虑整个项目中的所有文件来生成更广泛、更上下文相关的代码补全建议(包括跨文件的影响)。禁用它可以限制建议范围,减少干扰(有些用户通过禁用这个来关闭自动 ghost text 建议,只用手动触发)。截图中用蓝色方块标记,可能表示当前文件是 C 语言(或刚好是当前模式),这是 Copilot 的高级功能(简称 NES),它不只补全当前光标处的代码,

2025-12-28 13:53:34 634

原创 本地下载vscode server安装包(tar.gz)然后上传至服务器开发机

本文介绍了在无网络环境下安装VS Code Server的离线方法。步骤包括:1)从日志获取Commit ID;2)在有网机器下载对应版本的server文件(约70MB);3)通过scp传输到目标机器;4)创建指定目录并解压文件(注意新版和老版的路径差异);5)重新连接VS Code Remote-SSH验证安装。还提供了解决常见问题的建议,如删除旧目录、使用镜像源加速下载等。该方法可绕过VS Code自动下载服务器的步骤,适用于网络受限环境。

2025-12-28 13:38:12 515

原创 C语言函数的双循环里面的return语句会直接退出双循环并返回

return语句会直接终止整个函数执行,而不仅仅是退出当前循环。示例代码演示了在二维数组中查找目标值时,一旦找到就立即通过return返回结果,后续循环不再执行。这与break仅退出单层循环不同。若只需退出多重循环而不终止函数,需使用标志变量或goto语句。该机制可有效提高程序执行效率,避免不必要的循环操作。

2025-12-28 13:14:13 187

原创 程序崩溃free(): double free detected in tcache 2

文章摘要: 通过分析core文件的内存片段,可以追踪程序崩溃前的执行路径。尽管没有使用-g编译选项,但仍可通过以下方法定位问题: 利用strings命令提取core文件中的字符串信息,搜索关键函数名(如list_destroy)和相关日志; 根据程序输出缓冲区的残留日志顺序推断崩溃点; 从printf格式化字符串中推断数据结构内容。 分析发现程序在list_destroy函数执行过程中发生了double free错误。这是由于GLIBC内存管理器检测到重复释放内存所致。核心文件中同时保留了.rodata段和

2025-12-23 18:03:03 301

原创 gcc/g++ err: 警告: 数据定义时没有类型或存储类/data definition has no type or storage class

摘要:GCC编译C代码时出现"数据定义无类型或存储类"警告,通常由隐式int规则(C99已禁止)或全局变量初始化错误导致。解决方法包括显式声明函数返回值类型和使用严格编译选项。另一常见错误是"double free detected in tcache 2",表明程序多次释放同一内存块,可能因指针操作错误或链表销毁逻辑不当引起。建议使用Valgrind、AddressSanitizer等工具调试,并在free后置空指针。这些错误提示均反映代码中存在需要修复的内存管理问

2025-12-22 20:06:08 342

原创 安卓里运行Linux

摘要:三款安卓运行Linux的实用工具推荐:UserLAnd适合新手一键安装Ubuntu等系统;Andronix提供优化版系统,部分付费功能;AnLinux完全开源免费。均支持命令行和VNC图形桌面(XFCE/LXDE),利用PRoot技术无需root,适合开发、服务器模拟等用途,简单易用。(149字)

2025-12-22 18:01:55 265

原创 c/c++指针回填(Pointer Backpatching)

指针回填是编程中预留指针位置后续填充的技术,主要用于编译器跳转地址处理、数据结构构建(如链表/图节点连接)和动态链接场景。其核心是先创建指针占位,待目标地址确定后再回填,适用于无法一次性确定所有指针指向的情况。

2025-12-15 16:46:20 225

原创 “链表按索引插入”在业界用的多吗?

摘要:高性能C编程中,链表通常用于O(1)的头尾插入操作,而非按索引插入(O(N))。Linux内核链表不存储长度,通过节点指针操作;Redis链表虽存储长度但主要使用头尾插入API。工程建议:定义包含长度的链表结构体以便快速判断越界和获取长度,而简单练习中可通过遍历判断边界。多数开源项目避免提供按索引插入的API,强调选择合适数据结构的重要性。

2025-12-15 14:45:58 146

原创 ps aux|grep pid 和 ps -p pid 的区别

Linux 命令 ps -p 和 ps aux | grep 都能查看进程信息,但存在关键区别。ps -p 直接通过 PID 精确查找进程,输出简洁高效;而 ps aux | grep 会扫描所有进程并通过文本匹配,可能产生误匹配且效率较低。前者适合已知 PID 时快速查询,后者用于模糊搜索进程名。推荐优先使用 ps -p 进行精确查询。

2025-12-14 17:22:39 866

原创 bash “ if <command>; then”语句,<command>返回0,then后面语句才执行

本文介绍了Bash中if语句的条件判断机制和命令退出状态码的使用。主要内容包括:1) if <command>; then语句中,命令返回0表示成功/真,非0表示失败/假;2) 通过$?变量可查看上一条命令的退出状态码;3) 提供了多个示例说明不同命令的返回状态,如ls、grep等命令在不同情况下的返回码。文章强调Bash遵循0表示成功、非0表示失败的标准,这与许多编程语言的约定一致。

2025-12-14 14:32:19 210

原创 在一台电脑上生成多个ssh公钥并添加到不同GitHub账号

本文介绍了在同一台电脑上管理多个GitHub账号仓库的方法。核心步骤包括:1)为每个账号生成独立的SSH密钥对;2)将公钥分别添加到对应GitHub账号;3)配置~/.ssh/config文件,通过不同Host别名自动切换密钥;4)克隆仓库时,个人账号使用默认配置,工作账号使用指定别名。此外还提供了临时访问特定仓库的命令参数。这种方法通过SSH配置实现了账号隔离,无需频繁切换全局设置。

2025-12-14 13:49:07 249

原创 bash判断ssh -Tgit@GitHub是否成功,不要看 ssh 的退出码,而要看输出内容

摘要:GitHub的SSH认证成功与否不能依赖传统退出码判断,因为成功时ssh -T git@github.com会返回退出码1(因拒绝shell访问),同时输出"Hi username!..."的欢迎消息;失败则通常返回255并显示"Permission denied"。正确做法是优先检查输出内容是否包含成功认证提示,或在脚本中判断退出码是否为1(而非0)。这是GitHub的特殊设计导致的反常规情况。(149字)

2025-12-14 02:16:13 448

原创 git一键push的脚本

借着ai帮助写了以下脚本,希望能运行当前脚本后,直接完成add/commit/push 3条命令,适用于频繁需要git push的情形,如果写得有错误,请各位大佬指正,

2025-12-06 13:29:26 445

原创 在Windows/termux/linux之间上传、共享临时文本文件

本文分享了几个实用的Linux命令行技巧:1) 在Termux上自动重连SSH的脚本;2) 使用catbox.moe分享小文件并wget下载;3) 通过Pastebin不登录分享内容;4) Windows通过SCP与Linux服务器互传文件。这些方法适用于快速文件共享和服务器管理,涵盖了SSH自动重连、文件分享平台使用以及跨系统文件传输等常见需求。

2025-12-06 13:20:21 230

原创 全球独角兽200强 by grok

全球独角兽企业估值排行榜显示,中国字节跳动以2200亿美元估值居首,美国OpenAI(1570亿)和中国蚂蚁集团(1500亿)紧随其后。榜单前五还包括SpaceX(1370亿)和印度信实零售(1000亿)。AI、金融科技和电商是主要行业,中美企业占据主导地位,其中美国17家,中国10家,印度3家。估值超千亿的仅4家,500亿以下企业占多数,最低为Scale AI(140亿)。行业分布呈现多元化特点,涵盖社交、AI、零售、航天等领域。

2025-12-05 14:58:23 868

原创 vim如何处理.swp文件

Vim异常关闭后再次打开文件时会提示.swp文件冲突。处理步骤:1)通过w或ps检查原进程状态;2)若进程存在,先用kill -TERM优雅关闭,失败则用kill -9强制终止;3)使用vim -r恢复未保存修改,确认后删除.swp文件。最后重新打开文件即可正常编辑。注意恢复修改后再删除交换文件,避免数据丢失。

2025-11-28 15:06:12 324

原创 linux命令行上传文本到分享服务网站paste.sr

摘要:paste.rs 是 Rust 社区维护的快速文本分享服务。通过 curl 命令上传文件(如 curl --data-binary @vimrc.sh https://paste.rs)会生成临时分享链接(如 https://paste.rs/Tz9U1aa)。该链接可在多个浏览器中访问下载,适合快速共享文件。

2025-11-27 20:37:56 144

原创 pc端和安卓平板termux环境传文件的方法

摘要:本文介绍了在PC端和安卓平板Termux环境之间传输文件的几种方法。1)通过Gist上传脚本并获取Raw链接;2)使用Pastebin匿名分享文件;3)在Termux中使用wget下载文件。还说明了如何将Termux的公钥上传到VPS:通过ssh-copy-id命令添加公钥,并检查authorized_keys文件确认是否添加成功。这些方法实现了跨平台文件的便捷传输和安全访问。

2025-11-23 14:59:17 225

原创 单链表 使用 while(p) 进行判断

本文分析了Linux内核中四种典型的单链表遍历模式,使用do-while或while循环处理链表节点。这些案例来自文件系统缓冲区管理(buffer_head链表)和网络协议栈(sk_buff链表),包括:1)buffer_head链表遍历与闭环处理;2)块设备读取时的状态检查;3)网络包队列清理;4)IPv6分片重组。内核采用描述性变量名(如bh、skb)而非简单p,且单链表结构(b_this_page/next指针)广泛应用于性能敏感场景,如缓冲管理和网络包处理。这些实现确保了对链表节点的完整遍历和高效操

2025-11-15 14:52:01 341

原创 单链表 使用 while(p->next) 进行判断

摘要:Linux内核fs/buffer.c文件中的__block_write_full_page函数负责块设备的全页写入操作。该函数通过创建页缓冲区、检查脏缓冲区状态、映射磁盘地址等步骤处理写入请求。核心逻辑包括遍历页面的缓冲区链表,对每个缓冲区进行锁定和异步写入标记,最终通过submit_bh_wbc提交写入请求。函数还处理错误恢复场景,确保数据一致性。在较新内核版本中,该函数已适配folio机制,但基本结构保持不变。

2025-11-14 22:50:00 249

原创 手动修改电脑网卡的dns

本文介绍了在Windows系统上手动配置Wi-Fi网络DNS服务器的步骤:1)通过PowerShell命令Get-NetAdapter查询无线网卡名称(示例中名为"Wi-Fi");2)使用netsh命令设置主DNS为1.1.1.1(Cloudflare),备用DNS为8.8.8.8(Google);3)执行ipconfig /flushdns刷新DNS缓存;4)最后通过ipconfig /all验证DNS设置是否生效。全文提供了完整的命令行操作示例。

2025-11-13 22:26:44 198

原创 mysql退避重启原因: 1, 环境变量没设置对. 2, 数据目录挂载有问题

MySQL启动失败九成源于环境变量配置错误,其余多为数据目录挂载问题。关键检查点包括:确保MYSQL_ROOT_PASSWORD等变量正确设置(90%问题所在),验证数据目录权限和路径有效性(10%原因)。少数情况可能涉及端口冲突、内存不足或配置错误。快速诊断可查看容器日志(docker logs)或检查环境变量配置(docker inspect),多数问题能立即定位解决。

2025-11-05 21:45:46 302

原创 除了结构体外,C语言的自引用场景

C语言中的自引用机制及其常见应用场景 摘要:本文详细介绍了C语言中各种自引用机制及其应用场景。主要内容包括:1) 函数指针自引用实现递归;2) 结构体/联合体自引用构建链表、树等数据结构;3) 函数指针自引用模拟面向对象编程(如Linux内核的文件操作);4) 相互引用结构体;5) 不完全类型等。其中,结构体中函数指针自引用是工程实践中最常用的方式,广泛应用于操作系统内核、状态机、事件回调等场景。这些自引用机制是C语言实现复杂数据结构和系统设计的核心基础。

2025-10-28 20:54:12 414

原创 IMF关于亚太地区经济预测

亚太地区2024-2026年经济预测显示整体增长平稳但存在分化。亚洲整体GDP增速预计从2024年的4.6%微降至2026年的4.1%,较此前预测有所上调。发达经济体中,澳大利亚、日本等增速缓慢,而澳门、新加坡等有所调整。新兴市场和发展中经济体增速高于发达经济体,中国预计2024年增长5.0%,印度2025年达6.6%。部分国家如缅甸、越南增速显著,但调整幅度较大。太平洋岛国增速维持在3%左右。数据来自IMF《世界经济展望》及工作人员预测。

2025-10-28 19:19:29 149

转载 XY问题,想问x,但自作聪明以为问题是y

《警惕“XY问题”:如何避免无效提问》摘要:当人们只询问具体解决方案Y,却隐藏真实需求X时,就会产生“XY问题”。多位专家指出,这种提问方式会导致三种后果:1. 回答偏离实际需求;2. 错失更优方案;3. 造成反复试错。典型案例包括只问“如何截取字符串后三位”却不说实际要获取文件扩展名。解决关键在于直接说明原始目标X,而非预设的解决方案Y。这需要突破两个思维误区:过早下结论和过度关注技术细节。良好的问题描述应包含背景、目标和已尝试方案,方能获得精准有效的帮助。

2025-10-26 17:55:11 60

原创 线性表Linear List:一种最基本/最常用/结构简单的数据结构

线性表是最基本的数据结构,由有限个数据元素组成的有序序列。C语言中主要有两种实现方式: 顺序存储结构(数组实现) 优点:随机访问快(O(1)),存储密度高 缺点:插入删除慢(O(n)),容量固定 链式存储结构(链表实现) 优点:插入删除快(O(1)),容量灵活 缺点:存取慢(O(n)),存储密度低 选择依据: 频繁随机访问选顺序表 频繁插入删除选链表 链表变种包括双向链表和循环链表。理解线性表是实现更复杂数据结构的基础。

2025-10-25 21:01:15 598

原创 置空文件:truncate -s 0 x.sh,vim: ^ 让光标到行首,输出错误到log文件

摘要:Linux命令truncate -s 0 x.sh可将文件x.sh快速置空,清空内容但保留文件。在Vim中,按^键可使光标移动到当前行首。这两个技巧分别用于文件管理和文本编辑场景。

2025-10-23 19:43:36 103

原创 Strategy(策略)和 Tragedy(悲剧)

"Strategy"(策略)和"Tragedy"(悲剧)虽拼写相似,但词源和含义完全不同。"Strategy"源自希腊语"strategos"(将军),指军事指挥艺术;"Tragedy"来自"tragoidia"(山羊之歌),与戏剧表演仪式相关。两词仅因"-gy"结尾和含"rag"易混淆,可通过词根记忆区分:Strategy(军队阵列→战略),Tra

2025-10-23 14:22:06 290

产生的core文件free(): double free detected in tcache 2

程序名称: ./headless_list +2 涉及的关键函数: list_insert(): 插入节点,包含 malloc 操作 。 +1 list_delete(): 删除节点,包含 free 操作 。 +1 list_find(): 查找节点 。 +1 崩溃发生点: 程序在打印出 "prepare into list_destory() ......" 之后崩溃 。 +1 直接诱因: 在执行 list_destroy() 函数期间,程序在释放链表节点时触发了 double free

2025-12-23

haproxy架构指南(中文翻译版).pdf

haproxy架构指南中文翻译版,版本V1.0时间2012-07-18版权GPL作者itnihao 邮箱 itnihao@qq.com本文档来自haproxy1.4.21官方文档的翻译,如有不妥之处,请邮件联系我,谢谢!注意:本文档1-3.1为此博客翻译http://blog.chinaunix.net/uid-10249062-id-348470.html 3.1章节以后为itnihao翻译本博客不定期维护更新此文档。

2018-02-26

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除