- 博客(41)
- 收藏
- 关注
原创 vim插件ctags
ctags(Generate tag files for source code)是一个用来生成代码标签文件的工具。它可以为多种编程语言的源代码生成标签文件,这些标签文件包含了源代码中的各种元素的信息,如函数名、变量名、类名等。Vim 可以利用这些标签文件实现快速跳转到定义、查找引用等功能。linux中默认安装了ctags,使用命令可以查看版本。
2024-10-09 21:30:14
931
原创 epoll机制处理TCP多客户端连接
它常用于TCP/IP套接字通信中,将数据从客户端发送到服务器或从服务器发送到客户端。:允许多个套接字绑定到相同的端口。函数用于从套接字接收数据,是网络编程中一个重要的系统调用。是一种高效的 I/O 事件通知机制,适用于处理大量并发连接的网络应用。机制的核心部分,它会阻塞程序直到一个或多个事件发生,或者直到超时。是一个用于设置套接字选项的系统调用函数,配置套接字的各种行为和特性。:指向要设置的选项值的指针。将服务器的IP地址和端口绑定到创建的套接字上。:套接字文件描述符,即你要配置的套接字。
2024-09-03 21:15:23
1239
原创 pthread线程
线程是轻量级进程,一般是一个进程中的多个任务。进程是系统中最小的资源分配单位是操作系统中资源分配的最小单位。每个进程都有自己的地址空间,并且拥有独立的资源(如内存、文件句柄等)进程之间通常是相互独立的,彼此不能直接访问对方的内存空间线程是系统中最小的执行单位是操作系统中程序执行的最小单位,也称为“轻量级进程”。一个进程可以包含一个或多个线程,这些线程共享该进程的资源(如内存和文件句柄),但每个线程有自己的栈、寄存器和程序计数器进程是资源分配的基本单元,而线程是调度和执行的基本单元。
2024-08-22 10:20:35
1256
原创 Linux中的exec族函数
exec系列函数用于替换当前进程的用户空间代码和数据,从而执行一个新的程序。调用exec系列函数不会创建新的进程,但会用新程序的代码和数据替换当前进程,因此调用exec后,进程的 ID 保持不变,但进程的行为变为执行新的程序exec功能:使用指定的路径名执行新程序,参数一个一个列出,最后一个参数必须为NULL以标记结束。功能:使用指定的路径名执行新程序,参数以数组的形式传递。功能:与execl类似,但可以传递环境变量数组envp。功能:与execv类似,但可以传递环境变量数组envp。execve。
2024-08-20 21:37:55
909
原创 进程相关命令和函数
查看进程相关信息1.就绪态、运行态 R2.睡眠态、等待态可唤醒等待态 S不可唤醒等待态 D3.停止态 T4.僵尸态 Z5.结束态。
2024-08-20 21:06:32
1020
原创 进程相关知识
静态 vs 动态:程序是静态的,它是代码和数据的集合,存储在磁盘上;而进程是动态的,它是程序在运行时的一个实例,具有自己的执行环境和状态。执行状态:程序本身并没有执行状态,它只是指令和数据;而进程包含了执行状态,比如当前的程序计数器(指示当前执行到的指令)、栈指针、内存地址空间等。唯一性:同一个程序可以被多次加载并运行,生成多个进程,每个进程都有自己的 PID 和独立的执行环境。1)程序是永存,进程是暂时的2)进程有程序状态的变化,程序没有3)进程可以并发,程序无并发。
2024-08-19 21:40:50
1017
原创 进程部分相关概念
进程控制块是操作系统用来描述和管理进程的一个数据结构。它包含了与进程相关的所有信息,包括进程ID、进程状态、程序计数器、内存管理信息、文件描述符等。PCB是操作系统管理进程的核心部分。因为CPU资源是有限的,多个进程需要轮流使用CPU,因此操作系统会频繁地切换进程。中包含了与进程相关的各种信息,包括进程状态、优先级、CPU时间、内存管理信息等。:进程不仅仅是代码,它还包含了程序的执行状态,如程序计数器、寄存器内容等。进程不仅仅是一个正在运行的程序,它包含了程序执行所需的所有资源和状态信息。
2024-08-19 20:45:16
1266
原创 文件操作:文件复制
fgetc/fputc/fgets/fputs/fread/fwrite/read/writefopen/fclose/open/close
2024-08-18 15:53:07
549
原创 文件其他相关函数
链接文件:软链接文件、符号链接文件硬链接文件命令行:ln -s 123 softlink 快捷方式创建一个链接向oldpath文件的新符号链接文件oldpath:被链接向的文件的路径newpath:新符号链接文件成功返回0失败返回-1。
2024-08-17 21:50:38
539
原创 标准io②
文件读写操作相关fgetc/fputc——一个字符,fgets/fputs——一次一行fread/fwrite——自定义大小,二进制。
2024-08-13 21:54:34
736
原创 文件io:Fileio
操作系统为了方便用户使用系统功能而对外提供的一组系统函数。称之为系统调用其中有个文件IO一般都是对设备文件操作,当然也可以对普通文件进行操作。
2024-08-13 21:37:37
960
原创 标准io以及文件
头文件 stdio.hI输入 O输出I: 键盘是标准输入设备 ——默认输入就是指键盘 /dev/inputO: 显示器是标准输出设备——默认输出就是指显示器Linux操作系统当中IO都是对文件的操作C一部分,任何支持标准C的系统都可使用标准IO实现文件存储标准IO在UNIX上是对文件IO的封装一般都是对普通文件操作是一种有缓存的IO 在文件IO和用户程序之间,加入缓冲区,可以有效减少系统调用的效率,节省系统IO调度资源。
2024-08-12 21:53:58
1359
原创 枚举类型enum、typede、位运算
创建别名的方式,特别适用于定义结构体、联合体以及指针类型,使代码更简洁、更易读。是指将变量的值一一列举出来,变量的值只限于列举出来的值的范围。如果有给定的值,则后续没有给值的枚举成员值依次+1。都提高了可读性,枚举更能说明有相关性的一些值的关系。:逻辑右移时,不保留符号位的特性,最高位始终补。如果是有符号类型的数据右移时,最高位补符号位。左移1位相当于乘2,n位就是乘2的n次方。左移1位相当于除2,n位就是除2的n次方。如果是无符号类型的数据右移时,最高位补0。a<<n表示将a这个数据左移n位。
2024-08-10 20:49:55
1261
原创 结构体structure、共用体union
结构体类型——用来描述复杂数据的一种数据类型构造类型(用户自定义类型)struct 结构体类型名成员列表;:表明是在构造一个结构体的类型:用来描述结构体这个类型的一个名称:表示要描述的复杂数据中用到的具体的成员变量定义的方式与之前变量的方式相同多个成员变量之间用分号隔开有数据类型,可以:定义变量、指针变量、数组结构体使用方法自己构造出这个结构体类型有了类型——定义变量、数组、指针结构体类型的指针——做函数形参、做函数返回值先定义出类型定义变量struct 结构体名 变量名;
2024-08-09 22:12:36
1388
1
原创 C语言指针②
32位体系系统中,指针变量的大小是4个字节64位体系系统中,指针变量的大小是8个字节解引用:运算符给出指针指向地址上储存的值。假设一个指针p,它存储了一个内存地址。通过解引用这个指针,可以访问或修改这个内存地址处的值。
2024-08-08 19:34:42
1179
1
原创 一维整型数组的指针操作①
这里以升序为例——选择排序的工作原理是反复地找到未排序部分中的最小值,并将其与未排序部分的第一个元素交换,直到整个数组有序(找到当前位置的最小值,并将其放到适当的位置)外层循环的目的是逐步缩小未排序的范围,因为在每一轮内层循环结束时,当前范围内最大的元素会被移动到正确的位置。将指针b所指向的值赋给指针a所指向的位置,此时a所指的变量被赋予了b所指向的值。t的值赋给指针b所指向的位置,此时b所指向的变量被赋予最初a所指向的值。如果*p>*q说明p指向的元素大于q指向的元素,需要交换位置。
2024-08-06 21:20:54
591
原创 快速排序算法
当begin和end相遇时,将基准值与当前位置的元素交换。将基准位置上值与此时begin/end所谓位置的元素交换。使用begin指针 从左向右寻找到第一个比基准值大的数。使用end指针 从右向左寻找到第一个比基准值小的数。基准值 ——数组首元素a[0] ——基准值位置。直到begin/end相遇,此时结束。继续对左一半和右一半进行快速排序。继续重复2-4的过程。
2024-08-06 19:22:43
226
原创 C语言指针①
基类型 *指针变量名;基类型(数据类型)整型、浮点型、字符型、数据结构、指针类型、结构体类型、函数类型...表示该指针类型所指向的内存空间存放什么类型的数据定义时表示此时定义的是一个指针类型的变量指针变量名符合标识符命名规则数据类型 变量名;int *p;//pointerp是一个指向int类型数据的指针int a= 10;//a所在的空间是用来存放 int (整型)类型的数据的float b=10;// 声明一个浮点型变量b,并初始化为10.0。
2024-08-05 21:40:51
513
1
原创 gcc预处理
define 标识符 字符串#define 宏名 宏值预处理命令都是以#开头的宏名的命名规则与之前的标识符命名规则一致宏名一般都写大写,以便与普通变量区别预处理实际上是将宏名用宏值(预处理阶段的字符串)原样替换C语言字符串中出现的“宏名”不会被替换应用1.提高代码可读性2.一改全改(方便代码修改)宏名的作用域只是在预处理阶段发挥作用作用范围:从定义处开始到#undef结束#undef 宏名——表示取消宏名的定义含义:表示将来代码出现的N都代表10。
2024-08-05 17:22:42
1038
1
原创 插入排序算法
it = a[i];tj = i;jjwhilejt。这种方法称为插入排序,因为它在每次迭代时都将当前元素插入到前面已排序的子数组中的适当位置。插入排序的平均和最坏时间复杂度为 O(n^2),但对于小数组或几乎有序的数组,它是非常高效的。
2024-08-03 09:48:39
920
原创 函数function2、栈
getMonthdays(getMonthdays中可以继续调用别的函数,此时getMonthdays成为调用者,说明调用关系是相对的)实参的传递:在调用函数时,传递数组名(代表数组的首元素地址)和数组的长度。数组名代表数组的首元素的地址。void printArray(int a[],int len)——(定义)形参:写成数组形式,需要数组长度。函数调用的本质:实际上是利用栈的层次结构——先进后出——保证函数可以层层嵌套调用。数组可以作为函数参数传递,但在函数定义中,数组的大小不是必须指定的。
2024-08-02 18:56:19
1063
1
原创 冒泡排序算法
思想:一次冒出一个数,相邻的两个元素,两两比较冒泡排序(Bubble Sort)是一种简单的排序算法,它通过重复比较和交换相邻元素的方式来排序一个列表。
2024-08-02 13:47:58
1123
原创 选择排序算法
到达最后一轮时,倒数第二个位置将自动成为最大的元素,所以最后一个位置的元素已经是有序的,不再需要进行比较和交换。是为了保证每一轮排序中都能找到一个未排序部分的最小值并将其放在正确的位置,避免对最后一个元素进行多余的比较和交换。通过这样的设计,选择排序确保每一轮都能找到当前未排序部分中的最小值,并将其放到正确的位置。在最后一轮中,只剩下两个元素,倒数第二个元素与最后一个元素进行比较,确定了它们的位置。,即内层循环会遍历到数组的最后一个元素,确保比较到每一个未排序的元素。开始,这是因为在选择排序的第。
2024-08-01 22:00:14
653
1
原创 函数function
表示把功能实现出来类型标识符 函数名(形式参数)函数体代码main函数之前main函数之后函数的定义顺序并不影响程序的正确性,但如果在调用一个函数之前没有声明(即提供函数的原型),会导致编译错误或警告。如果在main函数之后定义一个函数,需要在main函数之前声明该函数,以便在main函数中调用它时不会出现编译错误。函数声明格式:返回类型 函数名(参数类型 参数名, ...);函数定义在main函数中在linux系统中可以使用(这是gun拓展的功能),但是标准C语言不支持。
2024-08-01 17:55:28
1069
原创 字符串操作、二维数组
二维数组:类型说明符 数组名[常量表达式][常量表达式](1) 类型说明符 ——用来说明数组中存储数据的类型(2) 数组名 ——标识符(3) 常量表达式 —— 行 :多少行(4) 常量表达式——列 :多少列eg:表示定义了一个包含有3行 4列 总共12个 int型元素的二维数组。
2024-07-31 22:11:46
1095
1
原创 一维字符数组
数据类型 数组名[数组长度];//一维字符型数组从数组角度数组 用来 存储数据的一维字符型数组 --- 放字符串"hello" //字符串字符串的角度1.字符串 是 当做字符数组来处理的。2.字符串 有一个专门的结束标志 '\0'3.处理的是字符串,操作的时候,往往以 结束标志 为 操作依据4.处理的是数组,操作的时候,往往以 数组长度 作为操作依据5.字符数组可以用来存储字符串 ,而字符串在内存中存储的方式 也是以 字符数组形式存储。
2024-07-30 22:19:01
344
原创 从终端输入一个n 将数组右移n位
从终端输入一个n 将数组int a[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9} 完成如下变化,并打印,循环右移 8, 9,1, 2, 3, 4, 5, 6, 7。从数组最后一个位置开始,向前遍历到第二个位置。外层循环for(i=0;这个循环控制数组右移的次数,总共执行n次。内层循环for(j=8;将保存的最后一个元素放到数组的第一个位置。这样右移时不会丢失最后一个元素。每次循环内,数组右移一位。
2024-07-29 21:30:03
199
原创 循环、数组①
c语言的循环语句goto、while、do-while、for、break、continue、一维数组的定义方式、数组给值、数组元素的引用
2024-07-29 20:34:35
751
1
原创 变量命名、输入输出
驼峰命名法、内核命名法、C语言输入输出函数、getchar、putchar、printf、scanf、格式控制字符、占位符、辅助控制符、函数库连接undefined reference to 'sqrt'......
2024-07-26 20:44:39
1052
1
原创 转义字符、算术运算、类型转换...
精度丢失:当将高精度类型的数据赋值给低精度类型时,由于低精度类型无法存储高精度类型的全部信息,可能会导致数值精度的丢失。例如,将double类型的数据赋值给float类型时,可能会丢失一些小数部分的精度。
2024-07-25 20:57:07
981
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人