- 博客(14)
- 收藏
- 关注
原创 C++基础知识点过渡
内联函数使用关键字inline放在函数定义(不是声明)的前面,inline可以建议编译器进行主函数展开编译,如果生效,则可以提升程序的运行效率,因此消除了函数调用的额外开销。使用引用传递参数可以提升传递效率,因为不产生副本,引用参数参数应该在能被定义为const的情况下,尽量定义为const,以达到引用的安全性。如果不传入参数,则使用默认值。一个函数的参数只有类型没有名字,则这个参数就是哑元,这样的函数就是哑元函数。引用的指针:可以把引用的地址交给指针保存,此时指针指向的还是引用的原变量。
2025-06-23 19:43:10
1187
原创 基于Webserver的工业数据采集系统项目
基于C语言和thttpd轻量级Web服务器实现的工业设备监控系统,采用分层架构设计,前端使用HTML/CSS/JavaScript构建交互界面,后端通过共享内存、消息队列等机制实现硬件通信。系统核心功能包括传感器数据采集、设备控制(蜂鸣器/LED)、用户认证及历史数据展示,通过HTTP与ModbusTCP协议转换实现Web与工业设备的无缝对接。项目部署于虚拟机环境,支持远程访问控制,体现了工业互联网的典型应用场景。
2025-06-17 19:15:17
1686
原创 Modbus TCP和Modbus RTU以及Modbus库的介绍
本文系统介绍了Modbus协议及其两种主要实现方式。Modbus由Modicon公司于1979年开发,包含RTU、ASCII和TCP三种变种,具有简单、免费、易用的特点。文章详细解析了ModbusTCP协议的结构、寄存器类型(线圈、离散输入、输入和保持寄存器)、功能码及其应用方法,包括报文格式和数据读写流程。同时对比了ModbusRTU与TCP的区别,指出RTU采用串口通信并增加CRC校验。最后提供了libmodbus库的安装配置方法和常用API接口,并给出通过库函数实现03功能码的编程示例。
2025-06-16 20:23:26
1232
原创 数据库:SQLite的基本命令和使用
本文介绍了SQLite数据库的安装、概念、特性及基本操作。主要内容包括:1.SQLite安装步骤及图形化工具配置;2.数据库基本概念及与MySQL的对比;3.SQLite特性(轻量级、嵌入式、跨平台等);4.基础SQL语句使用(建表、增删改查);5.C语言编程接口(打开/关闭数据库、执行SQL语句、回调函数等);6.通过示例代码演示数据库操作流程。SQLite适合嵌入式和小型应用开发,具有零配置、单文件存储等优势。文章提供了从安装到编程的完整指导,帮助开发者快速掌握SQLite使用。
2025-06-14 14:14:35
1272
原创 UDP及广播与组播的应用
UDP通信流程与广播组播实现 UDP通信流程分服务器和客户端: 服务器端:创建套接字→指定网络信息→绑定→接收/发送消息→关闭 客户端:创建套接字→指定服务器信息→发送/接收消息→关闭 关键函数:recvfrom()获取发送方信息,sendto()指定接收方信息 广播实现特点: 通过setsockopt()设置SO_BROADCAST属性 使用广播地址(主机号最大)发送给局域网所有主机 发送方需设置广播属性,接收方正常绑定即可 可能引发广播风暴,影响网络性能 代码示例展示了UDP服务器/客户端和广播发送者的
2025-06-09 19:50:36
1289
原创 网络编程之TCP编程
本文介绍了TCP编程的基础知识,包括套接字(socket)的概念、发展历程和类型(流式、数据报、原始套接字),端口号的作用及分类,以及字节序的转换方法。重点讲解了TCP编程流程:服务器端需要创建套接字、绑定、监听、接受连接和通信;客户端则需创建套接字、连接服务器和通信。文章还探讨了TCP粘包问题及其解决方案,网络协议的数据封装过程,并使用Wireshark进行抓包分析。最后介绍了TCP的三次握手建立连接和四次挥手断开连接的机制,以及循环服务器、多线程/多进程并发服务器和IO多路复用等服务器模型,并提供了相应
2025-06-05 20:20:44
1230
原创 认识IP和网络模型
在服务器中,0.0.0.0指的是本机上的所有IPV4地址,如果一个主机有两个IP地址,192.168.1.1 和 10.1.2.1,并且该主机上的一个服务监听的地址是0.0.0.0,那么通过两个ip地址都能够访问该服务。某公司有四个部门:部门A、部门B、部门C、部门D,每个部门各50台计算机接入公司局域网,如果要在192.168.20.0网段为每个部门划分子网,子网掩码应该怎么设置,每个子网的地址范围分别是什么?该类IP地址的最前面为“110”,所以地址的网络号取值于192~223之间。
2025-06-03 19:28:57
1382
原创 Linux IO 模型
本文介绍了四种I/O模型及其特点:1. 阻塞式I/O:最常见但效率低,读写操作会阻塞进程,直到数据就绪;2. 非阻塞式I/O:通过轮询检查数据就绪状态,耗费CPU但可处理多路I/O,可通过fcntl设置;3. 信号驱动I/O:异步通知机制,内核通过信号SIGIO通知数据就绪,需配合信号处理函数;4. I/O多路复用:包括select、poll和epoll三种实现,能同时监控多个文件描述符。其中select有1024个描述符限制且效率低,poll优化了描述符限制但仍需轮询,epoll采用异步回调机制效率最高。
2025-05-29 19:06:42
1050
原创 进程间通信-IPC
1.进程间通信的方式IPC1.早期的进程间通信:无名管道(pipe)、有名管道(fifo)、共享内存(share memory)消息队列(message queue)、信号等集(semaphore set)2.无名管道2.1 原理一个进程的输出可以当做另一个进程的输入2.2 特点只能用于具有亲缘关系的进程之间的通信半双工的通信模式,具有固定的读端fd[0]和写端fd[1]。管道可以看成是一种特殊的文件,对于它的读写可以使用文件IO如read、write函数。
2025-05-28 20:51:54
999
原创 线程-Thread
本文介绍了线程的基本概念及其相关操作。线程是轻量级进程,与进程共享资源但拥有独立运行状态,相比进程更易通信但安全性较低。重点讲解了线程的创建(pthread_create)、退出(pthread_exit)、资源回收(pthread_join/detach)等核心函数接口,以及同步机制的实现方法。通过信号量(sem_init/wait/post)实现线程间同步,并附有主线程与子线程通过信号量通信的代码示例。文章系统性地涵盖了线程管理的各个方面,为理解多线程编程提供了基础指导。
2025-05-28 19:27:17
889
原创 进程-Process
进程是程序的动态执行实例,包含程序代码、数据和系统资源分配。Linux进程分为用户空间和内核空间,具有独立的0-4G虚拟地址空间。进程状态包括运行态、睡眠态、僵尸态等,通过fork()创建子进程,父子进程共享代码但拥有独立地址空间。进程通信通过CPU时间片轮转实现多任务,需注意避免僵尸进程(使用wait/waitpid回收资源)。进程控制涉及优先级调度(抢占式/非抢占式)、进程号获取(getpid/getppid)及终止(exit/_exit)。关键区别:程序是静态文件,进程是动态执行实体。
2025-05-28 09:33:53
1050
原创 Linux中库的区别与使用
本文介绍了C语言中头文件和库文件的使用方法。头文件分为系统路径查找(使用<>)和当前路径查找(使用""),包含函数声明、宏定义等内容。库文件分为静态库(.a)和动态库(.so),静态库编译时被复制到程序中,体积大但运行快;动态库运行时加载,体积小但需额外配置。文章详细说明了两种库的制作步骤:静态库使用ar命令打包,动态库需要-fPIC编译选项。最后对比了两者的优缺点:静态库移植性好但升级麻烦,动态库升级简单但依赖运行环境。还提供了解决动态库加载问题的三种方法,并指出默认优先使用动态库。
2025-05-26 21:01:44
947
原创 IO进程中的文件IO
文件IO是操作系统提供的系统调用接口,用于对文件进行输入输出操作。它基于文件描述符(非负整数)实现,默认打开0(标准输入)、1(标准输出)、2(标准错误)三个描述符。主要操作包括:open()打开文件(支持多种模式如O_RDONLY、O_CREAT等),close()关闭文件,read()/write()读写数据,以及lseek()定位文件位置。与标准IO相比,文件IO无缓冲机制,每次操作都直接引发系统调用,可操作除目录外的多种文件类型。权限设置时需注意umask的影响,最终权限为mode & ~umask
2025-05-26 19:54:48
400
原创 IO进程中的标准IO
本文介绍了C语言标准IO的基本概念与操作。标准IO是C库中提供的一组高效输入输出函数接口,通过缓冲机制减少系统调用,采用流(FILE*)操作方式。系统默认打开三个流:stdin、stdout、stderr。文章详细讲解了三种缓冲区类型(全缓存、行缓存、无缓存)及其刷新机制,重点分析了文件操作函数:fopen(多种打开模式)、fclose、fgets/fputs(字符串读写)、fread/fwrite(二进制读写),以及文件定位函数rewind、fseek和ftell的使用方法。标准IO能有效处理大量数据读写
2025-05-26 19:39:02
503
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人