自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 IO的多路复用

epoll 解决了select和poll的几个性能上的缺陷:①不限制监听的描述符个数(poll也是),只受进程打开描述符总数的限制;②监听性能不随着监听描述 符数的增加而增加,是O(1)的,不再是轮询描述符来探测事件,而是由描述符主动上报事件;③使用共享内存的方式,不在用户和内核之间反复传递监听的描述 符信息;④返回参数中就是触发事件的列表,不用再遍历输入事件表查询各个事件是否被触发。epoll显著提高性能的前提是:监听大量描述符,并且每次触发事件的描述符文件非常少。在阻塞io的基础上调整为不在阻塞状态。

2023-12-24 16:07:00 400

原创 linux编程----程序调试工具

(8)p/printf--------->显示变量,指针,例:p a(变量);(6)n/next---------->下一步,步过,如果是函数,直接调用结束。(7)s/setp---------->下一步,步入,如果是函数,直接进入函数。(9)display--------->和p相似,一直显示变量的值。(4)b 170---------->在函数第170行设置断点。(1)r/run---------->代码直接运行。(11)return--------->返回调用处。3.使用相关命令对程序进行调式。

2023-12-21 18:53:24 345

原创 linux网络----TCP编程

(2)bind:绑定当前主机的IP和端口号。(3)listen:监听发送端的消息请求。(2)connect:连接接收端。(4)accept:接收消息请求。(1)socket:创建套接字。(1)socket:创建套接字。(4)close:关闭套接字。(6)close:关闭套接字。(3)send:发送数据。(5)recv:接收消息。注:listen不会阻塞。处理队列中的第一个请求。监听三次握手连接请求。

2023-12-17 15:53:22 362

原创 linux网络----UDP编程

(2)端口号只能被一个套接字绑定,多次绑定会报错会提示端口号被占用。SOCK_STREAM 流式套接字 TCP。domain: 协议族 AF_INET。SOCK_RAM 原始套接字。4.htons:将本地字节序(小端存储)转换成网络字节序(大端存储);3.inet_addr:将字符串ip地址转换为内存的ip地址的类型;type:套接字类型。5.bind:将一个套接字与IP地址和端口号进行绑定。1.socket:创建一个用来网络通信的终端节点;

2023-12-16 18:30:26 407

原创 linux---网络

子网掩码对应的二进制形式是1的部分对应ip地址的网络位。网络层: 数据的路由(跨局域网通信)私有地址:192.168.0.0 - 192.168.255.255。私有地址: 10.0.0.0 - 10.255.255.255。私有地址:172.16.0.0 - 172.31.255.255。子网掩码:区分IP地址的网络位和主机位(ip地址都会搭配子网掩码使用)应用层: 要传输的数据。是0的部位对应ip地址的主机位。

2023-12-14 22:07:19 487

原创 linux软件编程----进程间通信的方式

1.进程间通信最高效的形式,不需要实现数据的收发,只需要将两个进程映射到同一片空间,对数据存放取出即可;注:该函数的参数当中,映射的地址必须为4K的整数倍;具体类似于消息队列一样,使用ftok函数;shmget:成功返回共享内存的id号。shmctl:向共享空间发送命令;shmat:映射共享内存空间;IPC_RMID:删除命令;函数接口:semget。函数接口:semctl。函数接口:shmdt。函数接口:semop。(4)操作共享内存空间。

2023-12-11 20:26:42 334

原创 Linux软件编程----进程间相互通信

没有写满时,阻塞等待直到有数据写入读出数据继续执行;有数据直接读取数据,没有数据阻塞等待,直到写入数据,继续执行;pipe:创建一个无名管道,获得操作管道的两个文件描述符;有数据直接读取数据,没有数据不阻塞等待,继续执行;注意:SIGKILL(9)和SIGSTOP(19)不能忽略和捕捉;SIGQUIT:进程任务退出(ctrl+'\')注:proj_id:8bit并且不能为0;向管道中写入数据,管道破裂,进程退出;pipe[1]:写入管道文件描述符;pipe[0]:读管道文件描述符;

2023-12-10 17:34:38 374

原创 linux软件编程----线程

(2)pthread_mutex_trylock替换pthread_mutex_lock;(3)pthread_attr_setdetachstate:设置线程属性;(2)pthread_attr_destroy:销毁线程属性;加入属性:可以实现线程的同步,获得线程结束的状态;(2)pthread_mutex_destroy:销毁互斥锁;(1)pthread_mutex_init:互斥锁的初始化;(1)pthread_attr_init:初始化线程属性;(3)pthread_mutex_lock:上锁;

2023-12-07 19:57:10 330

原创 linux软件编程----线程

线程被创建后独享8M栈区空间,共享进程中的文本段、数据区和堆区;多进程空间独立,任务调度时cpu需要在不同的进程看空间之间切换;多线程共享同一栈区空间,同一个进程中的线程结束会影响到其他线程;多线程位于一个进程空间内部,调度任务时不需要切换进程空间;1.概念:线程是一个轻量级的进程,包括创建、调度、和回收的整个过程;多线程位于同一个进程空间,共享文本段、数据段、堆区;多进程空间独立,不会引发资源竞争,不需要考虑加锁;线程执行结束后,回收县城空间,避免产生僵尸进程;多进程空间独立,通信时需要依赖第三方;

2023-12-05 21:30:10 359

原创 linux软件编程----进程

当子进程结束后,它并不会立即从内存中消失,它的内存空间和资源信息还会在内核的进程表中保留一段时间,直到父进程显式地调用wait()或者waitpid()等函数来获取子进程的退出状态。如果我们希望在子进程结束后立即打印信息,那么就需要父进程在子进程结束时立即运行,这通常需要将父进程设置为睡眠状态,直到子进程结束后再唤醒父进程。1.让父进程先结束,子进程成为孤儿进程,此时子进程再结束,会被系统进程回收进程空间。2.进程:在程序运行过程中,包括进程的创建、进程的调度、进程的消亡;

2023-12-04 20:37:48 348

原创 linux软件编程---目录文件

b+行号(函数名)----设置断点;p+变量名----查看变量的内容;例:gcc main.c -g。s:----进入函数内部调试;l:----查看代码;r:----运行代码;n:----单步执行;2.fprintf:将多个字符串放在一个数组当中;1.sscanf:从指针里面接所需要的东西;(2).使用gdb调试软件。5.关闭文件:closedir。4.读文件:readdir。3.打开:opendir。1.创建:mkdir。2.删除:rmdir。

2023-11-30 21:37:29 389

原创 linux软件编程----文件io

需要注意的是,在进行大小端转换时,需要了解目标系统的字节序,以确保正确地进行转换。(2)程序结束刷新(fclose刷新);(1)全缓存:缓存区满,刷新缓存区(与文件建立的缓存一般为全缓存)(3)同全缓存的2,3;(2)文件io主要用来操作设备文件以及除普通文件以外的其余文件类型;(1)存满4k刷新;(2)存满1K刷新;(1)标准io是库函数,在linux和windows平台均能使用;(2)文件io是系统调用,只有在Linux内核平台中才能使用;(2)行缓存:与终端建立的缓存一般为行缓存;

2023-11-29 20:08:21 792 1

原创 linux软件编程----标准io

fread函数:size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);fwrite/fread----------------------------------------->二进制文件。scanf:接受字符串会在空格处停止,gets接受字符串不会在空格处停止,因为空格也是一种字符;向文件中写入nmemb个对象,每个对象size个字节大小,存放在ptr指向的空间中。1.ASCII码文件:文件中的内容均为能够在界面上显示的字符;

2023-11-27 19:48:13 775 1

原创 linux---软件编程

b:block----块设备文件----按块扫描文件信息----存储设备(驱动)压缩:tar -zcvf 文件名.tar.gz 文件夹/*c:character----字符设备文件----按字符扫描文件信息(驱动)d:directory----目录文件----管理文件的文件夹(基于io)l:link----软连接文件----符号链接文件(基于io)-:普通文件----保存信息的文件(基于io)s:socket----套接字文件(进程间通信)p:pipe----管道文件(进程间通信)

2023-11-24 19:11:19 786 1

原创 c语言基础---复习回顾

4.如果相邻两个格式控制符之间,不指定数据分割符(逗号,冒号等),则相应的两个输入数据之间至少用一个空格符分隔,或者用tab键分隔,或者输入一个数据后,按回车键,再输入下一个数据。当x为1时,表达式为假0;x==0:当x为0时,表达式为真1;ctrl+h:向左边分屏切换;ctrl+l:向右边分屏切换;7.memcmp:内存大小比较。3.枚举类型默认初始值为0;5.memset:内存设置。6.memcpy:内存拷贝。

2023-11-15 19:32:26 17

原创 C语言基础---位运算、内存管理

内存池最重要的目的是为了消灭碎片化,内存池是一个由已经分配好的内存快组成的一个池子,当用户需要动态内存时,会从内存池中获得一块合适的内存,当用户不需要这块内存时,会由内存池回收,重新添加到内存池中。(2)逻辑右移:移入0;符号位为1,(1)算术右移:移入1;取决于左操作数的正负:左操作数为正,结果为正;<<:左移运算符(2进制):相当于*2^n;有符号:符号位为0,移入0;按位与(&):与0得0,与1保持原值;按位或(|):或1置1,或0保持原值;按位异或(^):相同为0,不同为1;):1变0,0变1;

2023-11-14 19:45:15 29

原创 c语言基础---函数高级

应用场景:如果一个规模较大的问题,可以不断的分解成为若干个规模较小的相似问题,一般可以使用函数递归思想解决。1.带参宏不是函数, 不需要入栈出栈 传参 传递返回值,效率高于函数调用。2.带参宏是文本展开替换不进行运算,当调用次数过多时, 代码体积较大;2.递归函数:(快速排序的实现)在调用一个函数的过程中又出现直接或者间接的调用该函数本身;1.递归需要函数反复的调用,(入栈 出栈 传参)2.循环不需要额外开销,有的问题适用递归。将函数返回值作为参数传递给被调函数;(2).带参宏 (宏函数)

2023-11-13 20:52:50 28

原创 c语言基础---指针

2.取地址运算符具有类型升级的作用,指针运算符具有类型降级的作用;定义了一个数组,数组的数组名a, a包含5个元素,元素的类型是int *;定义了一个指针,指针指向一个数组,数组有5个元素,每个元素都是int;指针:指向的是一个地址编号,指针具有指向性;(指向一段连续的内存空间)注意事项:1.&运算符只能操作变量,*运算符只能操作指针;数组的指针:是一个指针,指向整个数组;指针的数组:是一个数组,元素是指针;2.&:取地址运算符(获取指向操作数变量的指针)3.*:指针运算符(获取操作数指针所指向的空间)

2023-11-12 15:43:59 25

原创 C语言基础---公用体、枚举

共用体成员共享内存;处理器在存取处理内存中的数据时的字节顺序;数据通信过程中数据的字节顺序;数据类型1 变量名1;数据类型2 变量名2;数据类型3 变量名3;数据类型n 变量名n;fputs:(数组名,stdout)不带换行;4.在结构体\共用体中如何在定义别名的同时定义变量?union 共用体类型名 变量名;共用体与结构体的区别:结构体成员的内存互相独立,大端存储:地址低位保存数据高位;小端存储:地址低位保存数据低位;第三章:c语言标准库函数;第二章:系统的调用函数;

2023-11-09 19:28:05 27 1

原创 c语言基础---结构体

(1). 结构体的成员变量分配在内存中的起始地址一定是自身基本数据类型整数倍的地址编号;注意:多个结构体嵌套使用'->'访问时一定要把取地址的结构体名称和取地址符放在一起(&dat1.dat2)->year。(2). 结构体的整体大小必须是自身最大数据成员的整数倍。(3). 32位 4字节对齐, 64位 8字节对齐。2.'->':通过结构体地址来访问 (&dt1)->year。(1)struct 结构体类型名 变量名;3.typedef:(定义结构体的类型别名)2.局部初始化(需要加'.')

2023-11-08 18:54:47 31 1

原创 c语言基础---指针

自加:p++ ++p: p = p + 1 指针向高地址(偏移自身指向空间的数据类型字节数);自减:p-- --p: p = p - 1 指针向低地址(偏移自身指向空间的数据类型字节数);p - p(必须同种类型的指针):两个指针地址编号之间包含的指针所指向空间类型的数量;加法:p + N: 指针向高地址(偏移自身指向空间的数据类型字节数的N倍个字节)减法:p - N: 指针向低地址(偏移自身指向空间的数据类型字节数的N倍个字节)1.指针含义:用来指向内存不同字节的地址编号的连续空间;

2023-11-07 21:27:39 26

原创 c语言基础---函数

在windows、gcc环境下, 若非void函数无返回值, 系统会自动的返回当时eax寄存器中的值, 通常表现为函数中最后一条语句(两个变量以上)或函数调用的值。在其它的C编译器下, 返回值可能会是某个固定的值, 也可能是随机值。1.当函数返回值类型不为void时, 必须写return 值否则是一个不确定的值;3.当函数返回值类型与实际返回的值的类型不一致时,以返回值类型为准,会发生数据类型隐式装换。注意事项:当函数调用时传递的实参与形参不一致时,以形参为准,发生数据类型的隐式转换(不可取)

2023-11-06 20:25:09 27

原创 c语言基础---二维数组

字符型数组,保存的是六个字符,是字符串。字符型数组,保存的是五个字符,不是字符串。注意:没有初始化的元素,初始化为0;二、字符数组:有多个字符型数据元素所组成的数组;1.二维数组:由n个类型相同的一维数组所组成的数组;3.默认初始化(剩下的默认为0)

2023-11-05 14:45:13 50

原创 c语言基础---数组

b:光标前移(一个字符一个字符前移);j、k:光标换到下一行/上一行;l:光标后移(移动规则同h);h:光标前移(一个字母前移);是一种构造数据类型,由数据类型相同的n个元素所组成的一个有限集合;2.数组的数组名代表数组的地址;Linux 操作系统normal模式下l:x:删除;有序性:数组中的元素在内存中是有序存放的;连续性:数组中的元素在内存中是连序存放的;continue:跳出当前的语句;单一性:数组中的元素类型必须相同;3.注意:1.数组不允许被整体赋值;回顾:break:跳出其所在的循环;

2023-11-03 09:10:11 18

原创 c语言基础----循环结构

fgets:接受字符串时会将\n接入,而,strcmp比较两个字符数组时,只会比较有效长度,将\n舍去。fgets(数组名,sizeof(数组名),stdin):接受字符串时,不会受到空格的影响;如果一个程序中,用fgets接受的字符串和另一个字符串做大小比较时,不能用strcmp进行;循环进行的方向:1-2(真)-A-3......-2(假)退出循环;4.goto循环:(一般禁止使用,过度使用会破坏程序的逻辑结构,降低了程序的可读性)(1).在循环体内,短路当次循环体的后续执行,并不会跳出本次循环;

2023-11-01 21:12:39 36 1

原创 输入输出函数(下)以及流程控制(上)

2.当使用if语句时,没有加“{}”,else部分会自动与离他最近的if配对;2.case后必须为整型常量(确定的值),但不能与已经定义的重复;注意:1.if可以单独使用,但else和else if不能单独使用;(2)gets:从终端获取一行字符串;(过滤换行,并将其替换为\0);if的嵌套使用最多使用三组,多了影响代码可读性;3.小于定义的精度则可以判断相等,反之,不想等;注意:1.num的值必须为整型;(1)puts:向终端输出一行字符串;(1)1.宏定义一个精度大小,问题:浮点型数据大小比较。

2023-10-31 20:19:31 341 5

原创 C语言—运算符及输入输出函数

2.%c 与空格+%c有区别,加空格可以过滤掉空格;(表达式1条件为真,执行表达式1,反之执行表达式2);在非中如果左操作数为真,则直接不执行右操作数;%m.nf:小数点后保留n位,输出占m位(不够空格补齐);注意:1.赋值运算符 双目 < 特殊运算符 三目(结合方向自左向右);单目>双目>三目>多目运算符(双目中:算术运算符>关系运算符)短路法则:在与中如果左操作数为假,则直接不执行右操作数;(2)关系运算符:“<”、“>”、“<=”、“>=”、“==”;表达式的值取决于左操作数的值相同;

2023-10-30 19:10:41 58

原创 Linux操作系统之语句与表达式

(2)编译阶段:gcc-S xxx.i-o xxx.s(将预处理产生的c语言源程序翻译为汇编语言)():强转运算符只在当此使用有效,并不在根本上改变改变量/常量/表达式的值;(3)汇编阶段:gcc-c xxx.s -o xxx.o(将汇编翻译为机器语言)(4)链接阶段:gcc xxxx.o -o app(将机器语言链接为可执行程序)=:赋值运算符,左值:变量;右值:常量/变量/表达式;(1)预处理阶段:gcc-E xxx.c-o xxx.i。sizeof():在编译阶段运行;原则:低精度向高精度转换;

2023-10-29 18:42:19 16 1

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

双精度浮点型:符号位(一个比特)、数据位/尾数位(52个比特)、指数位(11个比特);单精度浮点型:符号位(一个比特)、数据位/尾数位(23个比特)、指数位(8个比特);(1)整型常量(默认int, 超出int 范围为long)常量:在程序运行过程中,其值不能被改变的量,称之为常量;变量:在程序运行过程中,其值可以被改变的量,称之为变量;(2)浮点型变量(没有有无符号的概念)'\t' 横向制表符。'\\' \字符。'\"' "字符。'\n' 换行。'\b' 退格。

2023-10-26 18:32:00 17

原创 【无标题】

整型:int(4字节)、short(2字节)、long(32位操作系统:4字节,64位操作系统:8字节)、long long (8字节);gedit + path/xxx.txt(打开Linux操作系统下的记事本)ctrl + j/k(上下切换)v + 移动选中范围 + y(复制)、d(剪切) + p (粘贴)水平分屏:vsp + path/filename;6.剪切 :将光标移动到需要剪切的行 n + dd。水平切换:ctrl + h(向左切换)标准模式 => 命令模式::+ 命令。

2023-10-25 18:25:46 13

原创 linux基础

cp -r 源路径1/filename1 源路径2/filename2 源路径3/filename3 ... 目标路径/(filename)cp 源路径1/filename1 源路径2/filename2 源路径3/filename3 ... 目标路径/(filename 重命名)mv 源路径1/filename1 源路径2/filename2 源路径3/filename3 ... 目标路径/(filename)7.删除一个或多个空文件夹(remove directory)11.移动一个或多个文件;

2023-10-24 18:11:49 18

空空如也

空空如也

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

TA关注的人

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