自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 模拟实现FTP服务器(socket套接字实现)

首先我们得知道什么是FTP服务器,它是干什么的。FTP服务器,是在互联网上提供存储空间的计算机,它们依照FTP协议提供服务。 FTP的全称是File Transfer Protocol(文件传输协议)。顾名思义,就是专门用来传输文件的协议。大家如果想详细了解可以自行百度。

2023-01-06 19:55:33 594 2

原创 linux系统编程之网络编程

函数原型:int socket(int domain, int type, int protocol);参数1:指明所使用的协议,通常为AF_INET,表示互联网协议族(TCP/IP协议族);(AF_INET—IPv4因特网域、AF_INET6—IPv6因特网域、AF_UNIX—Unix域、AF_ROUTE—路由套接字、AF_KEY—密钥套接字、AF_UNSPEC—未指定)参数2:指定socket的类型;(SOCK_STREAM:流式套接字提供可靠的、面向连接的通信流;

2022-12-19 13:14:38 1689

原创 linux系统编程之线程

函数原型://创建互斥量(动态)参数1:指向互斥量的指针;参数2:互斥量的属性,一般为NULL;pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER //静态初始化成功返回0,否则返回错误码;//销毁互斥量参数:指向互斥量的指针;成功返回0,否则返回错误码;//互斥量加锁参数:指向互斥量的指针;成功返回0,否则返回错误码;//互斥量解锁参数:指针互斥量的指针;成功返回0,否则返回错误码;

2022-11-30 21:28:22 607

原创 linux系统编程之进程间的通信

1.无名管道:速度慢,容量有限,只有亲缘进程之间才能通信;2.有名管道:速度慢,但是任何进程间都能通信;3.消息队列:容量受系统限制,第一次读时,要考虑上次没有读完的数据问题;4.共享内存:能够容易控制容量,速度快,但要考虑同步问题;5.信号量:用来同步消息;以上就是进程间通信相关内容,有不对的地方欢迎大家批评指正。

2022-11-26 13:17:45 645

原创 linux系统编程之进程

1、什么是程序,什么是进程答:程序是静态的概念,比如我们在编译.c的文件时-gcc xxx.c -o pro,其中pro就是程序,pro文件是在磁盘中生成;进程是程序的一次运行活动,每运行一次程序系统中就多了一个进程。2、如何查看系统有哪些程序答:ps -aux 查看所有进程;ps -aux|grep xxx 查看与xxx相关的进程;top 类似任务管理器。

2022-11-19 12:16:26 389

原创 linux系统编程之文件编程

用一个函数之前我们必须了解其原型,在linux环境下在我们用CTRL+ALT+T调出终端,在终端界面输入man 2 open就可以看到对open函数的说明: 我们在代码上体现一下:打印出来的文件描述符为3,说明成功打开了file1,当然这里是因为我提前用touch file1创建了file1, 那如果文件不存在呢?在原本代码上添加了O_CREAT,并且说明0600权限,其作用就是没有该文件就创建该文件,我先通过rm file1把之前创建的file1给删掉了,在执行修改后的代码,从输出结果可以看

2022-10-30 12:28:31 1285 1

原创 贪吃蛇小项目C语言版(基于LINUX操作系统下)

1.首先,制作一个游戏地图——一个大的矩形框,这里我是用的for循环来打印的,大家可能会想为什么不直接用printf()来打印,直接用printf()可以直观上得到地图,但是对后续操作极其不便,因为这是一个固定地图,不能动态变化,所以我们用for循环加上if-else if语句来动态打印地图(注意:要根据打印出来的地图的样子不断修改)。2.接下来就是贪吃蛇本身了,游戏中贪吃蛇是由3个[]组成的,在地图中打印3个[]可以通过静态链表和动态链表来完成,毫无疑问我们要选择动态链表。

2022-10-28 17:55:00 2230 1

原创 C语言数据结构之链表

从某个节点前面插入新节点比从后面插入要多进行一次判断,判断是否为头节点,另一个要注意的地方就是while里的判断条件是用p->next来判断的,这是因为我们可以通过p来找到p的后一个,但是找不到p的前一个,所以这里我们灵活变换一下,代码实现逻辑和从后面插入大同小异。删除一个节点实现逻辑也很好理解,肯定也是要不断遍历,找到对应节点后把原本指向它的结构体指针指向它的下一个,然后按道理我们要把它free掉,上面的代码就是实现尾插法创建链表,这种方式创建出链表中节点的顺序也就是我们正常所认为的顺序,最先的就是头。

2022-10-19 19:58:10 5102

原创 嵌入式开发之C语言基础(七.结构体详解)

学习一个新的内容我们必须先了解我们为什么要学习它,这样才有学习的意义,就比如我们为什么要学习结构体?首先,结构体可以由不同类型的成员构成,我们可以理解这一结构体为同一类,那我们为什么要用结构体呢?这篇文章我们进入C语言结构体相关内容,结构体在我们平常大项目的开发中会经常遇见,所以我们也需要掌握C语言中的结构体。,其成员我们也可以任意修改,要注意struct这个单词的拼写。这里我们用二级指针**p来承接pxm的地址,故p就是&pxm,*p就是pxm,所以之前的代码中涉及到pxm都可以用*p来代替。

2022-10-13 17:16:42 1001 1

原创 嵌入式开发之C语言基础(六.字符串详解)

而且我们发现字符指针的大小为8,这是为什么呢,在之前的文章我们也讲过,指针的大小就是8个字节,不论是什么类型。至此,我们这篇关于字符串的内容就讲完了,希望大家好好理解消化,估计大家有问题的地方还是在指针,如果对指针不是很了解的同学可以看看我上一篇的内容,对指针有很详细的讲解。这里应该没问题,但是不知道大家发现问题没用,我注释了两行代码,这两行代码如果不注释代码就会出问题,因为pdata1是指向字符串常量地址的指针,因为字符串常量地址是不能被修改的,所以不能像上述方法进行修改字符串。

2022-09-28 13:07:31 650

原创 嵌入式开发之C语言基础(五.指针详解)

可以看到arr、arr[0]和arr[0][0]的地址都是一样的,因为它们都是指向首元素的地址,不知道大家有没有和开始的我一样,对&arr[0]和&arr[0][0]这里有疑惑,前面不是说arr[0]是个数组名吗,arr[0][0]是arr[0]的首元素,所以arr[0]=&arr[0][0]是可以理解的,那为什么&arr[0]=&arr[0][0]呢,还是那句话,传参其实也不是很难,在这段代码中,我还是想提一下指针使用的形式,上文我们也聊到过了,这里我希望大家关注一下scanf( )中的指针使用,

2022-09-18 19:36:43 1488 1

原创 嵌入式开发之C语言基础(四)

函数的嵌套其实很好理解,就是在函数中再调用函数,在我们做项目的时候函数嵌套也是必不可少的,把每一个模块实现的功能封装成一个函数,而模块与模块之间又有联系,有可能一个模块中需要调用另一个模块才能实现完整的功能,这就是函数嵌套。在int addfunc(int a,int b)中,开头的int就是函数返回值类型,addfunc就是函数名,int a、int b就是形参及其类型,花括号里的就是函数体,在main函数中调用这个函数,实现加法运算,很明显我们可以看出来,主函数和我们自定义函数中的参数虽说。

2022-09-09 13:49:29 544

原创 嵌入式开发之C语言基础(三)

数组如果就这样使用的话,意义不大,很明显这里也不是很难,数组在今后嵌入式开发过程中基本上是伴随函数、指针啥的出现,下篇文章我们再来探讨探讨。接着第二轮,从第二个元素开始,和一轮一样的方法比较,确定第二个元素;就是通过数组中相邻的两个元素比较,同样是根据是需要升序还是降序来交换位置,我们来用个表个来推理一下:假设一个数组:arr[5] = {41,36,12,96,85};这篇文章我们来讲数组,数组呢,说难也难说不难也不难,难主要体现在后面和函数、指针一起使用,今天就先来简单了解一下数组。...

2022-08-27 18:37:41 421

原创 简易电动车报警装置(基于51单片机)

这个项目到此也就完成了,但是有一个地方我觉得可能需要修改一下,就是433M无线发送接收模块那块,我们需不需要将接D1和D2的这两个引脚初始化电平为0呢,因为我查资料说普通51单片机引脚默认是高电平,现在这个模块被我玩32的时候给烧了,没办法自己实操了哈哈哈,有知道的大佬可以在评论区聊一聊。好了,正式进入今天的主题。到此,我们需要用的中断就配置完了,这里需要注意的是IE0和IE1这两个位,配置时不需要把IE0和IE1置1或置0,手册中说到这是标志位,我们可以用来查询啥的,具体大家可以自己在手册上看看。

2022-08-24 15:11:53 1009 2

原创 嵌入式开发之C语言基础(二)

图一使用的switch...case语句,图二使用的if...elseif语句,很明显图一可以用if...else if语句来替换,但是图二可以用switch...case语句来替换吗,很明显图二用switch...case语句明显复杂了许多,所以我们平时自己做项目的时候要根据自己的情况而定。这里涉及到了关系运算符,括号里的>就是关系运算符,用到if当然也少不了else,简单的if...else语句不难,不满足if就else,无非就两种情况,这也称双分支控制的条件语句,这里面呢有一个叫条件表达式的东西,

2022-08-23 17:18:55 557

原创 嵌入式开发之C语言基础(一)

所谓变量,顾名思义变量表示其值在程序执行过程中是可以改变的,在C程序中,变量在使用之前必须先定义。一般形式:类型关键字 变量名;其中关键字就比如int、float,char等等,而变量名(也称标识符,这里注意一下,我初学C语言的时候这里卡壳了一会)就是由我们自己决定的,但是其也有其命名的规则,变量名由字母数字下划线组成,且只能以下划线或者字母开头,不能以数字开头,比如int a,int data,int _data等;而且要注意区分大小写,比如sum和SUM是两个变量;...

2022-08-17 14:52:07 2210 5

空空如也

空空如也

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

TA关注的人

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