国庆小练习
一、二、三
一、
创建一个双向链表,
将26个英文字母通过头插的方式插入到链表中
通过尾删的方式将数据读取出来并删除。
main.c
#include <my_head.h>
#include "dblink.h"int main(int argc, const char *argv[])
{dblink *h = create_head();for (char c = 'a'; c <= 'z'; c++){head_insert(h, c);output(h);putchar(10);}for (int i = 'a'; i <= 'z'; i++){printf("%-2c", del_end(h));}putchar(10);return 0;
}
dblink.c
#include "dblink.h"// 创建头结点
dblink *create_head()
{dblink *node = (dblink *)malloc(sizeof(dblink));if (NULL == node){printf("头结点创建失败\t\t\t__%d__\n", __LINE__);return NULL;}node->data = 0;node->front = NULL;node->real = NULL;return node;
}// 创建结点
dblink *create_node(char data)
{dblink *node = (dblink *)malloc(sizeof(dblink));if (NULL == node){printf("结点创建失败\t\t\t__%d__\n", __LINE__);return NULL;}node->data = data;node->front = NULL;node->real = NULL;return node;
}
// 头插
int head_insert(dblink *h, char data)
{if (NULL == h){printf("入参为空\t\t\t__%d__\n", __LINE__);return -1;}dblink *p = create_node(data);p->real = h->real;p->front = h;h->real = p;return 0;
}
// 判空
int is_empty(dblink *h)
{if (NULL == h){printf("入参为空\t\t\t__%d__\n", __LINE__);return -1;}if (NULL == h->real){return 1;}return 0;
}
// 尾删
char del_end(dblink *h)
{if (NULL == h){printf("入参为空\t\t\t__%d__\n", __LINE__);return -1;}if (is_empty(h)){printf("这是个空链表\n");return -1;}dblink *p = h;dblink *q = p->real;if (NULL != q){while (NULL != q->real){p = q;q = p->real;}}p->real = NULL;char c = q->data;free(q);return c;
}// 遍历输出
int output(dblink *h)
{if (NULL == h){printf("入参为空\t\t\t__%d__\n", __LINE__);return -1;}dblink *p = h->real;while (NULL != p){printf("%c ", p->data);p = p->real;}return 0;
}
dblink.h
#ifndef __DBLINK_H__
#define __DBLINK_H__#include <my_head.h>typedef struct dblinklist
{char data;struct dblinklist *front; // 头struct dblinklist *real; // 尾
} dblink;dblink *create_head();
dblink *create_node(char data);
int head_insert(dblink *h, char data);
int is_empty(dblink *h);
char del_end(dblink *h);
int output(dblink *h);#endif
makefile
EXE=dblink
CC=gcc
OBJs+=dblink.o
OBJs+=main.o
CFLAGs=-call:$(EXE)
$(EXE):$(OBJs)$(CC) $^ -o $@
%.o:%.c$(CC) $(CFLAGs) $^ -o $@clean:rm *.o $(EXE)
二、
用自己的代码完成
strcpy strlen strcmp strcat函数的功能实现
main.c
#include <my_head.h>
#include "str.h"
int main(int argc, const char *argv[])
{char s1[128] = "abcde";char s2[128] = "abcdef";printf("strcpy \n%s\n", mystrcpy(s1, s2));printf("strlen \n%ld\n", mystrlen(s1));printf("mystrcmp \n%d\n", mystrcmp(s1, s2));printf("strcat \n%s\n", mystrcat(s1, s2));printf("strlen \n%ld\n", mystrlen(s1));return 0;
}
str.h
#ifndef __DBLINK_H__
#define __DBLINK_H__#include <my_head.h>char *mystrcpy(char *dest, const char *src);
size_t mystrlen(const char *s);
int mystrcmp(const char *s1, const char *s2);
char *mystrcat(char *dest, const char *src);#endif
str.c
#include "str.h"
char *mystrcpy(char *dest, const char *src)
{int i = 0;while (*(dest + i) = *(src + i)){i++;}return dest;
}
size_t mystrlen(const char *s)
{int i = 0;while (*(s + i) != 0){i++;}return i;
}
int mystrcmp(const char *s1, const char *s2)
{int i = 0;while (*(s1 + i) == *(s2 + i) && *(s1 + i) != 0 && *(s2 + i) != 0){i++;}return *(s1 + i) - *(s2 + i);
}
char *mystrcat(char *dest, const char *src)
{int i = 0;char *s1 = dest + mystrlen(dest);while (*(s1++) = *(src + i)){i++;}return dest;
}
makefile
EXE=str
CC=gcc
CFLAGs=-c
OBJs+=main.o
OBJs+=str.oall:$(EXE)
$(EXE):$(OBJs)$(CC) $^ -o $@
%.o:%.c$(CC) $(CFLAGs) $^ -o $@
clean:rm *.o $(EXE)
三、
完成父子进程的通信,
父进程发送一句话后,子进程接收打印
然后子进程发送一句话,父进程接收后打印
main.c
#include <my_head.h>
int main(int argc, const char *argv[])
{// 父发子收if (mkfifo("./FtoS", 0664) < 0){if (errno != 17){ERR_MSG("mkfifo FtoS");return -1;}}printf("mkfifo FtoS success\n");// 子发父收if (mkfifo("./StoF", 0664) < 0){if (errno != 17){ERR_MSG("mkfifo StoF");return -1;}}printf("mkfifo StoF success\n");pid_t cpid = fork();if (cpid < 0){ERR_MSG("fork");return -1;}else if (0 == cpid){// 子进程int StoF = open("./StoF", O_WRONLY);if (StoF < 0){ERR_MSG("open StoF");return -1;}int FtoS = open("./FtoS", O_RDONLY);if (FtoS < 0){ERR_MSG("open FtoS");return -1;}char buff[128] = "";ssize_t res = 0;while (1){bzero(buff, sizeof(buff));// 子收父res = read(FtoS, buff, sizeof(buff));if (res < 0){ERR_MSG("read");return -1;}else if (0 == res){printf("数据读取完毕,且写端关闭\n");break;}printf("父对子说 : %s\n", buff);// 子发父printf("子发父>>>");fgets(buff, sizeof(buff), stdin);buff[strlen(buff) - 1] = 0;if (write(StoF, buff, sizeof(buff)) < 0){ERR_MSG("write");return -1;}printf("子发父成功\n");}}else{// 父进程int StoF = open("./StoF", O_RDONLY);if (StoF < 0){ERR_MSG("open StoF");return -1;}int FtoS = open("./FtoS", O_WRONLY);if (FtoS < 0){ERR_MSG("open FtoS");return -1;}char buff[128] = "";ssize_t res = 0;while (1){// 父发子printf("父发子>>>");fgets(buff, sizeof(buff), stdin);buff[strlen(buff) - 1] = 0;if (write(FtoS, buff, sizeof(buff)) < 0){ERR_MSG("write");return -1;}printf("父发子成功\n");// 父收子bzero(buff, sizeof(buff));res = read(StoF, buff, sizeof(buff));if (res < 0){ERR_MSG("read");return -1;}else if (0 == res){printf("数据读取完毕,且写端关闭\n");break;}printf("子对父说 : %s\n", buff);}}return 0;
}
相关文章:
国庆小练习
一、二、三 一、 创建一个双向链表, 将26个英文字母通过头插的方式插入到链表中 通过尾删的方式将数据读取出来并删除。main.c #include <my_head.h> #include "dblink.h"int main(int argc, const char *argv[]) {dblink *h create_head();for…...
springboot单体项目如何拆分成微服务
要将一个Spring Boot单体项目拆分成微服务,可以按照以下步骤进行操作: 识别业务域:首先,需要对单体项目进行业务域的划分。将项目中的功能按照业务领域进行分类,每个业务领域可以成为一个独立的微服务。 定义服务接口…...
解决recovery页面反转的问题
1.前言 在android 10.0的系统rom定制化开发工作中,在系统中recoverv的页面也是相关重要的一部分,在系统recovery ta升级等功能,都是需要recoverv功能的,在某些产品定制化中 在recovery的时候,发现居然旋转了180度&…...
如何使用nuScenes数据集格式的单帧数据推理(以DETR3D为例)
【请尊重原创!转载和引用文章内容务必注明出处!未经许可上传到某文库或其他收费阅读/下载网站赚钱的必追究责任!】 无论是mmdetection3D还是OpenPCDet都只有使用数据集(使用哪个数据集由配置文件里指定)训练和测试的代码,没有使用…...

大语言模型之十三 LLama2中文推理
在《大语言模型之十二 SentencePiece扩充LLama2中文词汇》一文中已经扩充好了中文词汇表,接下来就是使用整理的中文语料对模型进行预训练了。这里先跳过预训练环节。先试用已经训练好的模型,看看如何推理。 合并模型 这一步骤会合并LoRA权重࿰…...
iOS AVAudioSession 详解
iOS AVAudioSession 详解 - 简书 默认没有options,category 7种即可满足条件 - (BOOL)setCategory:(AVAudioSessionCategory)category error:(NSError **)outError API_AVAILABLE(ios(3.0), watchos(2.0), tvos(9.0)) API_UNAVAILABLE(macos); 有optionsÿ…...

26-网络通信
网络通信 什么是网络编程? 可以让设备中的程序与网络上其他设备中的程序进行数据交互(实现网络通信的)。 java.net.包下提供了网络编程的解决方案! 基本的通信架构有2种形式:CS架构( Client客户端/Server服…...

嵌入式Linux应用开发-基础知识-第十九章驱动程序基石③
嵌入式Linux应用开发-基础知识-第十九章驱动程序基石③ 第十九章 驱动程序基石③19.5 定时器19.5.1 内核函数19.5.2 定时器时间单位19.5.3 使用定时器处理按键抖动19.5.4 现场编程、上机19.5.5 深入研究:定时器的内部机制19.5.6 深入研究:找到系统滴答 1…...

一文拿捏SpringMVC的调用流程
SpringMVC的调用流程 1.核心元素: DispatcherServlet(前端控制器)HandlerMapping(处理器映射器)HandlerAdapter(处理器适配器) ---> Handler(处理器)ViewResolver(视图解析器 )---> view(视图) 2.调用流程 用户发送请求到前端控制器前端控制器接收用户请求…...
一文详解 JDK1.8 的 Lambda、Stream、LocalDateTime
Lambda Lambda介绍 Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。 Lambda表达式的结构 一个 Lamb…...

WebSocket实战之二协议分析
一、前言 上一篇 WebSocket实战之一 讲了WebSocket一个极简例子和基础的API的介绍,这一篇来分析一下WebSocket的协议,学习网络协议最好的方式就是抓包分析一下什么就都明白了。 二、WebSocket协议 本想盗一张网络图,后来想想不太好&#x…...
LeetCode //C - 208. Implement Trie (Prefix Tree)
208. Implement Trie (Prefix Tree) A trie (pronounced as “try”) or prefix tree is a tree data structure used to efficiently store and retrieve keys in a dataset of strings. There are various applications of this data structure, such as autocomplete and s…...

【Python】time模块和datetime模块的部分函数说明
时间戳与日期 在说到这俩模块之前,首先先明确几个概念: 时间戳是个很单纯的东西,没有“时区”一说,因为时间戳本质上是经过的时间。日常生活中接触到的“日期”、“某点某时某分”准确的说是时间点,都是有时区概念的…...

Python 无废话-基础知识元组Tuple详讲
“元组 Tuple”是一个有序、不可变的序列集合,元组的元素可以包含任意类型的数据,如整数、浮点数、字符串等,用()表示,如下示例: 元组特征 1) 元组中的各个元素,可以具有不相同的数据类型,如 T…...
【Win】Microsoft Spy++学习笔记
参考资料 《用VisualStudio\Spy查窗口句柄,监控窗口消息》 1. 安装 Spy是VS中的工具,所以直接安装VS就可以了; 2. 检查应用程序架构 ChatGPT-Bing: 对于窗口应用程序分析,确定应用程序是32位还是64位是很重要的,因…...

如何解决版本不兼容Jar包冲突问题
如何解决版本不兼容Jar包冲突问题 引言 “老婆”和“妈妈”同时掉进水里,先救谁? 常言道:编码五分钟,解冲突两小时。作为Java开发来说,第一眼见到ClassNotFoundException、 NoSuchMethodException这些异常来说&…...

数据结构—归并排序-C语言实现
引言:归并排序跟快速排序一样,都运用到了分治的算法,但是归并排序是一种稳定的算法,同时也具备高效,其时间复杂度为O(N*logN) 算法图解: 然后开始归并: 就是这个思想,拆成最小子问题…...

Multiple CORS header ‘Access-Control-Allow-Origin‘ not allowed
今天在修改天天生鲜超市项目的时候,因为使用了前后端分离模式,前端通过网关统一转发请求到后端服务,但是第一次使用就遇到了问题,比如跨域问题: 但是,其实网关里是有配置跨域的,只是忘了把前端项…...

msvcp100.dll丢失怎样修复,msvcp100.dll丢失问题全面解析
msvcp100.dll是一个动态链接库文件,属于 Microsoft Visual C Redistributable 的一个组件。它包含了 C 运行时库,这些库在运行程序时会被加载到内存中。msvcp100.dll文件的主要作用是为基于 Visual C 编写的程序提供必要的运行时支持。 当您运行一个基于…...

最新AI智能问答系统源码/AI绘画系统源码/支持GPT联网提问/Prompt应用+支持国内AI提问模型
一、AI创作系统 SparkAi创作系统是基于国外很火的ChatGPT进行开发的AI智能问答系统和AI绘画系统。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图…...

网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...

shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...