自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 SQLite3 数据库

语句时,每查找到一条数据,则调用一次回调。功能是打开数据库,如果不存在,则创建。删除满足条件的一行数据。语句向表中插入数据,语法为。功能是执行 SQL 语句。.schema 表名。

2024-08-29 21:16:12 3233

原创 Linux系统IO模型

2024-08-28 20:29:07 320

原创 Linux网络

创建内核事件表,不受到文件描述符上限限制(红黑树),时间复杂度 O (logn)只能工作在水平触发模式(低速模式)无法工作在边沿触发模式(高速模式)只能工作在水平触发模式(低速模式)无法工作在边沿触发模式(高速模式)监听文件描述符最大个数为 1024(数组),时间复杂度 O (n)监听的文件描述符集合在用户层,需要应用层和内核层互相传递数据。监测文件描述符不受上限限制(链表),时间复杂度 O (n)监听的文件描述符集合在用户层,需要内核层向用户层传递数据。既能工作在水平触发模式,也能工作在边沿触发模式。

2024-08-27 21:18:13 284

原创 网络通信编程UDP/TCP

客户端向服务器发送 “我要和你断开连接” 的请求,服务器回复 “好的,可以断开”,服务器再发送 “我也要断开” 的请求,客户端最后回复 “好”,完成四次挥手断开连接。:客户端向服务器发送 “我要和你建立连接” 的请求,服务器回复 “好的,可以建立连接”,客户端再回复 “好”,完成三次握手建立连接。函数:从指定的套接字接收数据,并保存发送方的地址信息。接听客户端的连接请求(这一步完成后连接就建立好了,可以收发数据)。:主要针对服务器程序,绑定的是服务器所在电脑的 IP 地址。监听客户端的连接请求,使用。

2024-08-22 19:19:56 923

原创 linux网络通信

在不同主机间进行通信是网络编程的核心问题。为实现网络通信,需要在物理层面和软件层面都建立通路。:使用通用的浏览器作为客户端。:实现直接的点对点通信。

2024-08-21 18:31:15 551

原创 Linux线程

sem_post 函数释放资源后,如果有等待该资源的线程,会直接将资源分配给相应线程;若信号量无资源(值为 0 ),线程会阻塞等待,直到有资源可用。参数:pipefd 用于获取管道的两端,pipefd [0] 为读端,pipefd [1] 为写端。操作通过 sem_wait 函数实现,其功能是申请使用资源,使资源个数减 1。操作由 sem_post 函数完成,其作用是释放资源,使资源个数加 1。返回值:成功返回 0 ,失败返回 -1。返回值:成功返回 0 ,失败返回 -1。

2024-08-16 20:15:39 334

原创 Linux线程

适用于子线程执行时间较长,主线程无需关心其状态,子线程结束后资源自动释放。使用信号量来解决线程间的顺序问题,它类似于交通信号灯,可控制线程有序访问临界资源。:适用于子线程执行任务较短,且主线程需要获取子线程的结束状态或结果。本质区别:线程是 CPU 执行的最小单位,进程是资源分配和任务调度的基本单位。概念:线程间存在共享资源,其中的临界资源访问需谨慎处理。临界区:即访问共享资源(临界资源)的那段代码。优点:共享进程的数据空间,方便共享数据。,确保线程排他性地访问临界资源。是线程执行的函数指针,

2024-08-15 19:19:42 418

原创 linux进程与线程

创建完成后,通过特定的标识或条件,可以清晰地区分父子进程的代码逻辑,从而实现不同的功能和任务分配。以一个图形处理软件为例,一个进程中可能有多个线程,分别负责图像的读取、处理和显示,即使某个处理线程结束,只要其他线程仍在运行,进程就会继续存在。但此时,主线程的结束并不意味着整个进程的结束,只有当进程内的其他线程也都结束后,进程才会终止。在一个多线程程序中,各个线程的地位是平等的,它们按照操作系统的调度策略并发执行。线程的结束并不一定会导致所属进程的结束,只有当进程内的所有线程都结束时,进程才会真正终止。

2024-08-14 18:51:05 908

原创 linux进程

子进程会继承父进程已打开的文件描述符,但父子进程对数据的修改相互独立。父子进程空间相互独立,这在保障安全的同时也带来了通信的不便,需要特定的 IPC 机制来实现进程间的有效通信。函数用于提高进程创建的效率,它会阻塞父进程,让子进程先执行,并采用写时拷贝的策略减少不必要的数据拷贝。进程的调度涉及进程上下文的切换,包括进程状态的保存和恢复,数据量较大,对切换效率有一定影响。进程是正在运行的程序的实例,包含了程序的代码、数据、堆栈等资源。函数本身是阻塞的,用于等待子进程的终止并回收其状态。

2024-08-13 21:22:10 528

原创 linux进程

设计程序动态生成两个进程分别向相同文件写入不同数据时,需注意父子进程操作同一文件,可通过。Linux 中的 PCB(process control block)进程的主要作用是实现并发,提高系统资源的利用率和系统的处理能力。内核的主要功能之一是完成进程调度,宏观上并行,微观上串行。创建进程,在不同的进程分支中通过。获取进程 ID 及时间来标识。

2024-08-12 18:15:31 661

原创 linux文件操作函数

功能:从目录流中读取文件信息并返回保存信息的结构体地址。功能:程序出错打印对应出错原因和用户输入字符串并退出。成功返回包含路径空间的字符串首地址,失败返回。功能:打开一个目录获得一个目录流指针。功能:关闭之前已经打开的目录流对象。功能:将一个老的路径名改为新的路径。成功返回目录流指针,失败返回。功能:改变当前程序的工作路径。对应用户的信息,失败返回。功能:获得当前的工作路径。功能:删除一个空目录文件。成功返回组信息,失败返回。功能:创建一个硬链接文件。六、Makefile 编写。文件的新符号链接文件。

2024-08-08 19:26:31 647

原创 linux标准IO函数

成功返回 0,失败返回 -1。需要注意的是,它不支持设备文件,一般用于普通文件。用于获取当前文件流指针的具体位置,返回值是从文件开头到当前指针的字节数,成功返回距离长度,失败返回 -1。成功返回读取到的数据个数,失败返回 -1,读到文件结尾返回 0。成功返回实际写入的个数,失败返回 -1。成功返回文件描述符,失败返回 -1。成功返回偏移量,失败返回 -1。函数执行失败时,文件指针仍在偏移前的位置。通过文件描述符向文件中写入数据,参数。,即将文件指针重置到文件开头。的追加模式,无法生成空洞文件。

2024-08-06 20:13:58 273

原创 C语言标准IO

标准 I/O 对普通文件的操作通常带有缓存,在文件 I/O 和用户程序之间加入缓冲区,能够有效减少系统调用的次数,提高效率,节省系统 I/O 调度资源。标准 I/O 由 Dennis Ritchie 于 1975 年创建,是 C 语言的标准库之一,符合 ANSI C 规范。在 Linux 中,一切皆为文件,文件用于存储数据(包括数据和指令)。标准 I/O 是 ANSI C 设计的一组用文件 I/O 封装的操作库函数,其头文件为。时刷新)、全缓冲(4K,主要用于文件读写,在缓冲区满、程序结束或使用。

2024-08-05 20:23:36 410

原创 Shell 编程

常见的 Shell 类型包括 Bash Shell、GNU、C Shell(Csh)、K Shell(Ksh)、Ash 等。将中间的字符串按照命令打印。变量会打印变量中的值;

2024-08-05 00:00:40 455

原创 C语言结构体与共用体

先定义结构体类型,再定义结构体变量。struct 结构体名 {成员列表struct 结构体名 变量名;在定义结构体类型的同时定义结构体变量。

2024-08-01 19:38:17 689

原创 C语言指针

类型名 *指针变量名;,例如int *p;定义了一个指向整型变量的指针p。注意事项:在定义指针变量时,需要注意指针变量的类型应与它所指向的变量类型一致。

2024-07-29 17:15:29 380

原创 C函数和宏

定义:一个函数一般由声明部分和执行语句组成,声明部分对有关的标识符的属性进行说明。对变量而言,建立存储空间的声明称为定义,如“int a;”既是声明,又是定义。声明:不需要建立存储空间的声明称为声明,如“extern a;”是声明而不是定义。作用:extern声明的作用是声明该变量是一个已在后面(或在其他文件中)已定义的外部变量,仅仅是为了扩展该变量的作用范围。不带参数的宏定义:用一个指定的标识符来代表一个字符串,在预编译时将程序中在该命令以后出现的所有的宏名都用指定的字符串代替。带参数的宏定义。

2024-07-27 20:50:16 585

原创 C数组作为函数参数

C语言中,数组可以作为函数的参数,包括数组元素、数组名以及多维数组名。

2024-07-26 18:24:35 313

原创 C函数的嵌套和递归调用

函数定义与调用的基本规则:示例分析:递归调用的概念与特点:示例分析:在C语言中,内存通常被划分为以下几个区域:

2024-07-25 17:45:06 404

原创 C语言二维数组及函数的定义与调用

二维数组的定义:二维数组定义的一般形式为类型说明符 数组名[常量表达式1][常量表达式2],例如,表示定义了3行4列的数组a和5行10列的数组b。可以把二维数组看作是特殊的一维数组,其元素又是一个一维数组。二维数组的引用:二维数组元素的表示形式为数组名[下标][下标],下标可以是整型常量或整型表达式。需要注意的是,在使用下标时不能超出数组定义的范围。二维数组的初始化:可以分行给二维数组赋初值,如;也可以将所有数据写在一个花括号内,按数组排列的顺序对各元素赋初值;

2024-07-24 17:49:39 832

原创 C语言字符数组

puts(字符数组)gets(字符数组)

2024-07-23 18:54:30 494

原创 C语言一维数组的定义和引用

类型说明符 数组名[常量表达式];例如: int a[10];它表示定义了一个整型数组,数组名为a,此数组有10个元素。(1)数组名的命名规则和变量名相同,遵循标识符命名规则。(2)在定义数组时,需要指定数组中元素的个数,方括号中的常量表达式用来表示元素的个数,即数组长度。(3)常量表达式中可以包括常量和符号常量,不能包含变量,也就是说,C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。

2024-07-22 18:07:53 1244

原创 c语言循环控制

while循环和for循环,可以用break语句跳出循环,用continue语句结束本次循环(break语句和continue语句见6.8节)。for循环可以在表达式3中包含使循环趋于结束的操作,甚至可以将循环体中的操作全部放到表达式3中。while循环中,只在while后面的括号内指定循环条件,因此为了使循环能正常结束,应在循环体中包含使循环趋于结束的语句(如i++,或i=i+1等)。循环的特点是先执行一次循环体,然后再判断条件表达式,如果条件表达式的值为真(非零),则继续执行循环体;

2024-07-21 21:10:53 507

原创 c语言选择程序结构设计

C语言编译系统在表示逻辑运算结果时,以数值1代表“真”,以0代表“假”,但在判断一个量是否为“真”时,以0代表“假”,以非0代表“真”。(1)a && b && c只有a为真(非0)时,才需要判别b的值,只有a和b都为真的情况下才需要判别c的值。在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。用关系运算符将两个表达式(可以是算术表达式或关系表达式、逻辑表达式、赋值表达式、字符表达式)连接起来的式子,称关系表达式。

2024-07-19 20:37:54 597

原创 C语言中数据输入输出的实现

在输入多个数值数据时,如果格式控制串中没有非格式字符作为输入数据之间的间隔,可以用空格、制表符或回车键作为间隔。但如果格式控制串中有非格式字符(如逗号)作间隔符,则输入时也要加上相应的字符。当输入字符数据时,如果格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。:这是一个抑制符,用以表示输入的数据不赋值给相应的变量,即跳过该输入值。),要确保输入的字符串长度不会超过目标字符数组的长度,以防止缓冲区溢出。如果输入的数据与输出的类型不一致,虽然编译可能通过,但结果将不正确。配合使用表示对应宽字符(

2024-07-18 18:51:10 1137

原创 C语言运算符与表达式

例如:int i = 10;变量 i 初始化。例如:int i;i = 10;给变量 i 赋初值。

2024-07-17 18:44:51 833

原创 C语言数据类型

由于计算机内部表示浮点数的方式存在限制,可能会出现舍入误差。例如,将一个小数不断进行计算和操作,可能会在最终结果中出现微小的偏差。当对整型数据进行运算时,如果结果超出了其所能表示的范围,就会发生溢出。类型的变量最大值是 32767 ,当对其进行加 1 操作时,结果可能会变成。函数输出浮点型数据时,常用的格式控制符有。函数来输出整型数据,常用的格式控制符有。类型,若要指定小数的位数,可以使用。unsigned~:表示无符号。表示要显示的小数位数。

2024-07-16 18:04:58 2061

原创 Linux常用指令

5.cd:是Linux中用于改变当前工作目录的命令。使用绝对路径,如cd /,可以直接指定要切换到的目录位置,如根目录。而使用相对路径,如cd test,则是基于当前所在目录来指定子目录或上级目录。6. touch:主要用于创建空文件或更新文件的访问时间。当使用touch命令指定一个文件名,如果该文件不存在,则会创建一个新的空文件。此外,该命令还可以用于更新已存在文件的访问时间。4.ls:是Linux中用于查看目录内容的常用命令。7.cp:拷贝文件,它还可以把多个文件一次性地复制到一个目录下。

2024-07-15 18:53:38 171 1

空空如也

空空如也

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

TA关注的人

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