自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 链表

NULL) 或 while( p -> pnext!情况1时出循环就不能操作了,出循环p就指向空了,循环内可以找到最后一个节点。情况2时出循环才能指向最后一个节点,再进行操作。

2024-09-04 21:38:32 243

原创 数据库

DELETE FROM 表名称 WHERE 列名称 = 值(与create相似)UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值。3.select 列名 from 表名称 查找该列名的数据 (若为*则查找所有数据)1.create table 表名称(列名1 类型,列名2 类型......)创建表。sqlite:嵌入式数据库,开源免费,代码量少,文件型数据库可以移动,最大2T。4.where :1.用于特定条件的数据查找 where 列/运算符/值。

2024-08-29 21:54:41 390

原创 IO多路复用·

2024-08-28 22:04:36 117

原创 并发服务器,IO

2024-08-27 22:00:18 88

原创 网络socket编程(udp、tcp)

如此理解connect三个参数是容易了,我必需指定数据发送的地址,同时也必需指定数据从哪里发送,这正好是connect的前两个参数,而第三个参数是为第二个参数服务的。(inet_ntoa)addr:发送到哪,服务端的地址,connect是主动连接的一方,要存在一个被动连接的一方需要调用listen以接受connect的连接请求,被动连接的一方就是服务器。accept:当客户端的连接请求到达后,accept函数会创建一个新的套接字,并返回一个新的套接字描述符,该描述符与客户端的套接字建立连接。

2024-08-22 22:21:37 944

原创 进程间的共享内存,socket编程

IPv6是较新的版本,由128位二进制数组成,以冒号分隔的十六进制表示,如2001:0db8:85a3:0000:0000:8a2e:0370:7334。删除共享内存:最后,当所有进程都不再需要共享内存时,创建共享内存的进程或拥有足够权限的进程可以删除共享内存段,释放资源。分离共享内存:当进程不再需要访问共享内存时,它会从自己的地址空间中分离共享内存段,这通常通过shmdt函数实现。公共地址:也称为公网地址,是分配给互联网上可访问的设备的IP地址,它们是唯一的,可以在全球范围内被识别。

2024-08-21 21:06:48 742

原创 Linux 管道通信

1. 信号量的定义 sem_t sem //造了一类资源。3. 信号量的PV操作 (核心) sem_wait()/ sem_post() ---生产者 消费者 模型。共享内存(*) //最高效 (5)信号量集() //信号量 (6)@pipefd //用来获取 管道的两端 //读端pipefd[0]表示线程间使用信号量。

2024-08-16 20:48:37 378

原创 线程互斥锁

例如,并发执行的进程P1、P2分别申请并占有了资源R1、R2,之后进程P1又紧接着申请资源R2,而进程P2又申请资源R1,两者会因为申请的资源被对方占有而阻塞,从而发生死锁。❸请求和保持条件:进程已经保持了至少-一个资源,但又提出了新的资源请求,而该资源又被其他进程占有,此时请求进程被阻塞,但又对自己已有的资源保持不放。发生死锁时- -定有循环等待,但是发生循环等待时未必死锁(循环等待是死锁的必要不充分条件)P操作之前,就有可能导致死锁。各进程对不可剥夺的资源(如打印机)的竞争可能引起死锁,对可剥夺的资。

2024-08-15 21:41:20 624

原创 文件IO

应用场景:主要用于需要立即输出的情况,如stderr(标准错误输出)通常是无缓冲的,以便及时显示错误信息。原型:off_t lseek(int fd, off_t offset, int whence);origin:起始位置的基准点(SEEK_SET、SEEK_CUR、SEEK_END)。whence:起始位置的基准点(SEEK_SET、SEEK_CUR、SEEK_END)。作用:将文件指针重新定位到文件的开头,并清除错误和文件结束标志。返回值:成功时返回新的文件偏移量,失败时返回(off_t)-1。

2024-08-06 20:08:23 315

原创 IO

功能:从stream流对象关联的文件中获取size大小字节的文本数据并存储到s对应 的本地内存(栈区数组,堆区内存)功能:从指定的stream流对象中获取nmemeb个大小为size字节的数据块到ptr所在 的本地内存中。eg : ====》stdio.h ===>stdio.c==>libc.so ==>/usr/lib so 动态库。

2024-08-05 22:00:36 619

原创 数据类型,位运算

是一个单目(元)运算符,用来对一个二进制数按位取反,即将0变1,将1变0。(5)不能把共用体变量作为函数参数,也不能使函数带回共用体变量,但可以使用指向共用体变量的指针(与结构体变量这种用法相仿)。即010=0,0|1=1,110=1,1l1=1。(2)共用体变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后原有的成员就失去作用。它们不是变量,不能对它们赋值。(2)枚举元素作为常量,它们是有值的,C语言编译按定义时的顺序使它们的值为0,(3)共用体变量的地址和它的各成员的地址都是同一地址。

2024-08-02 19:55:37 280

原创 结构体及链表

单独初始化一个变量,其他变量自动补零。黄色的节点叫做首节点来自栈。数据从缓冲区到屏幕的条件。为提高cpu读写效率。

2024-08-01 19:26:50 156

原创 数组指针,指针数组

一个指针数组作为实参传递时,形参写成指针的指针char **s也可写作char *s【】。一个指针数组作为实参传递时,形参写成指针的指针char **s也可写作char *s【】。取整个二维数组&a 基类型: int (*)【3】【4】Int*将int(*)【4】类型强转位int*型。基类型 : int(*)【10】 40字节。Char *s【】 指针数组:装指针的数组。定义了一个指向整个数组的指针叫做数组指针。Char(*s)【】 函数指针。1.定义指向函数的指针。

2024-07-31 19:58:07 113

原创 【无标题】

先设置基准数(begin),从右往左找,第一个比基准数小的数,从左往右找,第一个比基准数大的数,互换两个数,重复刚才的操作,直到p ,q 相遇,内层循环结束后,将p,q所指的元素与基准数交换。const int *p : 在指针变量前加const,修饰的是 *p(i),无法通过该指针修改它所指向的变量( i )(即只能读,不能写)分配动态内存,参数为,需要的内存空间大小的字节,申请的字节一定是连续的,返回需要空间的首字节地址(申请的空间在堆区)如果申请成功,返回空间的首字节地址,申请失败,返回一个空指针。

2024-07-30 22:17:49 222

原创 指针

间接访问,在被调函数中修改主调。偏移n * sizeof(基类型)基类型是指定义的指针变量只能装该类型的地址。指针是装地址的数据类型。指针变量p指向变量i。

2024-07-29 19:06:22 270

原创 函数和预处理命令

{}以外的,不放在任何{}里面的变量称为全局变量(例子 g_i),使用范围为从定义开始到文件结束(静态区){},局部作用域里声明的标识符(局部变量)只能作用于所在的{}里,作用域外对标识符赋值将会报错(栈区)4.在两个或两个具有包含关系的不同作用域中定义的同名标识符,外层标识符在内层不可见(就近原则)预处理阶段,会在程序段1观察宏名是否定义过,若没有定义,则为无效,执行else。即寄存器变量,将变量定义为寄存器(存储器,CPU内部)变量,提高读写速率。即自动变量,变量的空间的开辟和销毁为自动的。

2024-07-27 20:40:12 299

原创 数组传参

如果需要把数组当作参数传递时,要传递两个参数,一个数组名,一个数组元素个数。而sezeof(s)只有8字节,是因为s既是数组名又在这里代表数组元素首地址,C语言中函数传参,参数如果是一个数组时,只传了数组的地址。数组传参是指针传参,可以在被调函数中修改主调。int a【10】他的数据类型就是int 【10】占40个字节。现在定义int s【】或者int s【】【】后。因为'\0'的存在,不需要传递数组长度。需要传递rows(行数),也需要把。传参时需要传递数组长度。1、数组作为函数参数。

2024-07-26 18:10:24 172

原创 函数

pc进入函数后无法返回函数调用处,就产生了栈。函数传递都是值传递,而不是修改内存空间,形参的值是开辟另外一个与实参大小相同的 内存空间并把实参的值复制进去,修改也只是修改形参空间的值,不影响实参。主函数执行到函数时会跳转到函数中开始执行,在执行到return后,返回主函数继续执行。实质:不能在被调函数中修改主调函数的值。不允许在函数传参中对变量进行自增、自减,否则会出现错误。函数递归:函数直接或间接调用自己本身。函数传参的顺序自右向左。3、从编译器,底层逻辑看函数怎么调用的。

2024-07-25 19:22:26 377

原创 二维数组以及函数

二维数组在内存空间按照线性形式分布的,第一行一维数组装填完,紧接着下一组,其也遵循数组的三大原则:单一性、有序性、连续性。函数形参表中形参类型必须单独给出,实参与形参必须数量相同,类型匹配。函数执行到return时,会终止函数的执行并立即返回到函数调用处。调用函数时函数名后面必须有(),否则会变成函数的指针。被调函数中必须要有return,否则返回结果不确定。表示定义一个叫做a 有3行4列的二维数组。逐行逆序 应用:图像垂直、水平镜像,反转等。二维数组行数可以省略,列数不行。二维数组字符串比较大小。

2024-07-24 19:03:43 173

原创 字符串

保证目标的空间足够大,足够装下原字符串所有字节,至少为strlen + 1,防止越界访问。保证目标的空间足够大,至少为strlen(s1)+strlen(s2) + 1。即s1>s2,返回值大于0,s1=s2,等于0,s1<s2,小于0。容量(至少) = 有效字符个数 + 1(‘\0’)字符串(文本):“Hello” :字符串常量。返回值的结果可能大于0,小于0,等于0,strcpy(目标字符串,原字符串);strcat(目标字符串,原字符串);字符串结束标志 : \0(空字符)连续性: 连续的内存空间。

2024-07-23 21:31:32 252

原创 【无标题】

数组的大小就等于数组内元素数类型大小的总和(sizeof(a) = sizeof(int [10]))初始化列表(a[10] = {1,2,...})的元素大于数组个数,越界访问。数组的数组名代表数组的首元素地址(地址值常量),所以不能作为左值。a[10] 访问了数组之外的内存空间,可能修改了其他变量。有序性:下标小的元素一定在下标大的元素的(内存中)前面。连续性:数组中的所有数组地址都连续,没有空间间隔。初始化列表的元素小于数组个数时,未赋值的都为0。就是在数组合适的位置上放上合适的数。

2024-07-22 21:11:23 179

原创 循环结构的学习

先执行表达式1,只做一次,再对表达式2求值(逻辑或关系表达式),为真(1),执行循环体,再执行表达式3,直到表达式2首次为假(0)时,结束循环。do...while 先执行再判断(循环体至少执行一次)while()必跟{},紧密联系while和循环体。先判断表达式(关系或逻辑表达式),后执行语句(循环体)形式:for(表达式1;while 先判断再执行(循环体可能不执行)循环的执行条件 : if(表达式)使循环趋于结束的语句 : ++i;while()后不可加分号。形式:while(表达式)

2024-07-21 21:17:35 149

原创 选择结构程序设计

编译器判断&&前面表达式为假时,就不再判断后面表达式,叫做表达式截断。c语言中关系表达式的结果是int型,占4字节且非0即为真。switch(c)c必须为整形或与整形兼容。语句1到语句n中最后只会执行一个语句。1、关系运算符及关系表达式。2、逻辑运算符及逻辑表达式。k = 假 && 真/假。case + 常量表达数。5、switch语句。

2024-07-19 19:40:33 165

原创 输入输出。。

缓冲区(由于cpu与外设速度不匹配才需要这块内存空间,等待数据收集完毕,才通知cpu取出数据) 队列 FIFO(先进先出)g,G double类型随机转换为%e或%f,取决于那种方式更加简短。o,u,x,X 无符号整数转换为无符号八进制(o),无符号十进制(u),输出浮点数,用来输出小数。m表示总宽数(整体占的位数),包括小数点,可被省略。宽度不足默认补空格,m前加0表示默认补空格,- 表示空格补在后面。

2024-07-18 19:59:57 442

原创 数据类型、运算符与表达式

后的 i 数值只读且不能直接修改,但可通过指针修改 i 的数值,这是能取 i 的地址的,所以他是左值。编译器只做类型检查,类型正确便不会报错,导致10/0也可编译通过,但会导致程序崩溃。%的左右操作数必须是整型或者于正型相兼容,最终结果的符号只与左操作数的符号有关。纵向的箭头表示四种数据类型的级别的高低,两种不同数据类型进行计算会自动转换成高级别的数值进行计算。也可通过是否能通过&取出地址来判断左右值,左值能取出,右值不能取出。逗号运算符也叫顺序运算符,不同表达式由逗号隔开时,只会输出最后一个表达式的值。

2024-07-17 19:21:43 260

原创 数据类型:int、float、char

程序中若定义一个整型变量int a = 10,在程序运行中便会在内存空间中随即开辟一个4个字节大小的内存并以16进制、小端格式将10存放进去,这个变量名字叫做a。阶码:将数字变为二进制数,再变成科学计数法形式,记录小数点移动次数n,printf("%d",s) 功能:以%d的眼光来描述s这个内存片段。尾数:将科学计数法的小数部分直接挪下来再补齐23位。signed 有符号类型。%d 有符号十进制。通常的int属于有符号类型(包含负数)符号位:正为0,负为1。

2024-07-16 18:16:45 258

原创 LINUX基础命令指令以及C语言数据类型基础

程序定义一个数据类型后,便在RAM中随机分配一块与定义数据类型匹配大小的内存空间,用来存储程序中所赋的值。c语言中不同数据类型的定义便于电脑识别不同的运算并执行不同的操作。cp 源 目标 复制源文件到目标地址。mv 源 目标 移动源文件到目标地址。(x)yy 复制x行。(x)dd 剪切x行。常量:在程序运行中,不能被改变的值的量。变量:在程序运行中,能被改变的值的量。./a.out 运行可执行文件。rm -r 删除文件夹以及子文件。mkdir 创建新文件夹。

2024-07-15 18:34:22 211

空空如也

空空如也

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

TA关注的人

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