- 博客(98)
- 收藏
- 关注
原创 linux:命名管道与共享内存
本文介绍了Linux中的两种进程间通信机制:命名管道和System V IPC。命名管道通过特殊管道文件实现无血缘关系进程的通信,需使用mkfifo创建并遵循"打开-读写-关闭"操作流程。System V IPC重点讲解了共享内存(shm),其特点是通信速度最快但需自行处理同步问题,涉及shmget创建、shmat挂接、shmdt分离和shmctl控制等系统调用。此外还简要提及消息队列(msg)和信号量(sem),信号量主要用于进程同步互斥,通过PV操作实现原子性资源管理。所有Syste
2026-06-12 16:16:53
349
原创 Linux:进程池的简单实现
本文介绍了通过进程池和管道实现进程间通信的方法。主要内容包括:1.使用管道创建父子进程间的单向通信信道;2.构建进程池预先创建多个子进程,减少频繁创建进程的开销;3.父进程通过管道向子进程发送任务指令;4.子进程通过重定向标准输入读取任务并执行;5.通过关闭管道写端实现子进程的优雅退出。文章详细说明了管道创建、任务分配、进程回收等关键步骤的实现原理,并分析了文件描述符管理的重要性。这种方法有效提高了进程间通信效率,适用于需要频繁创建进程的场景。
2026-06-12 16:15:59
168
原创 C++的 IO 流
本文系统介绍了C/C++中的输入输出机制。首先回顾了C语言的scanf/printf函数及其缓冲区原理,然后阐述了"流"的概念及其在C++中的实现方式。重点讲解了C++标准IO流(cin/cout)和文件IO流(ifstream/ofstream)的使用方法,包括二进制和文本文件的读写操作。文章还介绍了stringstream类在数据类型转换和字符串处理中的应用,对比了其与C语言itoa/sprintf函数的优势。最后通过实例演示了如何利用流操作实现结构体数据的序列化和反序列化。全文涵盖
2026-05-11 19:21:08
415
原创 单列模式和C++中的类型转换
本文介绍了C++中的单例设计模式和四种类型转换机制。单例模式确保类只有一个实例,分为饿汉式(启动时创建)和懒汉式(首次使用时创建),后者需注意线程安全问题。C++提供了四种类型转换操作符:static_cast用于相近类型转换,reinterpret_cast用于不同类型转换,const_cast用于去除const属性,dynamic_cast用于多态类型安全转换(需虚函数支持)。这些机制增强了类型安全性和代码可读性,相比C语言隐式转换更规范。文章通过代码示例详细说明了各种转换的使用场景和注意事项。
2026-05-11 11:28:41
69
原创 C++11:智能指针
本文探讨了智能指针的必要性及其实现原理。传统指针在异常发生时容易导致内存泄漏,智能指针通过RAII(资源获取即初始化)技术,在对象构造时获取资源,析构时自动释放资源。文章分析了三种智能指针:unique_ptr(防拷贝)、shared_ptr(引用计数)及其循环引用问题,以及weak_ptr的解决方案。同时介绍了定制删除器的实现方法,使智能指针能正确处理数组等特殊资源。智能指针有效解决了内存泄漏问题,简化了资源管理,是C++中重要的内存管理工具。
2026-04-28 15:24:57
432
原创 C++:异常
本文对比了C语言和C++的错误处理机制。C语言主要通过终止程序或返回错误码处理错误,存在用户体验差和需要手动处理的问题。C++引入异常机制,通过throw抛出异常、try-catch捕获异常,使错误处理更加灵活。文章详细介绍了异常的使用方法、匹配原则和栈展开过程,以及异常重新抛出和异常安全问题。同时分析了异常的优缺点:优点在于能清晰展示错误信息,缺点在于可能造成执行流混乱和资源管理困难。最后指出虽然异常存在缺陷,但在面向对象编程中仍利大于弊,建议规范化使用异常处理。
2026-04-28 15:19:58
365
原创 C++11
C++11新特性摘要:C++11带来了140多项新特性和600多处缺陷修正,显著提升了开发效率。主要内容包括: 统一的列表初始化语法,支持所有内置和自定义类型; 新增std::initializer_list支持容器初始化; 简化声明:auto类型推导、decltype获取表达式类型、nullptr替代NULL; 右值引用实现移动语义,减少拷贝开销; 可变参数模板支持参数包展开; lambda表达式提供匿名函数功能; function包装器统一可调用对象,bind调整参数绑定; 新增STL容器如unorde
2026-04-28 15:18:30
556
原创 进程间通信:匿名管道
父进程先通过os读写同时指向一个管道文件,通过fork()创建子进程,此时父子进程同时可以读写这个管道文件,然后父进程关闭写,子进程关闭读,就实现了字子读父写的进程间通信。管道文件的特点,只允许单向通信,双向通信需要建立两个管道,因为这样方便区分哪部分是要发送的,哪部分是要接受的。,所以两个struct file*指向不同的struct file ,一个用来读取,一个写入,但他们会指向同一个方法集,inode 和文件缓冲区(内容)。,所以3个子进程都能看到这两个管道,然后不同管道关闭不需要的读写端就行。
2026-01-26 19:03:58
952
原创 探索文件系统:软硬链接的奥秘
本文介绍了文件系统的基本结构和软硬链接机制。文件系统通过inode管理磁盘文件,每个文件有唯一的inode编号,包含属性和数据块信息。磁盘物理结构包括盘片、磁道、扇区等,逻辑上被抽象为线性空间。文章详细解析了ext2文件系统的组成,包括超级块、块组描述符、inode表等。在软硬链接部分,指出软链接是独立文件存储目标路径,硬链接则是目录中新增的inode映射关系,会增加引用计数。特别说明目录文件的硬连接数包含自身和子目录的".."引用,但用户不能创建目录硬链接以避免循环问题。
2025-07-21 19:02:09
1033
原创 手写C语言标准IO库简单实现
摘要:本文实现了一个简易的文件I/O库,包含mystdio.h头文件和mystdio.c源文件。通过定义myFILE结构体(包含文件描述符、打开模式和缓冲区),实现了文件操作函数:my_fopen()根据模式打开文件,my_fwrite()将数据写入缓冲区,my_fflush()刷新缓冲区到文件,my_fclose()关闭文件。main.c演示了写入20行文本到log.txt文件的功能。该实现模拟了标准I/O库的基本功能,使用4096字节缓冲区并支持行刷新模式。
2025-07-21 19:01:47
869
原创 linux: 文件描述符fd
本文系统介绍了Linux文件操作相关知识。首先复习了C语言文件操作接口(fopen/fclose等),分析其底层系统调用(open/close/write)。重点讲解了文件描述符的分配规则(寻找最小未使用编号)和重定向原理(通过dup2系统调用实现)。文章还探讨了标准输入/输出/错误的文件描述符(0/1/2),以及程序替换不影响重定向的特性。通过代码示例演示了文件描述符分配和输出重定向的具体实现过程。
2025-04-13 18:11:05
1224
3
原创 Linux:进程程序替换execl
用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),我们所创建的所有的子进程,执行的代码,都是父进程代码的一部分!如果我们想让子进程执行新的程序呢???执行全新的代码和访问全新的数据,不在和父进程有瓜葛,这时子进程往往要调用一种exec函数以执行另一个程序。
2025-04-08 21:10:45
880
原创 【高阶数据结构】红黑树
每个结点不是红色就是黑色根节点是黑色的如果一个节点是红色的,则它的两个孩子结点是黑色的对于每个结点,从该结点到其所有后代叶结点的简单路径上,均 包含相同数目的黑色结点每个叶子结点都是黑色的(此处的叶子结点指的是空结点)
2024-02-02 16:57:23
1279
9
原创 使用Docker部署Apache Superset结合内网穿透实现远程访问本地服务
Superset是一款由中国知名科技公司开源的“现代化的企业级BI(商业智能)Web应用程序”,其通过创建和分享dashboard,为数据分析提供了轻量级的数据查询和可视化方案。Superset在数据处理和可视化方面具有强大的功能,能够满足企业级的数据分析需求,并为用户提供直观、灵活的数据探索和展示方式。通过Superset,用户可以轻松地从海量数据中提取有价值的信息,帮助企业做出更加明智的决策。另外,团队协作进行数据分析,可以结合国内流行的内网穿透工具实现公网的实时远程访问数据。
2024-01-22 22:35:15
4050
67
原创 如何实现无公网ip固定TCP端口地址远程连接Oracle数据库
Oracle,是甲骨文公司的一款关系数据库管理系统,它在数据库领域一直处于领先地位。可以说Oracle数据库系统是世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小微机环境。它是一种高效率的、可靠性好的、适应高吞吐量的数据库方案。本次教程我们来在本地搭建Oracle数据库,并通过[cpolar内网穿透](cpolar - 安全的内网穿透工具),将本地端口映射到公网,实现公网环境下通过PL/SQL工具进行远程连接访问。
2024-01-15 17:52:23
3586
74
原创 Linux Ubuntu环境部署SVN服务并结合内网穿透实现公网访问内网资料库
由于文档资料越来越多,将所有资料都存放在自己的电脑上容易混淆,并且也不利于分享。这种情况下,考虑将资料上传SVN统一管理,这样一来其他人也能很方便的查略各种资料。当SVN安装在局域网内的话,想要远程访问资料库或者代码将会受到限制,为了能从公共网络访问内网SVN资料库,[cpolar](博客 - cpolar 极点云)能很好的解决这一需求,cpolar是一个能把内网服务暴露至公网进行访问的工具。
2024-01-05 16:25:10
4447
87
原创 如何使用Plex在Windows系统搭建个人媒体站点公网可访问
用手机或者平板电脑看视频,已经算是生活中稀松平常的场景了,特别是各种碎片时间(追剧下饭、地铁上刷剧等等),看个喜欢的视频必不可少。但不知道为什么,各大影音平台总能轮流占住热播剧,还限定很多剧只能会员观看,搞得我们总有交不完的会员费。此时,拥有一个私人影音媒体站点就显得很有必要。今天,笔者就为大家介绍,如何使用cpolar+Plex组合,在Windows系统上搭建一个全能的私人媒体影音站点。
2024-01-02 15:22:36
3385
65
原创 开源轻量级分布式文件系统FastDFS本地部署并实现远程访问服务器
FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
2023-12-28 16:00:18
7076
58
原创 C++:map和set的介绍及使用
关联式容器也是用来存储数据的,与序列式容器不同的是,其里面存储的是结构的键值对,在数据检索时比序列式容器效率更高。
2023-12-28 11:58:21
1524
29
原创 Linux部署MeterSphere结合内网穿透实现远程访问服务管理界面
MeterSphere 是一站式开源持续测试平台, 涵盖测试跟踪、接口测试、UI 测试和性能测试等功能,全面兼容 JMeter、Selenium 等主流开源标准,有效助力开发和测试团队充分利用云弹性进行高度可扩展的自动化测试,加速高质量的软件交付,推动中国测试行业整体效率的提升。下面介绍在Linux 中部署MeterSphere 并且结合cpolar 内网穿透实现远程也可以访问MeterSphere 界面!
2023-12-25 17:22:56
5164
67
原创 二叉搜索树 --- C++实现
二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树
2023-12-23 15:59:15
3206
55
原创 本地websocket服务端结合cpolar内网穿透实现公网访问
即登录cpolar官网后,点击预留,保留一个固定tcp端口地址,然后将其配置到相应的隧道中即可。这里我们用cpolar内网穿透来映射内网端口,它支持http/https/tcp协议,不限制流量,无需公网ip,也不用设置路由器,操作简单。注意:该隧道选择的是临时tcp地址和端口,24小时内会变化,如需固定tcp地址,可升级为专业套餐做tcp地址固定!cpolar安装成功后,默认会配置两个默认隧道:一个ssh隧道和一个website隧道,可自行删减或者修改。,可以查看到token码,复制并执行命令进行认证。
2023-12-21 18:49:06
5893
53
原创 Windows使用VNC Viewer远程桌面Ubuntu【内网穿透】
实现ubuntu 系统桌面级别的远程连接,需要在ubuntu 系统中安装vnc,既然是桌面,前提是需要ubuntu 带有图形化界面,如果没有,可以执行以下命令安装图形化界面sudo reboot #重启即可看到图形界面至此,我们成功实现了使用VNC远程桌面ubuntu:通过cpolar穿透vnc服务5900端口,使用所生成的公网地址,实现在外随时随地远程桌面控制内网的Ubuntu,不需要公网IP,也不需要配置路由器。并且,这个公网地址还是固定的,不会随机变化,连接稳定。
2023-12-18 21:15:27
9746
68
原创 Linux:进程地址空间
根据运行结果我们发现地址还是相同的,子进程全局变量的地址并没有改变,同一个地址竟然读出不同的值?所以我们可以大胆推测我们看到的地址并不是真正的物理地址。
2023-12-17 16:34:44
1799
24
原创 C++中的多态你真的了解吗?多态原理全面具体讲解
多继承中子类有几个父类有虚表就有几张虚表,多继承派生类的未重写的虚函数放在第一个有虚函数表的继承基类中,会将继承顺序中前几个没有虚函数表的类后移,将有存放自己的虚函数的虚函数表的基类放在最前面的。如果继承的基类中都没有虚函数表,则自己创建并放在最前面。
2023-12-15 15:29:03
1349
37
原创 开源云原生网关Linux Traefik本地部署结合内网穿透远程访问
Træfɪk 是一个云原生的新型的 HTTP 反向代理、负载均衡软件,能轻易的部署微服务。它支持多种后端 (Docker, Swarm, Mesos/Marathon, Consul, Etcd, Zookeeper, BoltDB, Rest API, file…) , 可以对配置进行自动化、动态的管理.
2023-12-14 18:33:06
5233
54
原创 Linux:环境变量
环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性。
2023-12-11 13:20:58
2970
70
原创 Linux:进程优先级与命令行参数
我们知道进程在内存中是需要排队的,比如运行队列,等待队列。那排队是干什么的:就是在确认优先级,来确定得到某种资源的先后顺序。为什么要确认优先级,本质就是资源不足。那么操作系统是怎么做到呢?我们下面讲解:
2023-12-10 12:43:09
2727
55
原创 使用DockerUI结合内网穿透工具轻松实现公网访问和管理docker容器
DockerUI是一个docker容器镜像的可视化图形化管理工具。DockerUI可以用来轻松构建、管理和维护docker环境。它是完全开源且免费的。基于容器安装方式,部署方便高效,浏览和维护docker单节点或集群节点worker和manager。DockerUI具有易于使用的界面。它不需要记住 docker 指令。只需下载镜像即可立即加入并完成部署。使用DockerUI并结合cpolar内网穿透可以更加轻松的管理docker和swarm,实现后台公网访问并管理,视觉性更加直观,后台开发更加便利。
2023-12-07 16:34:57
5866
66
原创 Linux DataEase数据可视化分析工具本地部署与远程访问
DataEase 是开源的数据可视化分析工具,帮助用户快速分析数据并洞察业务趋势,从而实现业务的改进与优化。是开源的数据可视化分析工具,帮助用户快速分析数据并洞察业务趋势,从而实现业务的改进与优化。在本地搭建后,借助cpolar 内网穿透实现远程公网地址即可访问DataEase 的web ui 界面, 这样方便我们在任何设备上都可以随时打开DataEase 进行查看数据分析!
2023-12-04 16:23:42
4517
78
原创 C++:模板进阶
一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件链接起来形成单一的可执行文件的过程称为分离编译模式。【优点】1. 模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生2. 增强了代码的灵活性【缺陷】1. 模板会导致代码膨胀问题,也会导致编译时间变长2. 出现模板编译错误时,错误信息非常凌乱,不易定位错误本篇结束!
2023-12-02 16:19:04
1976
68
原创 Linux:进程状态
我们在学习进程状态时,老师只是简单的让我们记住下面这张图1.教材中进程操作系统的进程状态那么这些进程状态到底是什么意思呢?本篇文章将具体讲解上面教材中提到的进程状态在linux中的体现。
2023-11-30 17:55:50
2293
70
原创 STL: 容器适配器stack 与 queue
适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口。
2023-11-26 16:14:45
2237
81
原创 Linux:创建进程 -- fork,到底是什么?
相信大家在初学进程时,对fork函数创建进程一定会有很多的困惑,比如:1.fork做了什么事情??2.为什么fork函数会有两个返回值?3.为什么fork的两个返回值,会给父进程谅回子进程pid,给子进程返回0?4.fork之后:父子进程谁先运行??5.如何理解同一个变量,会有不同的值??本篇文章将来仔细回答一下这些问题。
2023-11-25 11:58:22
1994
51
原创 Linux调试器:gdb的使用
我们知道在Visual Studio2022中,我们可以对编好的代码进行调试来分析dug的位置,那Linux环境下如何进行程序的调试呢?那就是使用Linux调试器:gdb。
2023-11-19 16:40:32
738
39
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅