自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 具有并发功能的网页以及一点链表相关内容

具有以下功能:1 登陆进入查询页面2 搜索商品信息概述3 查看商品详细信息4 记录访客信息5 注册新用户

2024-08-07 20:28:02 1358

原创 嵌入式数据库 sqlite3

数据库文件与普通文件区别: 1.普通文件对数据管理(增删改查)效率低 2.数据库对数据管理效率高,使用方便sqlite3的使用方式

2024-08-02 18:21:29 325

原创 tcp并发 --- epoll

epoll 1.epoll创建内核事件表,不受到文件描述符上限限制 (红黑树) 2.epoll监听的事件表在内核中,直接在内核中监测事件效率高 3.epoll会直接获得产生事件的文件描述符的信息,而不需要遍历检测 4.epoll既能工作在水平触发模式,也能工作在边沿触发模式

2024-08-02 18:05:20 364

原创 TCP并发服务器

在fd_set定义变量的时候创建的文字描述符表,之后添加文字描述符,select()第一个变量是文字描述符的个数,最好定义为最大的文字描述符的值+1,之后是用于读的文字描述符的个数,写的文字描述符的个数,以及其他文字描述符的个数,最后是对于超时时间的设定。在使用select前一定要将原fds复制到一个新的变量tmpfds上,定义的fds在应用层,会将表格传给内核,内核对接收到数据的文字描述符置1,再传到应用层,会将最初的表格覆盖,所以需要将添加好后的表格复制到新的变量,再用来select。

2024-07-31 17:33:05 192

原创 网络通信HTTP

其中用了cJSON库来解析相关内容,感兴趣的朋友也可以做一做。项目:基于网络爬虫的天气查询系统。

2024-07-30 19:44:57 146

原创 网络通信---TCP协议1

指建立tcp连接时,需要客户端和服务端总共发送三次报文确认连接。断开一个tcp连接,需要客户端和服务端发送四个报文以确认断开。

2024-07-27 18:09:26 337

原创 网络通信---UDP

应用层:HTTP(超文本传输协议)、HTTPS(加密后的超文本传输协议)、FTP、TFTP、MQTT(消息队列遥测传输协议,广泛应用于物联网)数据链路层:封装成数据帧,实现点对点通信(局域网内通信),差错检测 交换机 ARP(地址解析协议,实现局域网内IP地址的获取)应用层:要传输的数据信息,如文件传输,电子邮件等(最接近用户,看传输的内容类型到底是什么)物理层:定义物理设备标准,比如网线,光纤等传输介质 比特流(高电平、低电平) bit。表示层:数据加密,解密操作,压缩,解压缩。

2024-07-26 20:20:30 584

原创 IPC进程间通信2

用alarm模拟输入与超时。用alarm模拟sleep。

2024-07-23 18:24:48 325

原创 IPC进程间通信

可以,取决于pipe有没有内容,===>read返回值为0 不阻塞。能否写fd[0] 能否读fd[1]?不可以,是固定读写端。如果在单一进程中写fd[1]能否直接从fd[0]中读到。2、所有的管道都是特殊的文件不支持定位操作。3、管道是特殊文件,读写使用文件IO。1、父子进程是否都有fd[0] fd[1],可以,写fd[1]可以从fd[0]读。4、管道的同步效果如何验证?3、管道的数据容量是多少,有没有上限值。1、管道是 半双工的工作模式。2、管道的数据存储方式是什么样的。5、固定的读写端是否就不能互换?

2024-07-22 18:24:12 355

原创 Linux--多线程2

有3个ATM机,10个人取钱,用线程模拟取钱的过程(使用互斥锁完成)

2024-07-20 18:19:06 233

原创 Linux--多线程

2.主进程结束,任意生成的次线程都会结束。(因为共享的进程空间被回收了)。1、如果预估子线程可以有限范围内结束则正常用pthread_join等待回收。2、如果预估子线程可能休眠或者阻塞则等待一定时间后强制回收。3、如果子线程已知必须长时间运行则,不再回收其资源。3.次线程的正常结束不会影响主线程的运行。1.不同与进程没有孤儿线程和僵尸线程。

2024-07-19 18:47:58 352

原创 Linux--多进程-进程的消亡

好饿好饿,我快要饿死了,赶紧写完要去干饭!利用exec与fork实现system功能。实现waitpid功能。实现atexit功能。

2024-07-18 18:23:22 125

原创 Linux多任务--进程

注意,父进程和子进程空间不共享,变量不共享,子进程是重新分配一个独立的4G虚拟空间,只有父进程内核区域的PCB块共享到子进程。

2024-07-17 18:32:23 297

原创 minishell

3.封装dic.c, dic.h 包括mkdir, rmdir, pwd, cd。1.封装file.c, file.h 包括touch, cp, mv。exit ----------》退出minishell。2.封装ls.c, ls.h 包括ls, ls -a, ls -l。1. 获取终端用户输入的命令,并输出相应的执行结果。4.封装ln.c, ln.h 包括ln, ln -s。2. 使用多文件方式实现,使用Makefile管理。6.makefile管理。以下是项目的实现过程。

2024-07-16 20:10:55 807

原创 Linux0715

fgets / fputs --------------->NULL 不能读写二进制文件('\0'---> 0)1. fopen ----------------------------->文件流指针 FILE *1. open ------------------------------>文件描述符。一切皆文件,文件IO已经学习完毕,这两天完成一个minishell的小项目。SEEK_SET 从开头位置。SEEK_CUR 从当前位置。

2024-07-15 21:30:37 464

原创 Linux操作系统应用软件编程

l -- link -- 软链接文件 --- 类似windows的快捷方式。s -- socket -- 套接字文件 --- 网络的时候 (进程间的通信)- -- regular -- 普通文件 ---二进制文件,ASCII文件。c -- character -- 字符设备文件 --- 鼠标 (输入输出设备)2.文件IO --- 系统调用-------Linux内核为用户提供的函数接口。1.标准IO --- 库函数 -------标准c库函数,

2024-02-21 19:54:19 366 1

原创 C语言基础14

由于频繁申请和释放,导致连续的空间分散成一些小的碎片空间,当malloc超过碎片空间时,则无法获得该空间(空间不连续),将这样的空间称为内存碎片。练习:要求申请堆区空间,将"hello world"存放到堆区空间,完成打印。程序中malloc的空间没有被释放。相关内容的第十五天,以下是今日所学内容。内存溢出也称为内存越界。

2024-01-31 20:43:19 255

原创 C语言基础13

练习:定义一个学生的类型,封装一个函数GetStuInfo获得学生信息放入结构体中,>> 右移 右移n位 等价于 让该数 / 2^n。<< 左移 左移n位 等价于 让该数 * 2^n。1.枚举类型一般说明将来变量的值在给定的常量中选择其一作为它的值。2.枚举常量的值总是前一个枚举常量的值+1,第一个默认为0值。结构体整体的大小必须为最大基本类型长度的整数倍。^ 按位异或 相同为0 相异为1。| 按位或 或1置1。

2024-01-30 19:39:38 1133 1

原创 C语言基础12

局部变量的地址不能返回,因为局部变量会随函数作用域结束被回收,虽然能够获得返回的地址,但地址对应的空间已经被回收过了。定义函数指针变量Fun,占8个字节空间,指向int返回值有2个int参数的函数。2.函数体内想修改函数体外指针变量值的时候,要传递指针变量的地址即二级指针。-> :结构体指针类型访问成员变量使用 ->. :结构体变量类型访问成员变量使用 .指针函数:是函数,函数的返回值类型是指针类型。将函数的返回值作为下一个函数的参数。数据类型2 成员变量2;3.enum 枚举。

2024-01-29 19:09:41 458

原创 C语言基础11

指针数组主要用来操作字符串数组,通过将指针数组的每个元素存放字符串的首地址实现对多个字符串的操作。数组不可以赋字符串常量,指针可以赋字符串常量,但不可以修改,因为字符串常量存储在数据区。二维数组主要用来存储字符串数组,通过每行存储一个字符串,多行存储多个字符串所组成的数组。二维数组传参: 传入数组指针和长度。1.指针数组传参时 :传入二级指针和长度。相关内容的第十二天,以下是今日所学内容。对指针数组冒泡排序 (对地址排序)对二维数组冒泡排序 (对内容排序)二维数组(存储)与指针数组(操作)

2024-01-27 17:57:42 257 1

原创 C语言基础10

练习:封装一个函数,给定一个字符串,统计该字符串中大写字母、小写字母、数字和空格的个数。定义一个数组指针变量,占8个字节空间,指针指向了一个int类型5个元素的数组。定义一个指针数组,数组占40个字节空间,每个元素为int *型,共5个元素。对数组指针*,值不变,类型降级成为指向数组第一个元素的指针。&a:获得数组的首地址,其类型为int (*)[5]。数组的数组名a是指向数组第一个元素的一个指针常量。指针数组时数组,数组每个元素都是指针类型。1.sizeof运算时。数组指针是指针,指针指向一个数组。

2024-01-26 20:31:37 616 1

原创 C语言基础9

使用指针变量等价于使用其内部存放的指针,所以我们有时也把指针变量简称为指针。实参地址传递给形参,形参就是实参的指针,可以通过对形参取*改变实参的值。3.指针变量:是一个变量, 变量里面存放了一个指针(地址), 称为指针变量,2.指针:指针就是地址,地址就是指针,指针多了指向的概念。p++:向内存高地址偏移指向数据类型大小个字节空间。1.宏是代码的替换,中间不进行任何数据计算的操作。1.地址:用来区分内存中不同字节的编号。相关内容的第十天,以下是今日所学内容。&:只能操作左值(变量)*:只能操作指针类型。

2024-01-25 19:44:35 620

原创 C语言基础8

练习:主函数中定义一个数组,并对元素初始化,封装一个函数完成获得数组中所有元素的平均值。局部变量,全局变量可重名,但在局部变量的作用域内,全局变量会被隐藏。数组传递时,函数体内部形参操作的数组和实参操作的数组为同一数组。练习:从终端输入一个n,封装函数获得斐波那契数列第n项的值。变量从空间被开辟到被回收的整个过程称为生存周期。变量作用域默认为离定义该变量最近的大括号内。存储类型 数据类型 变量名;自动型变量、局部变量。相关内容的第九天,以下是今日所学内容。1.auto(默认)1.赋值传递(复制传递)

2024-01-24 18:55:31 780 1

原创 C语言基础7

3.函数调用时会发生实参向形参空间的拷贝,实参将值拷贝给形参(一一对应),实参类型与形参类型不一致时,将实参类型默认转换为形参类型。两个字符串比较,从左到右每个字符进行比较,不相同的字符,谁的ASCII码值大,字符串就大。3.函数类型应该与返回值的类型一致,如果不一致以函数类型为准。1.函数类型如果不写,默认为int类型。str1和str2中,并将str2字符串拼接到str1的末尾。练习:定义两个数组str1和str2,从终端接收两个字符串存入。src数组中,并将src中的字符串拷贝到dst中。

2024-01-23 20:56:29 882 1

原创 C语言基础6

C语言没有字符串类型,也无法定义字符串变量,只能通过字符型数组,每个元素存放一个字符,最终存放字符串。strlen:获得字符串的长度(字符串开头到离开头最近的\0之间的字符个数,不包含\0字符)行数和列数:整形常量或整形常量表达式,不能为变量或变量表达式。输出: printf("str = %s\n", str);练习:从终端接收一个字符串,对该字符串倒置(逆序)后,完成打印。1.字符型数组可以存放字符,不一定包含\0。N维数组可以理解成是由N-1维数组构成的一维数组。数组类型 数组名[行数][列数];

2024-01-22 19:10:22 477

原创 C语言基础5

获得数组元素个数: sizeof(a) / sizeof(a[0])给定一部分元素的值,没有给定初值的元素,默认初始化为0。数组所占空间大小 = 数据类型所占空间大小 * 元素个数。不给定数组元素个数,通过初值元素个数决定数组元素个数。从终端接收若干个成绩,以-1结尾,计算所有输入有效成绩的平均分。元素下标:可以用变量、常量或者表达式访问。练习:从终端接收5个数放入数组中,打印出所有数据的平均值。元素下标: 0 - 元素个数-1。所有数组元素都可以得到初值。数据类型 数组名[元素个数];

2024-01-20 19:36:57 469

原创 C语言基础4

3.switch只与case后面的值比一次,如果相同则顺序向下执行,直到break或程序结束退出。先执行A,再判断B,满足条件,执行D,再执行C;之后再回到B进行判断,一直BDC循环,直到不满足B的条件,跳出循环。'A' -> 'B',如果是'z'或者'Z',打印'a'或者'A',如果输入的不是字母则打印。练习:编写程序,从终端接收两个数 Num1和Num2,如果Num1 >= Num2则打印Num1。1.从终端接收一个字母,打印出该字母在字典中的下一个字母,例如: 'a' -> 'b'

2024-01-19 19:42:30 840 1

原创 C语言基础3

且设a = 5, b = 10, x = 3.5, y = 10.8, c1 = ’A’, c2 = ’B’。4.scanf中_%c可以接收非' '和'\n'字符 ( _ 表示空格)设a,b为int型变量,x,y为float型变量,c1,c2为char型变量,2.gets可以接收带' '的字符串,scanf无法接收带' '的字符串。3.scanf除了%c形式外,均无法接收' '和'\n'字符。_%c 接收一个' '和'\n'的字符。

2024-01-18 19:39:25 921

原创 C语言基础2

x : y > z?y : z 相当于 x > y?x : (y > z?1.putchar只能打印一个字符,想打印多个字符需要多次调用putchar。从左到右依次执行表达式,并将最后一个逗号表达式的结果作为整体逗号表达式的结果。3.定义两个整形变量并对变量赋初值(初值为2位数),要求将两个数合并成一个新数并打印。小数据放入大空间:数据扩展,有符号数高位补符号位,无符号高位补0。"a":字符串常量,有2个字符'a' + '\0'定义两个变量可以是整形或者浮点数类型,对这两个变量赋值,

2024-01-17 19:15:40 1955

原创 C语言基础

float 单精度浮点数类型(最多表示6-8位有效数字),4个字节 1位符号位 + 8位指数位 + 23位尾数位。浮点数 -> 二进制形式 -> 科学计数法转换 -> 小数点后存入尾数位中 -> 指数位+偏移数(float:127 double:1023)以二进制形式存入指数位中。3.汇编:gcc -c filename.c -o filename.o。

2024-01-16 20:22:14 1669 1

原创 Linux基础

3.重启:Ubuntu系统中点击"Power Off",再将虚拟机关闭,再重新启动虚拟机和Ubuntu系统。drwxr-xr-x:分为两部分,前面d是文件类型,后面rwxr-xr-x是权限。编写代码filename.c指定生成文件filename。当前所在目录不同,登录用户不同,相同路径不会产生不同含义。3.将test1目录下的filename1.txt拷贝到test2目录下。4.将test2目录下的filename2.txt移动到test3目录下。当前所在目录不同,登录用户不同,相同路径会产生不同含义。

2024-01-15 19:54:20 971

空空如也

空空如也

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

TA关注的人

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