自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 TCP/Socket

我们用accept接收客户端信息的时候,需要重新定义一个文件描述符,之后我们拿着新的文件描述符直接去通讯,之前的描述符就继续去监听其他新的客户端信息,当我们使用完的时候一定要记得释放文件描述符,要不然会造成文件描述符泄露。: 接受一个连接请求,创建一个新的套接字用于与客户端通信。: 指向要绑定的地址结构体的指针,通常是。: 关闭套接字的读、写或读写功能。: 指向客户端地址结构体的指针。: 指向服务器地址结构体的指针。: 发送数据到已连接的套接字。: 从已连接的套接字接收数据。: 客户端地址结构体的长度。

2025-03-19 19:44:42 549

原创 UDP-网络编程/socket编程

我们来介绍socket编程的第一个接口:socket,它需要用到的头文件如图:其中domain表示域或者协议家族:本次我就用AF_INET(ipv4)来做演示type参数表示用什么通讯方式,我们用udp来演示,所以使用SOCK_DGRAM:protocol平时使用我们都传零就行目前来说我们再看看socket的返回值:可以看到,socket返回值是一个文件描述符,

2025-03-11 16:57:10 800 13

原创 Linux网络基础

在计算机发展之初,各个实验室,科学家等在使用计算机做学术研究的时候,都少不了电脑与电脑之间的数据交互,那么可以使用线来把各台电脑互相连接起来共享数据,这也就是内网--当然实验室和实验室之间也要进行协作开发,所以实验室与实验室之间的数据交互也非常重要,至此科学家们发明了交换机和路由器,实现了两局域网的通信,他就是广域网(可以理解为大点的局域网)人与人之间是互相协作的,也就会要求计算机之间也要互相协作,所以网络的出现的必然的。

2025-03-08 10:52:43 1718 15

原创 线程POSIX信号量/基于环形队列的⽣产消费模型

信号量的本质就是一个计数器,也是对资源的预定机制,POSIX信号量和SystemV信号量作⽤相同,都是⽤于同步操作,达到⽆冲突的访问共享资源⽬的。但 POSIX可以⽤于线程间同步。

2025-03-04 10:52:07 381 7

原创 Linux线程同步与互斥应用/生产者消费者模型

当一个生产者往缓冲区写入数据的时候,其他生产者得等他放完数据之后才能再往里面写数据,消费者也一样,当消费者去超市买东西的时候,其他消费者也不能进去买东西,除此之外还有一个问题,当工厂怎么知道缓冲区的容量是否已经满了?消费者怎么知道超市里有没有东西买?我们拿工厂,超市和消费者直接的关系来做讲解,首先人去超市买东西的过程就不用多说,但是超市本身是不能生产商品的,他们需要从各个不同的工厂进货商品,然后再给消费者买,以计算机的角度来看的话超市就是一个具有缓存的数据结构,工厂和消费者就是线程:(工厂等于生产者)

2025-03-02 20:27:23 312 8

原创 Linux下线程的同步与互斥

开头我们来写一个简单的程序,实现用多线程的方式来抢票,代码如下:运行完结果后发现,我这只有一万张票,在if条件判断里我也做了判断,怎么会干到-2来了呢?运用线程的理论知识我们知道,ticketnum在线程中属于共享资源,它不具有原子性,在我们需要对变量进行减减的时候,内存会将变量存入cpu中减减,然后再把减完后的内容写入内存里三步,

2025-03-02 11:19:48 751 6

原创 linux下线程创建·退出·等待

pthread_self()就是获得自己的线程id;其中,线程不能进行程序替换,会把原来程序的内容也替换了这样会导致很多错误。

2025-02-28 19:17:46 310 5

原创 Linux进程信号保存/操作系统运行原理

就是时钟中断时固定的发过来:1纳秒count--;---时间片本质就是一个计数器,当count==0时,就进行进程切换。

2024-11-26 16:06:08 1268 18

原创 Linux初识进程信号

信号是内置的,进程认识信号,是程序员内置的属性。

2024-11-24 16:54:29 1199 14

原创 ELF加载,进程地址空间与可执行程序的关系

操作系统要如何认识可执行程序?我们的可执行程序是有格式的:用指令size 加可执行程序名:其中test就是代码块,data就是数据块,不仅可执行程序有格式,动态库,静态库也有格式,他们的格式有一个统一的命名叫做,我在网上找了一些关于ELF的结构图:其中先讲中间黄色这一段section,我们称之为节,用来分别存放不同属性的内容,其中在size看到的多个属性中,就分别是里面的某个节。

2024-11-06 20:23:19 1001 13

原创 Linux动态库和静态库

做库时,头文件(.h)必须暴露,源文件(.c)必须隐藏。操作:将需要形成库的文件编译成.o文件:这时候就可以把头文件和库文件交给另外一个人使用。

2024-11-04 19:07:13 1173 16

原创 Linux软硬链接

看到第三行,可以看到有个箭头指向,就是给test.c建立了软链接,也可以看到他们的inode不一样,那么我们来分别cat一下这两个文件看看结果:由此可以得出结论,软连接的本质是一个独立文件,与源文件有不同的inode,用cat打开查看两文件时发现两文件内容一模一样,其作用就和windos中的快捷方式一样。

2024-11-03 20:08:49 1510 9

原创 Linux文件系统_inode

我们知道磁盘分完组之后,组内结构就如下图所示:其中,inode Table是用来存储inode数据的区域,inodeBitmap则是用来查看inodeTable的具体使用情况。Data blocks则是用来存放文件内同数据的,Block Bitmap则是用来查看Data blocks的具体使用情况。由此我们可以知道,存储文件属性与内容的位置与位图的位置上是一一对应的,如果inode table中某组数据被占用了,就把inode bitmap中的位置变为1,表示此数据为有效数据;

2024-10-30 19:03:11 931 13

原创 理解磁盘结构---CHS---LAB---文件系统

机械磁盘是计算机中唯的一个机械设备,特点是慢,容量大,价格便宜。磁盘上面的光面,由数不清的小磁铁构成,我们知道磁铁是有n/s极的,这刚好与二进制的01相对应,操作系统也是以01来读写,所以改变数据等于对01做改变,也就是在对小磁铁的n/s极做改变。可以看到磁盘中有一条杠在盘面上,这就是磁头,磁头与盘面不接触。读写磁盘,是从一扇区来读的而不是字节,所以磁盘是。磁盘的每一面都有一个磁头,读写哪一个磁头的本质就是读写哪一面!

2024-10-28 21:33:38 886 10

原创 Linux基础IO--重定向--缓冲区

将键盘的位置和文件换一下,就变成了直接从文件中读内容。重定向之后很少恢复,入宫需要恢复可以在重定向之前存好需要被重定向的文件。

2024-10-27 15:00:52 644 3

原创 Linux中如何理解一切皆文件

从file的角度来看我们要读写外设,我们就不关心下面的蓝色字体实现的方法,然后从file的角度往上看,我们访问外设,就只关心外设的读和写,甚至不用关系底层的设备是什么,file会自动帮我们找到对应的设备读写。这样将外设结合起来,可以看到他们的属性类别都是一样的,值可以不同,但是I。访问的是键盘显示器,然而键盘显示器等他们都有一个共同的特点就是他们都是。,读键盘就是读键盘,读显示器就是读显示器,他们没有任何关系。根据之前的学习我们会有一些少许的疑惑,我们的。那么这些外设是怎么被看成是文件的呢?

2024-10-23 21:14:45 938 16

原创 Linux文件与fd

fopen:在图中我们重点讲w和a,其他的大同小异:我们可以用fopen打开创建文件,如果用到w方法来打开文件,如果文件存在,就会清空原来的内容来写入新的内容:然后我们来改一下massage的数据:可以看到,原来的数据被清空了,再写入新的数据。如果用a方法来打开文件,就不会对文件进行清空处理,而是追加: open接口,利用位图的方式来调用O_RDONLY等函数常见的文件操作的指令有以下几种:首先我们要用只写的方式来打开文件:可以看到,如果文件存在就会直接打开写入但是如果文

2024-10-21 20:53:32 1041 12

原创 MySQL中常见函数

关键字:conv(---,---,---);图中表示把10从十进制转成16进制。

2024-10-17 17:10:54 1855 8

原创 MySQL表的基本查询下/分组聚合统计

不要单纯认为只有磁盘上的表结构导入到MySQL,真是存在表才是表,我们要人知道通过各自中间筛选,它最终结果都是逻辑上的表,无论怎么赛选,所以。`sal` decimal(7,2) DEFAULT NULL COMMENT '工资月薪',`comm` decimal(7,2) DEFAULT NULL COMMENT '奖金',实际上,用到该列的不同行的数据来分组,分组的条件由用户定,组内数据一定是相同的,可被聚合压缩。

2024-10-16 20:36:30 1385 3

原创 MySQL表的基本查询上

前面基础的文章已经讲了很多啦,直接上操作:非常简单!下一个!

2024-10-14 21:37:45 1292 10

原创 MySQL中表的约束

表中一定要有各种约束,通过约束,让我们来插入数据库中的数据是符合预期的。约束本质是通过技术手段,倒逼程序员插入正确的数据;反过来,站在MySQL的角度来单,内部已经插进来的数据,都i是符合数据约束的数据。约束的最终目标:保证数据完整性和可预期性为了完成以上的所有目标,就需要除了数据类型自带的范围约束以外的更多约束。

2024-10-13 21:08:42 1110 2

原创 MySQL中的数据类型

在Mysql中有许多衍生的int类型,比如Tinyint就是其中一个,他的最小值是-128 最大值是127那么为什么Mysql中要对这些数据做如此详细的处理?是为了让程序员对数据的合法插入,数据类型本身也是一种约束。可以看到,一旦插入数据超过范围,就会报错。在MySQL中类型分为无符号和有符号,默认是有符号;可以通过unsigened来某个字段是无符号的;例子:可以看到,该类型就不可插入带符号数字。int类型衍生中还有:smallint 最小值是-32768,最大值是32767;

2024-10-12 22:36:25 3881 7

原创 MySQL表的操作

关键字:create table +name + 内容:在写指令的过程中一定要注意输入法是中文输入还是英文输入,如果是中文输入会报错;在创建表括号后面的有两个关键字:character set 和 engine ,其中character set +编码及可以指定此表的编码格式,engine + mysql引擎可以选择相应的存储引擎。然后还有一个关键字是collate+效验集,可以修改编码效验集;当然,后面这些关键字什么都不带也不会影响表的创建。

2024-10-12 19:05:20 7669 9

原创 进程概念三

阻塞有很多种可能,这边简单的列举几种。

2024-10-10 21:03:35 413 11

原创 初识Mysql/备份,基础指令

其中,-h指明登录部署了mysql服务的主机-P指明要访问的端口号,-u指明登录用户-p输入密码。

2024-10-09 21:39:44 1027 2

原创 递归,深搜,回溯,剪枝算法讲解

递归,就是函数自己调用自己,然后在某些特定的条件下给递归设置一个递归出口,不要形成死递归:图中dfs函数就是利用自己调用自己的方式倒着打印数组的内容,出口就是在dfs中用if条件判断出口标准。

2024-10-07 20:06:42 519 5

原创 Linux进程概念二

我们利用fork函数来辅助我们讲解进程首先认识两个调用进程地址的函数:getpid(),和getppid(),他们分别可以调用自己的pid和父进程的pidfork()可以在代码层面来创建子进程,一般而言,父进程fork出来的子进程与父进程代码和数据相同,头文件是<unistd.h>,返回值是get_t:看到图示的代码和之前理论所说,会发现有很多问题,我们来一一解决: 父进程要对子进程进行管理,也就是权限更大,而子进程无权管辖父进程,所以没必要给子进程返回pid,而父进程因为要管理子进程所以可接

2024-10-03 16:41:23 343 1

原创 Linux进程概念一

一个已经加载到内存中的程序,叫做进程;正在运行的程序交做进程;

2024-09-24 19:20:38 215 1

原创 如何在vim中批量注释和取消注释

首先在你需要注释的初始所在行在命令模式下输入CTRL + v,然后按下HJKL来控制方向(不能使用键盘上的箭头方向键):然后输入 shift+i:输入两个斜杠然后加exc就可以完成批量注释:首先也是CTRL + v加上HJKL控制方向来批量选择需要取消注释的所有//:再输入d就可取消注释:

2024-09-10 09:13:41 944 1

原创 Linux中gdb的使用

指令display + name 可显示变化的变量(取消显示输入指令undiplay或编完程序才可消显。指令set + var +name=(number)可让循环中变量到达指定处。监视窗口指令:p+name可查看变量值:变量值不会随着调试的改变而变化。加入-g这条指令的意思是让gcc编译出来的程序是debug版本;指令disable + 断点编号可使代码变为失效断点。指令until+行号可让代码跳到指定行:跳出循环等。逐语句指令:s(可进入函数内进行调试)q:退出调试模式:直接退出不作解释。

2024-09-02 19:53:14 367

原创 git在Linux中的使用

创建仓库时,起好名字,在初始化仓库中选择如下图所示,开源许可证和其他操作暂时不用管创建好之后在复制仓库地址:在https中复制地址:在Linux下使用指令:git clone +你复制的地址输入git账号的用户名输入git账号密码这样仓库就拉取成功了Linux就是我拉的仓库。

2024-08-23 10:37:40 514 2

原创 make和makefile

一般来讲在改变test.c文件内容时,内存什么的也会发生变化,相当于熟悉也发生了变化,所以change也会跟着改变,但在例如修改文件权限时就只会有change改变。有的人就会问,为什么我们使用clear要再make后面写名字而编译不用?我们看到,makefile定义的指令在第一行或者在第一次走的程序只需要输入make就可执行,往下都要输入对应的命名。可以看到,test.c比test更新,这时候make就没有问题,(make判断的时间是以modify来判断)有一个直接的回答就是没必要,提高编译效率。

2024-04-25 08:59:13 565 29

原创 gcc/g++ 的使用

———gcc:只能编译c语言————g++:c++和c都可以编译当然,c语言编译还是推荐gcc。

2024-04-24 10:03:01 551 12

原创 sudo的设置

sudo指令就是提高你的用户权限,用来完成root可以完成的工作,但是有一个前提,就是被root添加到信任名单中,接下来我们要讲解如何在root中添加用户到信任名单中。这样被指定的用户就可以使用root权限了,在用户sudo时会让你输入用户的密码而不是root密码。退出一定记得保存,保存不了就使用强制保存wq!

2024-04-24 08:31:32 304 3

原创 Linux之yum和vim的使用

vim是一个多模式的编辑器,新人在刚刚进入vim时,不要胡乱触碰鼠标或者键盘,此时vim处于默认命令行模式,这时我们输入即可切换到插入模式中写代码,按左上角esc即可退出插入模式,按shift+;即可进入底行模式,可用w——保存,q——退出,!——强制执行来进行一系列操作。

2024-04-24 08:05:01 1957 8

原创 string类

由于string内写了可用函数很多而且繁杂,这篇文章只介绍我们常用的string类内的函数。

2024-04-18 11:06:31 423 25

原创 Linux权限

命令:su功能:切换用户例如,要从root用户切换到普通用户user,则使用 su user。要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的口令。在root用户中,su -用户名可以直接进到目标,不用密码就可以访问。命令:sudo ----智能提权,输入自己密码后可提升到与root同级权限,但是要后面的添加信任。

2024-04-16 16:00:19 639 8

原创 模板小细节与了解STL

是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且 是一个包罗数据结构与算法的软件框架。

2024-04-16 15:01:10 663 4

原创 C++内存管理和模板

关键字:new delete我们知道,在C语言中内存的开辟和修改,要用到函数malloc/calloc等,而且要直自己判断内存开辟是否正确,所以在C++中,提供了两函数:new/delete由于malloc无法很好的支持动态内存申请的自定义对象初始化,new/delete可以看作专门用来初始化自定义对象的关键字。用new开辟自定义对象空间时,会调用自定义对象的构造函数并开空间用delete释放自定义对象空间时,会自动调用自定义对象的析构函数并释放空间对于多个对象则会调用多次构造析构函数。

2024-04-15 11:57:27 369 18

原创 Linux常用基础指令

a 显示了隐藏的含.开头的隐藏文件-l 列出文件详细信息。

2024-04-12 14:46:58 390 4

用于分组聚合统计的练习用表,里面是员工数据等

用于分组聚合统计的练习用表,里面是员工数据等

2024-10-16

空空如也

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

TA关注的人

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