自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 收藏
  • 关注

原创 HTTP协议的简易服务器程序

本文实现了一个基于HTTP协议的简易服务器程序。主要功能包括:1)通过socket创建服务器并监听端口8888;2)使用多线程处理客户端请求;3)支持GET和POST方法;4)实现了请求解析、数据收发、文件传输等功能;5)包含登录验证和简单数据处理逻辑。程序结构分为main.c和http.c两个文件,前者处理主线程和连接管理,后者实现HTTP协议相关功能。服务器能够处理静态资源请求,并支持简单的表单数据处理(如数字求和、用户登录验证)。

2025-08-25 20:53:34 131

原创 基于TCP的电子词典

这是一个基于C/S架构的电子词典系统,包含服务器端和客户端程序。服务器端实现用户注册、登录、单词查询和历史记录功能,使用SQLite数据库存储用户信息和词典数据;客户端提供交互界面,支持用户注册、登录、单词查询和查看历史记录。系统采用TCP协议通信,服务器端口8888,支持多客户端并发连接,通过fork()处理请求。词典数据从dict.txt文件导入数据库,用户查询记录会被保存并可查看最近10条历史记录。

2025-08-21 21:47:24 116

原创 day31 SQLITE

摘要:本文介绍了SQLite数据库的基本操作函数,包括sqlite3_open()创建/打开数据库、sqlite3_close()关闭数据库、sqlite3_errmsg()获取错误信息等。重点展示了用C语言实现的学生信息管理系统,包含增删改查功能:table_add()添加记录、table_delete()删除记录、table_updata()修改记录、table_select()查询记录(使用callback回调函数格式化输出)。代码演示了从创建数据库表到实现CRUD操作的完整流程,通过switch-c

2025-08-20 23:27:01 393

原创 基于UPD的TFTP文件传输

【代码】基于UPD的TFTP文件传输。

2025-08-19 09:01:34 416

原创 day31 UDP通信

UDP通信原理摘要 UDP通信通过无连接的方式进行数据传输,服务端和客户端的基本流程包括:创建套接字(socket)、绑定地址(bind)、数据交互(recvfrom/sendto)和关闭连接(close)。核心交互通过recvfrom和sendto函数实现,其中recvfrom用于接收数据并获取发送方地址,sendto用于向指定地址发送数据。这两个函数都支持设置阻塞状态。此外,getsockopt和setsockopt函数可用于设置套接字在不同协议层(应用层、传输层、网络层)的属性。UDP通信具有简单高效

2025-08-15 19:31:09 950

原创 day30 TCP通信

套接字通信原理与关键函数摘要 套接字通信通过创建套接字文件描述符实现进程间网络通信。核心函数包括: socket() - 创建通信端点,指定协议族(AF_INET/IPv4等)和传输类型(TCP/UDP) bind() - 绑定地址信息,使用sockaddr结构体存储IP和端口 listen() - 设置套接字为监听状态,指定等待队列长度 accept() - 接收客户端连接,创建新通信套接字 connect() - 客户端连接服务端 send()/recv() - 数据传输函数,支持阻塞/非阻塞模式 辅助

2025-08-14 21:21:19 1206

原创 day29 消息队列

消息队列是一种进程间通信机制,通过内核缓存区存储以结点形式打包的数据(包含数据类型和文本)。它具有全双工通信、队列先进先出特性,且读取后数据自动删除。关键函数包括:ftok生成密钥、msgget创建队列、msgsnd发送消息、msgrcv接收消息、msgctl控制队列(获取/修改/删除)。消息队列独立于进程存在,需手动删除。使用时需注意权限设置(默认0664)和阻塞选项(0阻塞/IPC_NOWAIT非阻塞)。该机制适合结构化数据传输,但需注意默认16KB容量限制。

2025-08-10 22:07:39 711

原创 day28 IPC通信机制

本文摘要: 本地进程通信机制主要分为三类:1)传统机制(无名管道pipe、有名管道fifo、信号signal);2)SystemV机制(消息队列、共享内存、信号灯集);3)跨主机通信(套接字socket)。无名管道是半双工通信,仅用于亲缘进程,容量64KB;有名管道通过mkfifo创建,支持非亲缘进程。信号处理方式包括默认、忽略和捕获,关键函数有signal、kill和alarm。其中SIGKILL和SIGSTOP信号不可被忽略或捕获。文章详细介绍了各通信方式的特点、函数接口及参数说明。

2025-08-09 17:33:27 1095

原创 day27 同步互斥

【摘要】本文介绍了多线程编程中的同步互斥机制,主要包括互斥锁、信号量和条件变量三种解决方案。互斥锁通过上锁/解锁操作保证临界资源的独占访问;信号量采用P/V操作控制线程并发数;条件变量则实现线程的休眠与唤醒。文中详细说明了相关API函数的功能、参数及返回值,并分析了死锁产生的常见原因。这些同步机制能有效解决多线程对共享资源的竞争问题,确保程序正确执行。

2025-08-07 23:17:46 899

原创 day26 线程

本文介绍了线程的基本概念及其与进程的区别。线程是任务执行的最小单位,共享进程资源,通过时间片轮询执行。相比进程,线程更轻量高效但安全性较低。重点讲解了线程操作函数:pthread_create创建线程、pthread_exit终止线程、pthread_join回收线程资源、pthread_cancel取消线程、pthread_detach设置线程分离属性等。每个函数都详细说明了参数、功能和返回值,为多线程编程提供了基础指导。

2025-08-07 00:10:13 993

原创 day25 进程

进程是程序执行的实例,是系统资源分配的基本单位。进程具有五态转换模型,包含运行、就绪、阻塞等状态。进程标识包括PID、PPID、PGID和SID。系统通过fork()创建子进程,父子进程共享内核空间但具有独立的用户空间。进程管理涉及wait/waitpid函数回收资源,以及exit/_exit终止进程。典型的进程控制模式包括进程扇(同时创建多个子进程)和进程链(递归创建子进程链)。内存管理方面区分堆区(动态分配)和栈区(自动管理),需注意堆栈溢出和内存泄漏问题。进程调度采用时间片轮转机制,通过ps命令可查看

2025-08-05 22:40:54 975

原创 day22 哈希表和二叉树

本文介绍了哈希表和二叉树的数据结构实现。哈希表部分详细说明了哈希函数的设计(使用取模运算和素数处理)、冲突解决方法(链地址法),并提供了完整的C语言实现代码,包括节点创建、插入、遍历和查找等功能。二叉树部分阐述了二叉树的基本性质,给出了二叉树的创建、先序/中序/后序遍历的实现代码,以及计算叶子节点和度数的函数。两种数据结构都通过具体的代码示例展示了其实现方式和操作方法。

2025-07-28 22:11:26 387

原创 day21 循环链表

本文介绍了单向循环链表和双向循环链表的实现原理及操作要点。单向循环链表的特点是尾节点指向头节点,操作时需注意判断条件由NULL变为头节点。文章详细说明了单向循环链表的节点结构、创建、判空、遍历、插入删除等操作,并提供了约瑟夫环问题的实现方案。双向循环链表则在单向基础上增加了前驱指针,尾部节点的后指针指向头节点,头节点的前指针指向尾节点。文章对比了两种链表的差异,重点阐述了双向循环链表的头插、尾插、删除等操作的特殊处理方式。两种链表在初始化、判空、遍历等操作上都需要特别注意循环特性的实现,文末总结了两种链表的

2025-07-25 10:03:18 2025

原创 day20 双向链表

本文介绍了双向链表的核心操作及注意事项。主要内容包括:1)双向链表操作需同时维护前驱和后继指针;2)创建头节点时要初始化长度和指针;3)提供了节点封装、头插尾插、头删尾删等基本操作实现;4)强调操作时需判断边界条件(如NULL检查)并及时更新链表长度;5)比较了链表与顺序表的特性差异。所有函数实现都遵循申请空间-边界检查-操作执行-释放资源的规范流程,并特别注意指针修改顺序和内存管理。

2025-07-24 18:55:24 1736

原创 day19 链表

本文介绍了链式存储线性表的基本操作实现,包括链表创建、节点申请、插入(头插/任意位置)、删除(头删/任意位置)、查找(按位置/按值)、修改(按位置/按值)、反转和释放等功能。每个函数都详细说明了功能、参数和返回值,并给出了核心代码实现。通过typedef定义节点结构体,包含数据域和指针域,使用malloc动态申请内存,强调指针操作和边界条件检查。这些操作共同构建了一个完整的单向链表管理方案,为链式数据结构的应用提供了基础支持。

2025-07-22 21:23:26 683

原创 day18 宏和Makefile

文章摘要:本文主要介绍了C语言宏定义和Makefile的基本使用。宏定义部分包括无参宏、宏函数格式及系统自带宏函数的条件编译指令;Makefile部分详细讲解了规则结构、变量定义、预定义变量、模式匹配规则以及wildcard、patsubst等内置函数的使用方法,并说明了Makefile的执行原理。文章最后还介绍了make工具的基本安装和使用方法,强调其通过隐式规则自动处理文件依赖关系的特性。

2025-07-21 20:51:36 814

原创 day17顺序表

摘要:本文介绍了线性表的基本概念,包括顺序表和链表两种存储方式。重点阐述了顺序表的实现方法,分为头文件声明(seqlist.h)、功能实现(seqlist.c)和测试入口(main.c)三个部分。详细说明了顺序表操作的注意事项,包括判空、判满、数据访问方式等,并给出了创建、增删改查等核心功能的具体实现思路和主要代码逻辑,如遍历时的循环控制、插入删除时的元素移动策略等。特别强调了数据合法性检查的重要性,包括指针有效性、表容量和位置合理性的判断。

2025-07-17 19:48:24 959

原创 day16 数据结构

本文介绍了数据结构的基本概念和分类。数据结构是程序运行时临时存储和处理数据的容器,包含数据保存和处理功能(增删改查)。数据由数据项(最小单位)组成数据元素(基本单位),再构成数据对象(元素集合)。数据结构分为逻辑结构(集合、线性、树形、图形)和存储结构(顺序、链式、索引、散列),其中逻辑结构描述元素间关系,存储结构则实现逻辑结构在物理内存上的映射。

2025-07-16 19:30:25 314

原创 day15 特殊关键字

本文介绍了C语言中const、static、extern、typedef、union和enum等关键字的用法。const用于定义只读变量,修饰指针时可保护指针或指向的值;static限定变量/函数作用域;extern引用外部变量;typedef实现类型重命名,与#define宏定义有本质区别;union共用体共享内存空间,可用于判断大小端存储;enum枚举默认从0开始递增。文章还通过代码示例演示了typedef在结构体、函数指针和指针数组中的应用,并比较了typedef与#define的实现差异。

2025-07-15 20:02:23 727

原创 day14 结构体

本文摘要: 本文详细介绍了C语言结构体的嵌套使用和内存结构。主要内容包括:1) 嵌套结构体的定义和成员访问方式;2) 结构体数组的定义和函数处理方法;3) 通过示例代码演示了学生信息管理系统的实现,包括录入、输出和排序功能;4) 分析了不同类型结构体的内存占用情况,包括基本变量、数组和嵌套结构体。文中提供了完整的代码示例,展示了结构体的定义、初始化、排序算法实现以及内存大小计算等核心操作。

2025-07-14 20:01:14 392

原创 day13 结构体入门

摘要:结构体是构造数据类型,由不同/相同类型变量组成连续存储集合。定义方式包括:1)类型与变量分开;2)类型与变量一起;3)无名结构体。初始化可用花括号包裹成员值,支持整体或部分初始化(使用.指定成员)。访问方式:变量用.成员,指针用->成员。结构体支持取地址和赋值操作。需注意:结构体类型声明须在使用前完成,否则会报错。(150字)

2025-07-13 21:46:49 452

原创 day12 进阶指针

本文介绍了C语言中四种特殊指针的用法:1. 指针函数(返回指针的函数),通过示例演示了去除字符串空格的应用;2. 函数指针(指向函数的指针),展示了回调函数的实现方式;3. 数组指针(指向数组的指针),说明了一维和二维数组地址的引用方法;4. 指针数组(存储指针的数组)和二级指针(指向指针的指针)。文章还提及万能指针(void*)的使用注意事项,需强制转换后才能操作。通过代码实例详细说明了每种指针的定义格式和应用场景,为理解C语言指针的高级用法提供了实用参考。

2025-07-11 18:36:12 1638

原创 day11 C语言基础-字符串函数

摘要:本文介绍了C语言中常用的字符串处理函数(gets、puts、strlen、strcpy、strcat、strcmp、bzero、memset)的功能和使用注意事项,以及二维数组的定义规则。通过示例代码演示了十进制转二进制、单词统计和字符串逆置的实现方法。重点强调了函数使用时需注意数组边界检查、内存空间分配等问题,并提供了包含二维数组最大值查找的完整代码示例,展示了字符串函数和数组操作的实际应用。

2025-07-10 20:28:54 175

原创 day10 C语言学习-字符数组

本文总结了C语言中字符数组的定义与初始化方法,详细介绍了冒泡排序和选择排序的实现原理,并给出了具体代码示例。主要内容包括:1) 字符数组的合法与非法定义方式,强调初始化的重要性;2) 冒泡排序的双层循环结构,通过交换相邻元素实现排序;3) 选择排序通过记录最小值下标进行元素交换;4) 学生成绩管理系统的函数实现,包括输入输出、查找最大值最小值及排序功能;5) 统计字符串中各类字符数量的实用函数。文中所有算法均配有完整代码实现,并提供了关键注释说明。

2025-07-09 19:08:21 931

原创 day9 C语言学习-循环结构

本文摘要:文章介绍了C语言中的循环结构(while、do...while、for)和跳转语句(goto、break、continue、return)的语法及区别,并通过四个实例程序演示其应用:1)百元买百鸡问题;2)输出3-100质数;3)寻找完美数;4)字母输出模式。重点分析了各类循环的执行流程及控制语句的作用,其中while与do...while的区别在于条件不成立时后者多执行一次,for循环的三个表达式功能及省略注意事项也被详细说明。(149字)

2025-07-08 21:07:59 219

原创 day8 C语言三种结构

摘要:程序控制结构包括顺序结构、分支结构和循环结构。分支结构通过if-else和switch-case实现条件执行,其中switch使用case标签和break控制流程。循环结构如while循环满足条件时重复执行。示例代码展示了函数与分支结构的应用,包括水仙花数判断、日期天数计算和月份天数查询。函数封装了特定功能,通过switch-case进行功能选择调用。代码体现了结构化程序设计思想,通过不同控制结构的组合实现复杂逻辑。

2025-07-07 19:56:31 158

原创 day7 C语言学习-函数

函数是执行特定任务的代码块,主要用于减少代码冗余。文章介绍了函数的定义、分类(库函数/自定义、有参/无参、有返回值/无返回值)、三要素(功能、参数、返回值)及四种基本类型(无参无返回值、有参无返回值等)。通过示例代码展示了函数定义与调用方法,重点讲解了参数传递(值传递和地址传递)、数组/字符数组处理技巧,以及递归的实现原理(需包含递归出口和表达式)。文章还涉及变量作用域、静态变量、内存分配等关键概念,为函数编程提供了全面指导。

2025-07-06 21:12:21 279

原创 day6 C语言学习-指针

本文摘要:文章系统讲解了C语言指针的核心概念与应用。首先介绍指针定义、初始化和引用操作,重点解析*运算符的双重含义。其次探讨空指针和野指针的区别及风险,分析指针变量大小与数据类型的关系。在应用层面,详细说明指针在冒泡排序和字符串处理中的使用方法,包括间接访问、数组关联操作等。还涉及内存分区模型、动态内存管理(malloc/free)的正确使用,以及内存泄漏的成因与预防。全文通过代码示例展示指针操作技巧,同时强调常见错误(如段错误)的防范措施。

2025-07-05 21:17:56 648

原创 day5 C语言基础学习

本文介绍了vim自动补全功能的使用方法(通过编辑~/.vim/snippets/c.snippets文件),并重点讲解了C语言中的关键知识点:1. printf表达式执行顺序(从后向前);2. 常量类型(整型、浮点、字符、字符串、宏定义);3. 各类运算符(算术、自增自减、逻辑、位运算等)的特性与使用技巧;4. 位运算的典型应用(置位、清零、取反),并附有具体代码示例展示位操作的实际效果。内容涵盖C语言基础语法和实用编程技巧。

2025-07-04 20:17:43 843

原创 day1-day4 C语言基础学习

文章介绍了Linux终端常用命令(ls、rm等)和重定向符(>、>>)的使用方法,以及vim编辑器的三种模式。在C语言部分,详细讲解了头文件、gcc编译流程(预处理-编译-汇编-链接)、数据存储原理(原/反/补码)和基本数据类型。重点阐述了变量定义规则、强制类型转换、有/无符号数运算特性,以及不同字节数变量的取值范围。最后说明了计算机存取数据时的符号位扩展机制,并对比了不同数据类型在输入输出时的处理差异。文章内容

2025-07-03 21:23:35 550 1

空空如也

空空如也

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

TA关注的人

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