自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 linux:数据库连接

视图虚拟的表索引目录事务操作安装数据库安装C/C++开发库数据库1.mysql文件本身2.数据库管理系统(应用程序)stu@localhost//本主机登录stu@%//远程登陆使用TCP协议链接服务器客户端,数据库端口号3306关系型数据库oracle、mysql等就是采用了关系模型来组织数据的数据库,关系模型就是指二维表格模型,其核心元素数据行、数据列、数据表、数据库。非关系型数据库。............

2022-07-21 18:09:04 7828 1

原创 linux:git

sudoaptinstallgit在ubuntu上安装git命令输入gitversion查看当前版本信息,如果有就安装成功项目需要许多人做,当我们每个人做好后,要把代码合并到一起,git就是帮我们把代码合并到一块在工作区写代码,然后放在本地仓库,我们可以把代码发送到远程服务器中托管,别人想拿代码时,直接在服务器上取(相当于githup,gitee.....)...

2022-07-20 18:46:52 276

原创 linux 守护进程

当一个终端关闭了,整个会话断开了,会话里的所有进程也都会被关闭,这时候我们要创建一个新会话,将进程挪到新会话中,新会话没有和任何终端关联,所以我们不关闭该会话,进程会一直存在。第三步fork();//再次退出父进程,留下的是子进程的子进程,我们第一次fork等于创建了两个进程组,又一次fork等于在第二个进程组里面创建了成员进程,那么这个进程就一定是一个普通进程,可以被挪出去到我们创建的新会话中。//退出父进程,留下子进程,此时创建了两个进程组,一个父进程为组长的进程组,一个子进程为组长的进程组。...

2022-07-18 15:09:07 175

原创 I/O复用函数高性能框架库:libevent

evsignal_new其实是一个封装了的宏event_new{(框架库)、(描述符操作信号替代)、(EV_SIGNAL(信号事件)|EV_PERSIST(永久性事件))、(回调函数)、(回调函数参数)}先定义好libevent框架,注册我们关心的事件包含句柄(文件描述符)、读、写、回调函数。事件有EV_TIMEOUT(定时事件)、EV_READ(可读事件)、EV_WRITE(可写事件)、EV_SIGNAL(信号事件)、EV_PERSIST(永久性事件)event_add(事件名称,定时);...

2022-07-18 10:14:28 144

原创 I/O复用 :select poll epoll

使用情况1.同时需要处理多个套接字2.同时处理用户输入和网络连接3.同时处理监听套接字和连接套接字(用的最多)4.同时处理TCP、UDP请求5.同时监听多个端口,处理多种服务等等。

2022-07-16 15:07:53 391

原创 linux网络编程

网络:是由若干个结点和连接这些结点的链路组成,网络中的结点可以是计算机、交换机、路由器等设备。如下图就是一个简单的网络示意图网络设备:交换机、路由器、集线器传输介质:双绞线、同轴电缆、光纤、无线互联网:把多个网络连接起来的构成互联网在自己主机上查询ip地址: ifcongfigMAC地址(48位):唯一标识一台主机,但是MAC无法表示出物理地址发生的变化,当你位置变化时,寻址无法找到主机端口号:软件层次的,应用程序的代号 ipi地址+post端口号 找到主机上的某一个进程协议:一组网络的规则的集合,tc

2022-07-13 11:35:22 564

原创 linux多线程

多线程:所有程序并发运行,多条路径可以同时执行多线程包括:理解线程并发、线程同步方法、线程安全概念线程指:进程内部得一条执行路径(从主函数的第一行代码到最后一行)主线程:main 子线程:线程函数 比如:fun....进程指:一个正在运行的程序在linux平台创建线程,是内核提供的头文件#include注意编译的时候要加 -lpthreadpthread_create(线程id,默认的属性可以不设置为NULLL,参数函数); 创建线程子线程如下图 有些时候主线......

2022-07-09 14:05:59 3008

原创 mybash

创建一个buff存放通过fget获取的命令,获取完之后一定要记得最后的一个回车\n,要把它置为\0 将分割出来的命令放进myargv中,再存入cmd中 比较输入的命令是否与exit一致,通过break实现退出程序 getuid() 可以获得用户的id getpwuid() 获取用户名 失败返回NULLgethostname(数组,长度) 获取主机的名称,失败返回-1 getcwd(字符串,大小)获取当前路径 模拟linux命令提示符 设置颜色要以\033开头 以 \033[0m 结尾c

2022-07-04 16:56:46 85

原创 BF和KMP

BF字符串:abcd真子串:" “,“a”,“b”,“c”,“d”,“ab”,“bc”,“abc”,“bcd”子串:” ",“a”,“b”,“c”,“d”,“ab”,“bc”,“abc”,“bcd”,“abcd”规则:如果i只想字符和j指向的字符相等,i++ j++ ,如果不相等,j回退到开始位置,i回退到第二个字符位置,继续开始对比推出条件:如果i或j走出自身范围,越界了,月结推出后,需要判断j是否走出自身范围,如果j走出自身范围,代表找到了,就return i-j; 如果j为走出自身范围则

2022-05-29 12:38:58 49

原创 八大排序入门

直接插入排序:每次从待排序序列中取值,放到已排序好的序列中(放完之后保证依旧有序)时间复杂度O(n平方) O(1)稳定性:稳定观察是否稳定方法:查看是否存在跳跃交换 (稳定性:如果相同的两个值,A和B,如果排序前A 在B之前,排序后仍然在B之前称为稳定)优点:1.实现简单 2.数值个数少使用直接插入排序特点:数据越有序,排序越快希尔排序:(shell) 也叫缩小增量排序,是对于直接插入排序的优化时间复杂度: O(n的1.5~1.7次方)空间复杂度: O(1) 稳定性:不稳定选取

2022-05-29 12:38:25 417

原创 linux中期2

文件操作open read write closeman 1.命令 2.系统调用 3.库函数系统调用时现在内核中,陷入内核,切换到内核态fopen调用的openprintf调用的write打开文件:读、写、读写linux/unix 没有文本二进制区分在linux中写一个文件时,写一个hello 里面有特殊的字符比如“\n” 它会把字符拆成两个去存,读的时候又会合成一个字符open(fb,操作模式,mode权限) //括号里参数:1.文件名2.打开方式,rw是

2022-05-29 12:37:26 74

原创 linux 中期

printf 缓冲区printf 1.缓存区放慢会直接打印出来 2.缓冲区未满,强制刷新会直接打印出来 3.程序未结束强制刷新:fflush(stdout) /nmain 中的参数argc是参数个数 argv是参数列表 envp是环境变量列表fork 复制进程main main.c 在I/O设备(硬盘)./main 运行在内存中linux中编译文件是ELF格式 windows中编译文件是PE格式操作系统:管理内存,管理进程,

2022-05-12 16:20:02 196

原创 顺序表实现的队列

问题一:因为栈的出栈和入栈都能达到O(1) 但是顺序表实现的队列却不能同时为O(1)那么怎么修改下顺序表的结构体设计 让其入队出队都为O(1)答案:将顺序表臆想称环形,让头和尾相连,出队和入队只需要挪动头指针front和尾指针rear,元素不动,指针动,问题二:如何判断空和满答案:第一种:判空:(front==rear && count==0)判满:(front==rear && count!=0)第二种:问题三:如何求循环队列有效值个数

2022-05-10 19:11:57 132

原创 C语言查漏补缺

define和typedef使用时:#define int* int_p int_p a,b 定义变量时 只有a的类型是int*typedef int* int_t int_t a,b 定义变量时 a和b都是int*类型声明对应的编译器,有两个含义:1.告诉编译器,这个声明的名字已经匹配到同一内存上了2.告诉编译器,声明的名字已经被占用了,别的地方不能再出现定义和声明最重要的区别就是,定义开辟了内存,声明还没有开辟内存extern 外部定义关键

2022-05-10 19:11:23 310

原创 哈希简单入个门

#哈希##1.哈希的基础Hash,散列哈希:指的是让数据关键字和最终的存储位置之间有一个确定的哈希关系(对应关系),使得每一个关键字(值)都对应一个存储位置,对于这种对应关系叫做哈希函数(散列函数)哈希表:让数据存储位置和数据关键值本身产生某种联系,方便第一时间找采取这种哈希函数,将数据记录在一片连续的存储空间内,这一片连续的存储空间一般10 11 22 33 44 55 66 77 88 990 **1 **2 *3 *4 *5 **6 *7 *8 **9y

2022-05-06 14:48:20 239

原创 linux库文件

windows静态库文件扩展名.lib 动态库文件扩展名.dlllinux 静态库.a 动态库.so都是将函数封装在一起编译后供自己或他人调用,好处是编译后的库文件看不带源代码,可以保密linux库文件一般存在 /lib 和/usr/lib 64位下也有可能存在 /usr/lib64 下linux库有两种 一种静态库lib**.a 一种共享库lib**.solib**.a 静态库 => 链接阶段 => 复制一份到 可执行程序内部lib**.so 共享库 =...

2022-05-05 15:47:30 949

原创 Linux 环境下如何进行C代码调试

gcc -o 可执行文件名 文件名.c -g 向可执行文件中添加调试信息gdb 可执行文件名 开始调试b +行号 添加断点r 启动程序l 查看当前运行的代码n 一步一步向下执行代码p +变量名 打印变量信息q 结束调试info break/info b 查看断点信息delete +断点编号 删除断点...

2022-05-05 14:06:40 296

原创 顺序栈设计

栈:限定在表尾进行插入和删除操作的线性表特点:先进的后出去,后来进入的先出去的一个数据结构,类似于枪械的弹夹,叠放的盘子限定插入和删除的一端叫做栈顶,入职相对的另外一端叫栈底栈的插入和删除操作叫做入栈和出栈操顺序栈:用顺序表实现的顺序栈1.可以定义个栈顶指针来帮助成员入栈出栈,可以定义一个top的下标相当于index,初始为0,也就是开始地址0,通过arr[top],一个位置一个位置挪动2.设计stacksize (最大容量),帮助扩容设计:1.先定义一个宏STACK_INI

2022-04-27 16:02:04 246

原创 顺序表、单链表优缺点

顺序表:优点: 1.实现简单,逻辑简单 2.可以访问任意结点在O(1)缺点:1.插入新节点需要向后挪 O(n) 2.删除新节点时需要向前覆盖 O(n)注意:顺序表在尾部进行的插入和删除 O(1)单链表:逻辑相邻,物理不一定相邻优点:头插头删不需要找到插入位置和待删除节点的上一位 O(1)缺点:访问节点不能直接访问,需要遍历 O(n)根据单链表特点,链表栈只需要在一端进行插入删除,并且在头部入栈出栈最优...

2022-04-27 16:00:44 2011

原创 linux 编译

gcc:编译文件一层一层编译:1.gcc -E 文件.c -o 文件.i 预编译2.gcc -S 文件.i -o 文件.s 编译3.gcc -c 文件.c -o 文件.o/obj 汇编4.gcc 文件.c -o 文件 链接ls -l 查看文件详细信息 绿色的就是可执行文件“./可执行文件名” 执行可执行文件 必须是可执行文件才行一步编译:gcc -o 新名字 文件 比如gcc -o main main.c一步编译成可执行文件,ls -l显示绿色编译成功...

2022-04-25 17:17:07 677

原创 linux 文件

linux中一切皆是文件,不宜文件扩展名分类“-” :普通文件 “d”:目录文件 “p”:管道文件 “l”:链接文件 “b”:块设备文件 “c”字符设备文件 “s”:套接字文件“r”:可读,等于4 “w”:可写,等于2 “x”:可执行,等于1 rwx =421rw-:u:user 文件归属人权限rw-:g:group 表文件同组用户权限r--:o:other 外人访问权限修改权限:chmod u/g/o +:增加全选 -:减少权限 r/w/x 或者 chmod 77...

2022-04-25 17:07:14 728

原创 linux 进程

进程就是运行中的程序PCB :进程描述符(进程控制块),一个PCB对应一个进程,PCB就是一个双向循环链表PID是操作系统对进程的标识符ID,也叫进程号,对应一个进程创建进程时,先建立一个PCB,再加载进程,撤销时,先撤销进程,再撤销PCB僵死进程:进程释放,PCB没释放命令:ps 显示当前终端正在进行的程序 -e/-A显示详细进程信息 -ef展示更多的信息 -f显示更多属性(全格式) -L显示进程的线程IDpstree 把进程以树状图形式显示kill +id 结束一个进程

2022-04-25 15:43:29 606

原创 linux简单介绍

特点:1.性能稳定 2. 开源 3.防火墙组件性能高效 4.多用户、多任务操作系统硬件:1.运算器:判断 2.控制器CPU:指挥 3.存储器:内存、外存 4.输入设备 5.输出设备linux与windows区别linux:1.使用命令行操作 2.应用于服务器 3.开源项目 4.多用户操作,可以创建多个用户,大家一起使用一台电脑windows:1.图形化界面 2.个人操作系统 3.不开源 4.单用户操作组成:/ 根目录bin 存放常用命令 将可执行的文件拷贝到bin就能使用e.

2022-04-25 12:18:56 53

原创 linux 命令大全(持续更新...

基础命令uname -a 查看版本sudo su 切换管理员 su 切换其他用户 exit 退出管理员身份ls 查看当前文件夹的文件 ls -l 可查看文件及其信息 ls -a查看隐藏文件 ll 查看文件信息和隐藏文件mkdir 创建文件夹 touch 创建普通文件cd 切换路径 可切换相对路径和绝对路径 cd .. 切换到上一级目录 cd . 当前目录pwd 查看当前路径clear 清屏chmod 修改文件权限vim 编辑文件man +任意命令 查看命令的用法.

2022-04-25 12:03:58 53

原创 文件指针知识

定义:EILE * fp=fopen("文件名","打开操作方式");fopen("1.txt","r") 如果1.txt不存在 打开失败 fp==NULL;如果操作完文件 关闭文件fopen打开文件 为文件建立相应的信息区和文件缓冲区fclose关闭文件 撤销文件信息区和文件缓冲区r 只读(文件必须存在)w 只写(覆盖原来的文件,文件如果不存在则自动创建)a 末尾只写(在原来的文件后面追加去写,不存在则创建)r+ w+ a+ 读写rb w...

2022-04-14 13:23:07 115

原创 二维数组定义

void 无类型,不能定义变量,可以定义指针signed 有符号数 unsigned 无符号数 主要修饰整型变量,不能修饰float double

2022-04-12 15:59:33 108

原创 C语言标准文件和缓冲区

标准文件:电脑显示器称为标准输出文件 stdout printf() getchar()等函数 默认从stdout中输出数据键盘称为标准输入文件 stdin scanf() putchar()等函数默认从stdin中获取输入stderr 称为标准错误文件 指显示器 perror() 函数默认向stderr输出数据stdprn称为标准打印文件 指打印机缓冲区指...

2022-03-09 15:04:01 1105

原创 C语言结构体

使用struct +结构体名称{};来定义结构体,必须要拿;结束结构体变量定义时,初始化需要用={};进行初始化初始化数值要与定义结构体时数值序列一一对应输出变量时printf(“%c”,结构体变量名.属性名称);. 只能和结构体变量名结合查询,指针如下图:指针访问结构体成员是时,用指向符访问...

2022-03-07 16:22:47 423

原创 C语言指针

了解指针要先了解内存和地址的概念内存在程序中成为主存DRAM,他是外存(硬盘)与CPU进行沟通的桥梁,所有程序的运行都是在内存中进行的,把内存分为八位二进制的存储单元,为了访问内存的每个存储单元,进行了编号,称为内存存储单元地址x86 32位二进制 占4个字节 X64 64位二进制 占8个字节 (八位二进制是一字节)地址没有大小,只有高低,%p表示输出某个变量的地址的格式控制符指针变量自身的值就是地址!!!!!!!!取得是变量的低地址(首地址)!!!指针变量是存储地址的变量 int*i.

2022-03-06 14:05:40 423

原创 C语言自增运算符

++a;b++;两者单独写没区别都是自增加一但当赋值时比如:x=++a;时逻辑为a的值先自增加一,然后赋值给xx=b++;时逻辑为先将b的值赋值给x,然后b的值再自增加一只能在左值上实现,不能再右值上实现只能在整数位实现自增,不能再小数位实现自增...

2022-03-04 22:38:17 563

原创 C语言作用域(可见性)和生存期

程序的一次执行就叫进程,只有编译成功形成.EXE文件,才能分配CPU和内存进程分配CPU资源和内存资源进程把内存资源分为:代码区、数据区、堆、栈区作用域(可见性):标识符可以被使用的范围,只有在作用域内标识符才能被使用作用域针对的是编译和链接的过程中,函数中定义的标识符,包括形参和函数体中定义的局部变量作用于都只在该函数内部,也叫做函数域而文件作用域(全局作用域)就是定义的全局变量和定义的函数都叫做文件作用域或全局作用的,整个文件都是它们可以“活动”的范围函数是最小的单位,不允许函数

2022-02-25 19:28:27 753

原创 C语言函数

函数是在结构化的设计中,函数将任务进行模块划分的基本单位,通过函数把复杂的任务分解成若干个小任务,充分体现了结构化程序设计由粗到精,逐步细化的设计思想,分出来的模块每个实现一个特定的功能,称为子程序,C语言中子程序用函数实现定义函数 : 函数返回值类型 函数名 (形参列表){ 函数体 }调用函数时,实参不用加数据类型定义形参时,每一个形参前面都要有数据类型,形参名定义的时候可以忽略掉定义实参前面不用每个都加数据类型C语言被调用函数的位置放主函数前或后,VS2019都能编译成功但有

2022-02-25 17:37:48 401

原创 C语言语句

2022-02-23 12:42:16 682

原创 C语言枚举常量、字符常量、字符串常量

枚举常量只能是整型,定义枚举常量必须在范围之内ASCII码产生原因:任何数据都以二进制储存,但没法真正意义储存一个字母“a”,二进制只能落实到数不能成文本,所以ASCII码是一套编码系统,用8位二进制数的组合来定义128个字符必须记住的编码!!!:0的编码48,A的编码65,a的编码97,换行的编码10,回车的编码13,空格的编码48字符常量中'单引号为字符的定界符,"双引号为字符串的定界符输出字符常量是由输出格式符决定的,比如:printf(“%d或者%c \n”),%d输出的AS

2022-02-20 12:52:04 694

原创 C语言的常量1

用#define定义宏常量,定义一个识标符,主要作用跟#include不同,define是替换,是临时的,预编译后就不存在了,当文件.c预编译成为.i文件时,预编译文件里面的define的值全部替换掉且定义的#define消失,定义的值不要加;加了后就也会替换到函数中去,也就是说宏常量的作用就是在预编译时替换const用来定义常变量,如果在全局变量中定义加上const后只能读取全局变量的值,不能对它赋值改变它全局定义const常变量时,如果不初始化,则默认值为0C语言中const定义全局常变

2022-02-17 22:25:45 412

原创 C语言输出和输入函数

printf函数为输出函数,f表示format功能是按用户指定的格式把指定的数据显示到显示器屏幕上比如:printf(“格式控制字符串”,输出表列);格式控制字符串是以%开头的,%后跟各种字符,说明输出的类型、长度、形式、小数位数等比如:“%d”:表示按十进制整型输出“%o”:表示按八进制整型输出“%x”:表示按十六进制整型输出“%ld”:表示按十进制长整型输出“%c”:表示按字符型输出“%f”:表示按浮点数输出非格式字符串输出时原样打印出来scanf函数为输入函数,

2022-02-16 23:24:47 548 2

原创 C语言标识符规则

标识符必须为下划线_ 英文字母(A-Z a-z)数字(0-9)组成命名时首字符必须是字母或者下划线!!不能定义数据类型关键字,比如:int int;char int 等等命名时尽量看见了就大概知道定义的是什么,比如:age;sexy等等标识符长度C89为8字符,而 C99没有长度限制严格区分字母大小写,比如:int A和int a 这是两个不同的变量变量是用标识符为名字,可以进行改变,可取值,可赋值常量是只读不能被改变定义变量:数据类型+空格+变量名(标识符)+分号 每一句都

2022-02-16 15:31:34 3783

原创 C语言的数据类型

整型数据类型char:字符型 1字节short:短整型 2字节int:整型 4字节long int:长整型 4字节long long:长长整型浮点型:带小数点float:单精度浮点型 4字节double:双精度浮点型 8字节long double:多精度浮点型 8字节波尔型:只有两个值bool:0 false假,1 true真 1字节 引入头文件#includ<stdbool.h> 才能使用bool类型void:空类型,无类型sizeof:

2022-02-16 13:44:11 311

原创 C语言编译链接过程

.c/cpp:源文件.i:预编译文件.h:头文件.s:汇编文件.o/.obj:二进制目标文件.exe:可执行文件

2022-02-15 14:40:20 154

空空如也

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

TA关注的人

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