自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 双向链表--

内存泄漏:当while(1)一直运行时,操作系统一直被申请空间,最终无空间可申请,造成内存泄漏。所以可以在堆区手动申请空间,在用完后手动释放。双向链表的节点与链表对象。

2024-09-04 21:26:53 228

原创 数据库学习

tables 查看数据库中的表.headers on/off 开启或者关闭表头.mode column 列对齐.width 列宽1 列宽2 设置每一列的列。

2024-08-29 21:42:59 613

原创 IO多路复用

IO多路复用---①select:1. 创建文件描述符集合 fd_set2. 添加文件描述符到集合中 void FD_SET(int fd, fd_set *set);3. 通知内核开始监测 select4. 根据返回的结果做对应的操作(对io读、写操作)功能:监测多路IO参数:nfds : 关注的文件描述符中的最大值+1readfds:关注的读事件的文件描述符集writefds:关注的写事件的文件描述符集合exceptfds:其他 异常。

2024-08-28 20:42:47 657

原创 TCP报文段首部格式及粘包问题

TCP虽然是面向字节流的,但TCP传送的数据单元却是报文段。一个TCP报文段分为首部和数据两部分,而TCP的全部功能都体现在它首部中各字段的作用。首部固定部分各字段的意义如下:(1)源端口和目的端口各占2个字节,分别写入源端口号和目的端口号。(2)序号占4字节。序号范围是[0,2^32-1],共2^32个序号。序号增加到2^32-1后,下一个序号就又回到0。例如,一报文段的序号字段值是301,而携带的数据共有100字节。

2024-08-23 20:48:01 386

原创 网络通信tcp

参数:sockfd 本地socket创建的套接子id。addr 远程目标主机的地址信息。功能:该函数固定有客户端使用,表示从当前主机向目标。addrlen: 参数2的长度。

2024-08-22 21:38:02 340

原创 IPC通信与网络通信

分类:A类(0.x.x.x~127.x.x.x),B类(128.x.x.x~192.x.x.x),C类(192.x.x.x~223.x.x.x),D类(组播地址),E类(保留)TCP/UDP:TCP协议<高可靠>特点——①面向连接 ②可靠传输(tcp协议机制里面的功能)。注:(1)主机号为0的IP地址是网络地址,主机号为255的地址是广播地址。编程模型:①c/s(client server)——客户端-服务器模型;组成:网络号(表示所处的网络) + 主机号(表示能容纳的主机)

2024-08-21 20:26:05 1490

原创 信号量与进程间通信方式

可以读管道,但是管道中如果没有数据了,此时读操作阻塞。2.管道操作特点 :数据读走之后,认为就没了。管道如果为空,此时可以一直写,直到写满。@pipefd //用来获取管道的两端。如果没有数据,读操作不阻塞,立即返回!如果管道中有数据,则读取这些数据!失败 -1 && errno。此时,写操作,会导致管道破裂。1.写端存在,读端也存在。2.写端存在,读端不存在。4.写端不存在,读管道。3.写端存在,读管道。

2024-08-16 19:55:55 259

原创 【无标题】

存在进程资源循环等待链;链中每个进程都已获得资源,同时被下一个进程所请求。: 已有一个资源,请求新的资源,但新资源被其他进程占有;定义互斥锁:pthread_mutex_t mutex;例如tryclock加锁时,不成功时就会返回。:不会被其他进程强行夺走,只能主动释放;进程间通信 (管道,信号,共享内存)进程 资源分配和任务调度基本单位。互斥锁类型 互斥锁变量 内核对象。破环任意一个必要条件。线程 CPU执行的最小单位。1.线程 vs 进程。共享了进程的数据空间。进程间共享数据不方便。

2024-08-15 21:13:29 191

原创 【无标题】

一、线程的定义组成及与进程的区别联系线程是轻量级的进程,创建和调度时空开销都比进程小线程的组成:线程ID(tid)、程序计数器、寄存器集合、栈线程与进程的区别:(1)线程成为CPU执行的最小单元,线程与同一进程的其他线程共享代码、数据段、其他操作系统资源。(2)进程成为资源分配的基本单位。线程与进程的关系:(1)线程存在于进程中;(2)线程共享了进程的资源;(3)线程结束进程不一定结束。

2024-08-14 19:48:50 283

原创 【无标题】

用法: execle(const char *path, const char *arg, ..., (char *) NULL, char *const envp[]);用法: execl(const char *path, const char *arg, ..., (char *) NULL);法: execlp(const char *file, const char *arg, ..., (char *) NULL);exit() 会执行io库的清理工作,关闭所有的流,以及所有打开的文件。

2024-08-13 20:57:14 269

原创 系统编程(进程)

进程=pcb(进程控制块)➕进程实体(text|data|bss|堆|栈)成功:在父进程中,返回子进程的PID号,在子进程中,返回0。n次fork后生成2^n -1个子进程,一共有2^n个进程。kill -9 pid号 —— 给指定的PID发9号信息;功能:创建一个子进程,通过复制调用进程(父进程)。失败——父进程返回-1,并且子进程未被创建。kill -19 pid号 —— 暂停进程;kill -18 pid号 —— 继续进程;主要查看父子进程,包含pid、ppid。

2024-08-12 19:42:15 341

原创 linux系统文件与目录

创建一个链接向oldpath文件的新符号链接文件。oldpath:被链接向的文件的路径。成功返回保存日历时间结构体的指针。timep:保存时 间空间的地址。pathname:删除文件的路径。成功返回1970年到现在的秒数。timep:保存秒数空间的地址。成功返回获得时间字符串的首地址。newpath:新符号链接文件。将一个老的路径名改为新的路径。获得1970年到现在的秒数。t:存放秒数的空间首地址。将一个秒数转化成日历时间。oldpath:老路径名。newpath:新路径名。将时间秒数转化成字符串。

2024-08-08 20:29:38 328

原创 【无标题】文件描述符和流指针转换、目录操作

参数:opendir的返回结果中目录流对象。从目录流中读取文件信息并将保存信息的结构体。功能:关闭之前已经打开的目录流对象。成功返回包含路径空间的字符串首地址。获得一个文件流指针中的文件描述符。buf:保存工作路径空间的首地址。pathname:目录文件的名字。打开一个目录获得一个目录流指针。将文件描述符转化为文件流指针。size:保存路径空间的长度。fd:已经打开的文件描述符。改变当前程序的工作路径。path:改变到的路径。pathname:路径。dirp:目录流指针。包含文件信息的结构体。

2024-08-07 20:53:47 411

原创 标准IO与文件IO

offset 要在文件内偏移的距离,单位字节。如果值为整数,则向文件末尾偏移,如果值为负数,则向文件开头偏移。如果从文件的指定位置向后偏移过程中已经超过了文件的当前末尾位置,则会自动以'\0'来填充文件内容,从而形成一种被称为"空洞文件" 的特殊文件。功能:将stream流文件中的文件指针从whence位置开始 偏移offset字节的长度。特性:没有缓存区 操作对象不在是流,而是文件描述符 文件描述符。whence 偏移的起始位置,由系统定义的三个宏开始。SEEK_SET 文件的开头位置。

2024-08-06 20:36:11 1396

原创 文件io操作的学习

eg : ====》stdio.h ===>stdio.c==>libc.so ==>/usr/lib so 动态库。I: 键盘是标准输入设备 ====》默认输入就是指键盘 /dev/input。man xxx == man 1 xxx ===>查看当前xxx命令。man 2 xxx ===>查看xxx对应的系统调用函数。man 3 xxx ===》查看xxx对应的标准库函数。fgets/fputs....,,一次一行。fgetc/fputc,,,,,,一个字符,(1)打开文件(fopen)

2024-08-05 19:07:23 266

原创 shell脚本编写

shell:1.解释型语言 2.边翻译边执行3.擅长文件处理,操作系统管理4.开发效率高5.执行效率低 6.移植性好。.c: 1.编译型语言 2.先编译再执行 3.擅长数据计算和数据处理 4.开发效率低5.执行效率高 6.移植性差。'':打印字符串,遇到$变量依然打印$变量。"":打印字符串,遇到$变量则打印变量中的值。一、shell编程与c语言编程的区别。``:将中间的字符串按照命令打印。

2024-08-03 18:50:18 226

原创 【无标题】

typedef int INT(从此以后INT不再是变量名而是类型名)。与(&),或(|),非(~),异或(^),左移(<<)和右移(>>)位运算符 就是按二进制位进行运算。typedef 定义类型。{成员表列}变量表列;union 共用体名。

2024-08-02 20:03:29 116

原创 结构体和链表的学习

链表中各元素在内存中可以不是连续存放的,要找到某一元素,必须先找到上一个元素,根据它提供的下一元素地址才能找到下一元素。4、用预处理命令#pragma pack(n) 可以强制编译器按照指定的n来对齐,合法的n的数值分别是1、2、4、8、16。2、结构体成员按照结构体成员声明先后次序依次存放,并且每个成员的首字节放置的位置必须能够整除成员的字节数;3、如果结构体某个成员的字节数大于CPU的字节数,则最长按照CPU的字节数对齐;变量的初始化:struct 类型名 变量 = {...,...,...};

2024-08-01 19:08:26 307

原创 数组指针与指针数组的学习

指向int型参数、返回值为int型的函数。函数的函数名是函数的入口地址。int *p[10]为指针数组,为10个野指,sizeof(p)=80。int (*p)[10]为一个数组指针,sizeof(p)=8。运行结果为30,需要传i的地址才能改变i的值。1.数组指针与指针数组。

2024-07-31 19:43:37 303

原创 【无标题】

void *p为万能指针,可以接收任何类型的指针但 不能进行运算。指针函数不能返回局部变量地址,因为其为动态生 存期。指针前可加const修饰,表示无法通过该指针修改。指针变量所指向的变量,即const int *p;

2024-07-30 19:59:11 365

原创 指针的学习与应用

(pointer_3 是指向float型变量的指针变量)char * pointer_4;(pointer_4是指向字符型变量的指针变量)定义指针变量的一般形式为基类型*指针变量名;(3)将偏移好的那部分内存空间当作是一个基类型变量来看。函数调用时,一般为值传递,所以不能直接访问;(2)从定位处开始向后偏移sizeof(基类型);不能单独使用,否则p无指向,为。(1)通过指针变量中的值到内存空间中定位;,来取地址进行间接访问。

2024-07-29 18:23:25 381

原创 标识符的作用域及预处理命令的学习

双引号表示在现在的main.c所在的目录下找,尖括号包起来表在/usr/include/目录下找。全局变量便在全局作用域,指定义在函数之外的变量,全局变量可以为本文件之外的其他函数所共用。它的有效范围为从定义变量的位置开始到本源文件结束。注意:宏与函数的区别:宏在程序中直接展开,效率高;(4)在两个或两个具有包含关系的不同作用域中定义的同名标识符,外层标识符在内层不可见。(3)在没有包含关系的作用域中,定义的同名标识符互不影响。通俗来讲,在花括号内的均为局部作用域。auto自动变量,变量i的空间自动存储。

2024-07-28 12:14:37 439

原创 【无标题】

数组在传参时,传递的是数组的首元素地址,无法在函数中得知数组有多少个元素;因此在封装函数时在形参处不仅要传首元素地址,也要传元素个数。数组传递的是地址,因此数组可以通过形参修改实参的值;即传参中,可在被调函数中修改主调函数。字符型数组在形参传参时,不需要传递元素个数,它是通过‘\0’作为结束语句来判断。形参既要传首元素地址,又要传行数。2.字符型数组的传参。

2024-07-26 20:40:45 374

原创 函数封装和嵌套

递归调用在解决某些问题时可以使代码更简洁和直观,但需要注意的是,如果递归深度过大,可能会导致栈溢出错误。同时,对于一些可以用迭代(循环)方式更高效解决的问题,应尽量避免使用递归,以提高程序的性能。静态区(全局区):通常是用于那些在编译期间就能确定存储大小的变量的存储区,但它用于的是在整个程序运行期间都可见的全局变量和静态变量。函数的嵌套调用指的是在一个函数的执行过程中,调用另一个函数。被调用的函数执行完毕后,将结果返回给调用它的函数,然后继续执行调用函数中后续的代码。const修饰的全局变量存放在常量区。

2024-07-25 19:36:33 135

原创 二维数组和函数的学习

C语言对二维数组采用这样的定义方式,使得二维数组可被看作是一种特殊的一维数组:它的元素又是一个一维数组。例如,可以把a看作是一个一维数组,它有3个元素: a[0]、a[1]、a[2],每个元素又是一个包含4个元素的一维数组。定义a为3X4(3行4列)的数组,b为5X10(5行10列)的数组。(4)如果对全部元素都赋初值(即提供全部初始数据),则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。这种赋初值方法比较直观,把第1个花括号内的数据给第1行的元素,第2个花括号内的数据赋给第2行的元素……

2024-07-24 20:25:25 195

原创 字符数组的学习

其中包含’H’,‘e',’l',’l',‘o',‘\0’。之后的空间默认为0。(1)scanf("%s",s)输入字符串。(1)printf("%s",数组名)。(3)fgets(数组名)。(2)gets(数组名)。(2)puts(数组名)。5.数组的复制,连接,比较。(1)结束标志‘\0’。

2024-07-23 19:06:57 190

原创 数组的相关学习

(2)在定义数组时,需要指定数组中元素的个数,方括号中的常量表达式用来表示元素的个数,即数组长度。例如,指定a[10],表示a数组有10个元素。也就是说,C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。定义a数组有10个元素,但花括号内只提供5个初值,这表示只给前面5个元素赋初值,后5个元素值为0。它表示定义了一个整型数组,数组名为a,此数组有10个元素。

2024-07-22 21:05:43 111

原创 循环结构的学习

(1)break:可以从循环体内跳出循环体,提前结束循环,在循环嵌套语句中break语句的作用通过在花括号的位置来判断。(2)continue:会终止当前循环,进入到下次循环。表达式2: 对2求值比较(逻辑或关系表达式)为真则继续执行表达式3。格式:while(表达式)(逻辑或关系表达式)语句(循环体)表达式1:对表达式1只做一次求值(初始化)While()格式后面不能加分号‘;表达式3:使循环趋于结束的条件。(3)设置循环趋于结束的语句。(1)设置循环变量初始化。(2)设置循环的循环条件。

2024-07-21 14:45:24 340

原创 选择结构的学习

1.因为int 类型里面排列有2^32种,所以非0(不管正负) 即为真,3.在c 语言尽量不要写连续比较的形式(可能会与我们预想的结果有偏差)。关系运算符,含有关系运算符的表达式,叫做关系运算,结果是逻辑结果。if 语句后面不能加上分号,最好加上花括号,在花括号里面写入代码。||逻辑或 (一真为真,全假为假)逻辑非 (真真假假,孰能辨之)&&逻辑与 (全真为真,一假为假)2.只要是关系表达式,最终都是int 型。if(表达式(关系表达式))语句。

2024-07-19 20:40:36 164

原创 C语言函数的学习

14.%g :根据数值的大小,自动选择 %f 或 %e 格式输出,使输出更简洁。从计算机向外部输出设备(如显示器、打印机等)输出数据称为输出,从输入设备(如键盘、鼠标、扫描仪等)向计算机输入数据称为输入。有时用来作流程的转向点(流程从程序其他地方转到此语句处),也可用来作为循环语句中的循环体(循环体是空语句,表示循环体什么也不做)。(2)C语言本身不提供输入输出语句,输入和输出操作是由C函数库中的函数来实现的。表达式语句由一个表达式加一个分号构成,最典型的是,由赋值表达式构成一个赋值语句。

2024-07-18 19:15:42 1503

原创 【无标题】

这种强制只是临时的,会开辟一个临时变量区,最后会消除掉,因此 (int) i = 100是错误的。左值在locatable 能够在内存中定位的,都是左值。右值readable 不能够在内存中定位的,都是右值。如果对几个变量赋予同一个初始值,int a=3,b=3,c=3;不能写成:int a=b=c=3;左值可以改变,右值不能发生改变,临时变量是一个右值,不能拿来被赋值,以及不能拿来进行自增改变。如:int a,b,c=5,只有c的初始值为5。i % j 求余运算的符号,与左操作数有关,与右操作数无关。

2024-07-17 18:47:27 153

原创 C语言数据类型

除了以上形式的字符常量外,C还允许用一种特殊形式的字符常量,就是以一个字符“\”开头的字符序列。这是一种“控制字符”,在屏幕上是不能显示的,在程序中也无法用一个一般形式的字符表示,只能采用特殊形式来表示。(1)十进制小数形式。浮点型变量分为单精度(float型)、双精度(double型)和长双精度(long double型)3类。(2)短整型,以short int表示,或以short 表示。上面的方括号表示其中的内容是可选的,既可以有,也可以没有。(3)长整型,以longint表示,或以long表示。

2024-07-16 18:14:59 266

原创 Linux常用命令及C语言基础知识

C语言中数据类型分为基本类型,构造类型,指针类型,空类型。其中,基本类型包括整型,字符型,浮点型和枚举类型。终端放大的快捷键 ctrl + shift ++打印当前所在工作目录 pwd。今天,学习了Linux的一些常见命令。终端缩小的快捷键 ctrl + ➖。展示某个文件下方信息 ls。创建文件夹 mkdir。创建文件 touch。运行 ./a.out。

2024-07-15 18:40:42 139

空空如也

空空如也

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

TA关注的人

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