自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C的分文件编写与动态库

C的文件分为了函数声明的.h文件、函数实现的.c文件和功能实现的mian.c文件以下使用一个输出两数之间最大值函数来说明分文件编写。

2024-07-15 09:02:42 492 1

原创 基于Linux的Flappy bird游戏开发

*定义关于管道的结构体*/int x;//列坐标int y;//横坐标//创建链表//显示管道//清除管道//移动管道//小鸟坐标//显示小鸟//清除小鸟//移动小鸟//curses库初始化//设置定时器--ms//信号处理函数//行//列//500ms//随机种子return 0;void init_curses()//curses库初始化initscr();//进入curses模式//禁止光标显示noecho();//禁止输入字符显示。

2024-01-12 19:11:52 1352 1

原创 并发程序设计--D11D12进程间通信

概念:就是进程和进程之间交换信息。无名管道(pipe)有名管道 (fifo)信号(signal)共享内存映射(mmap)套接字(socket)共享内存(share memory)消息队列(message queue)信号灯集(semaphore set)

2024-01-09 22:59:45 929

原创 并发程序设计--D10线程池及gdb调试多线程

我们平时创建一个线程,完成某一个任务,等待线程的退出。但当需要创建大量的线程时,假设。通俗的讲就是一个线程的池子,可以循环的完成任务的一组线程集合。线程池工作线程,它是任务队列任务的消费者,等待新任务的信号。任务队列,存储需要处理的任务,由工作线程来处理这些任务。,使用线程池可以降低频繁创建和销毁线程所带来的开销,删除任务队列链表所有节点,释放空间。实现任务队列互斥锁和条件变量的初始化。检查函数的参数,添加对应的参数。删除线程池,释放空间。为在线程任务执行时间,T3。判断是否有空闲的工作线程。

2024-01-09 21:00:39 438

原创 并发程序设计--D8D9锁和条件变量

临界资源概念:不能同时访问的资源,比如写文件,只能由一个线程写,同时写会写乱。比如外设打印机,打印的时候只能由一个程序使用。外设基本上都是不能共享的资源。生活中比如卫生间,同一时间只能由一个人使用。

2024-01-09 19:12:53 954

原创 并发程序设计--D5~D7线程的创建、回收和取消清理

可执行指令静态数据进程中打开的文件描述符当前工作目录用户ID用户组ID。

2024-01-09 10:47:45 873

原创 并发程序设计--D4GDB调试多进程程序

设置GDB调试子进程设置GDB调试父进程设置GDB跟踪调试单个进程或多个on:只调试父进程或子进程的其中一个,(根据follow-fork-mode来决定),这是默认的模式off父子进程都在gdb的控制之下,其中一个进程正常调试(根据follow-fork-mode来决定),另一个进程会被设置为暂停状态。显示GDB调试的进程inferiors进程序号(1,2,3....) 切换GDB调试的进程。

2024-01-05 11:52:41 310

原创 并发程序设计--D2D3exec函数族和守护进程

由于在 Linux 中,每一个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端就称为这些进程的控制终端,当控制终端被关闭时,相应的进程都会自动关闭。参数a表示不仅列当前用户的进程,也列出所有其他用户的进程,参数x表示不仅列有控制终端的进程,也列出所有无控制终端的进程,参数j表示列出与作业控制相关的信息。守护进程又叫精灵进程(Daemon Process),它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。

2024-01-05 11:13:09 849

原创 并发程序设计--D1进程的创建和回收

进程和程序内容区别进程包含的内容:BSS段:存放程序中未初始化的全局变量数据段:已初始化的全局变量代码段:程序执行代码堆(heap):malloc等函数分配内存栈(stack):局部变量,函数参数,函数的返回值进程控制块(pcb):PID, 进程状态,进程优先级,文件描述符表运行态、等待态、停止态、死亡态。

2023-12-25 22:28:37 1914

原创 静态库和动态库

编译(链接)时把静态库中相关代码复制到可执行文件中,程序中已包含代码,运行时不再需要静态库占用更多磁盘和内存空间,但程序运行时无需加载库,运行速度快升级时,程序需要重新编译链接1. 编写库文件代码,编译为.o 目标文件。2.ar 命令 创建 libxxxx.a 文件注意:1静态库名字要以lib开头,后缀名为.a2没有main函数的.c文件不能生成可执行文件。链接静态库:gcc -o 目标文件 源码.c -L路径 -lxxxx-L 表示库所在的路径。

2023-12-19 21:42:34 396

原创 标准IO与文件IO

标准IO通过缓冲机制减少系统调用,实现更高的效率全缓冲:当流的缓冲区无数据或无空间时才执行实际IO操作行缓冲:当在输入和输出中遇到换行符('\n')时,进行IO操作当流和一个终端关联时,典型的行缓冲无缓冲:数据直接写入文件,流不进行缓冲标准IO:stdin、stdout、stderr其中stdin和stdout默认行缓冲缓冲区大小是1024个字节。

2023-12-19 21:09:00 920

原创 数据结构与算法-D10D11树及其实现

解决重复包含头文件,每一个头文件最好都写一下。

2023-12-11 23:25:20 58

原创 数据结构与算法-D8D9队列实现及应用

队列:限制在两端进行插入和删除的线性表允许进行存入操作的一端为“队尾”允许进行删除操作的一端为“队头”

2023-12-11 21:01:17 115

原创 数据结构与算法-D7栈实现及应用

具有顺序表同样的存储结构,由数组定义,配合用数组下标表示的栈顶指针top完成操作。

2023-12-07 18:03:47 68

原创 数据结构与算法-D4-D6线性表之链表

1、申请内存2、赋值3、返回头结点。

2023-12-07 12:31:35 64

原创 数据结构与算法-D2D3线性表之顺序表

包含若干数据元素的一个线性序列,特征如下:1)对非空表,a0是表头,无前驱;2)an-1是表尾,无后继;3)其他元素仅且仅有一个前驱,一个后继线性表L可以用二元组表示:L=(D,R)即线性表L包含数据元素集合D和关系集合R顺序存储特点:1)逻辑上相邻的元素,其存储位置也相邻2)对数据元素ai的存取为随机存取或按位置存取3)存储密度高存储密度=(数据元素所占空间)/(整个数据结构所占用空间)顺序存储缺点:1)数据插入和删除等运算的时间复杂度较差顺序存储结构的表示:通常使用数组。

2023-12-05 22:40:57 120

原创 数据结构与算法-D1数据结构引入

散列存储--根据数据元素的特殊字段(关键字key),计算数据元素的存放地址,然后数据元素按地址存放。按每个元素可能具有的直接前趋数和直接后趋数将逻辑结构分为“线性结构”和“非线性结构”数据结构:研究数据之间关系,包括逻辑结构、存储结构、数据操作。链式存储--将数据结构中各元素按照分布到存储器的不同点,用。索引存储--在存储数据时,建立一个附加的索引表,即。线性结构--一个对一个,如线性表、栈、队列。2、可复用性、可维护性、可读性、效率更高。检索、排序、插入、删除、修改等。图状结构--多个对多个,如图。

2023-11-30 08:57:46 63

原创 Linux操作系统使用及C高级编程-D19-D21Makefile

目的:使用SRC代替add.o sub.o test.o,并利用${SRC}取值当然也可使用赋值操作的+=其中8910是函数定义,18是函数调用。

2023-11-29 11:11:07 65

原创 Linux操作系统使用及C高级编程-D17D18编译与调试

当有线程创建时编译:gcc test.c -o test -lpthread分文件编写时主要是分为:.c(函数声明的具体实现)、.h(说明性文件:#define 结构体共用体 声明)、.c(main)

2023-11-27 18:44:41 91

原创 Linux操作系统使用及C高级编程-D15D16内存管理和动态内存使用

使用size查看内存使用。

2023-11-27 10:24:17 83

原创 Linux操作系统使用及C高级编程-D14共用体和枚举

不同数据类型可以使用共同的存储区域。和结构体的本质区别是:使用内存方式,其中共用体是使用同一块内存1、 选择最大成员的大小2、要能够整除成员大小,下图中un1中char s[7]是7个字节,但要遵循能整除int,所以得8。

2023-11-22 11:26:02 64

原创 Linux操作系统使用及C高级编程-D11-D13结构体

不能在后面赋值了,赋值是通过19行​​​​​​​当然也可以直接定义时就进行赋值局部赋值方式。

2023-11-21 22:17:06 186

原创 Linux操作系统使用及C高级编程-D9D10Linux 服务搭建与使用

1. 在线安装TFTP服务器和客户端(需要保证Ubuntu网络通畅)。2. 修改配置文件#配置文件路径#用户名#你的tftp服务器所在的路径#tftp服务器的网关和端口号,0.0.0.0表示任意IP均可下载#tftp 文件服务器的可供选择的权限, get file\ put file \ list file3. 创建tftp服务器的目录//和配置文件的名字和路径必须保持一致//修改tftp服务器文件夹的权限4. 运行下面的命令,重启TFTP服务器。

2023-11-21 11:26:57 159

原创 Linux操作系统使用及C高级编程-D6-D8Linux shell脚本

在终端定义一个变量COUNT,并进行取出使用$也可在代码中使用,特别注意=两端无空格,注释是#若不想用此变量了,可看到在右图中最后打印出空格注意:$#统计参数个数,其中的./test2.sh未参与到统计中。

2023-11-20 22:53:15 247

原创 Linux操作系统使用及C高级编程-D5Linux shell命令(进程管理、用户管理)

其中ps -eif可显示父进程。

2023-11-14 22:29:29 237

原创 Linux操作系统使用及C高级编程-D4Linux shell命令(文件搜索、文件处理、压缩解压)

开发使用不多,运维多

2023-11-14 21:45:18 170

原创 Linux操作系统使用及C高级编程-D3Linux shell命令(权限、输入输出)

是一种应用程序,用以完成用户与内核之间的交互一个功能强大的编程语言(C语言)一个解释执行的脚本语言,不需要编译,写完直接执行目前Linux 乌班图的Shell默认是bash查看当前提供的Shell:cat /etc/shells查看当前系统默认的Shell:echo $SHELL。

2023-11-13 09:04:11 219

原创 Linux操作系统使用及C高级编程-D2软件包管理

有两种类型的软件包:二进制软件包(deb)和源码包(deb-src)二进制软件包(Binary Packages):包含可执行文件、库文件、配置文件、main/info页面、版权声明和其他文档源码包(Source Packages):包含软件源代码、版本修改说明、构建指令及编译工具等先由tar工具归档位.tar.gz文件,然后在打包成.dsc文件。

2023-11-11 13:36:22 97

原创 Linux C语言进阶-D15递归函数和函数指针

指一个函数的函数体中直接或间接调用了该函数本身执行过程分为两个过程:递推过程:从原问题出发,按递推从未知到已知,最终达到回归阶段:按递归终止条件求出结果,逆向逐步代入递归公式,回归到原问题求解。

2023-11-10 21:00:07 326

原创 Linux C语言进阶-D14指针函数

指针函数:指一个函数的返回值为的函数<数据类型>* <函数名称>(<参数说明>) {语句序列;全部变量的地址、静态变量的地址、字符串常量的地址、堆上的地址不可返回局部变量的地址下面的程序返回的是一个局部变量的地址,解决方法:全局变量、静态变量、字符串常量,替换局部变量但要注意字符串常量是常量,不可被修改char * str = "hello";

2023-11-08 22:11:13 139

原创 Linux C语言进阶-D12~D13函数的基本用法及传参

函数的说明:double power(double x,int n) 函数必须先说明再调用,并且x,n可省略引入头文件作用:头文件中有函数声明和函数实现,预处理就是头文件展开double power(double x,int n) {}方式: 全局变量:函数体外说明的变量,在程序中的每个函数里都可见。不建议使用 值传递方式:形参的改变不影响实参 指针传递方式:实参为变量的地址,形参是同类型的指针; 利用指针对地址中的数据进

2023-11-03 15:24:25 81

原创 Linux C语言进阶-D11多级指针、void指针及const

多级指针变量:指向指针变量的指针变量在下图中,定义一个a数组,再定义一个指针数组p[2],其中p数组中存储的是地址,再定义一个二级指针q指向p[0],即&p[0],又由于&p[0]就是p,所以q=p。

2023-11-02 20:38:08 103

原创 Linux C语言进阶-D10指针数组

指针变量构成的数组理解下面printf中的a和p的表示,其中p[0]、p[1]、p[2]表示存储的a,a+1和a+2这几个地址,而再加个*,相当于对地址解引用,从而得到数组中的值。如下图,要想得到a[0][1]的值可以直接打印a[0][1],也可以打印*(a[0]+1),而想用指针数组p来打印,由于p[0]表示的就是a[0]这个地址,所以就可以*(p[0]+1)

2023-11-02 15:16:27 124

原创 Linux C语言进阶-D9字符指针与字符串

把内存中字符串的首地址赋予指针,并不是把该字符串复制到指针中。在C编程中,*p = 'h';//错误,字符串常量不能修改下图中p1和p2都指向同一个字符串,指向的地址也完全相同(即字符串地址)

2023-11-02 10:46:14 103

原创 Linux C语言进阶-D7~D8指针与数组

一维数组的数组名:就是一维数组的指针(起始地址)如果int *px = x;则:x[i]、*(px+i)、*(x+i)、px[i]具有完全相同的功能:访问数组第i+1个数组元素1、指针变量和数组在访问数组元素时,具有相同的形式,因为指针变量和数组名都是地址量2、但指针变量和数组指针(数组名)在本质上不同,指针变量是地址变量,而数组指针是地址常量上图中,a+1本身就是个地址(相当于&a[1])

2023-11-01 21:13:10 127

原创 Linux C语言进阶-D5~D6指针及指针的运算

指针好处:使程序更加间接、紧凑、高效有效地表示复杂的数据结构动态分配内存得到多于一个的函数返回值在C语言中,指针初始化:指针相当于记录了一个地址,并另外存放在一个地方。

2023-11-01 17:41:10 111

原创 Linux C语言进阶-D3~D4字符串处理函数

求字符串长度函数strlen、字符串拷贝strcpy、字符串连接strcat、字符串比较strcmp头文件<string.h>

2023-11-01 10:52:22 88

原创 Linux C语言进阶-D2字符数组和字符串

字符数组:元素的数据类型为字符类型的数组字符数组的初始化逐个字符赋值,无\0在下图中,剩余的会自动添加上\0,而在int中会自动添加0,和NULL其实是一个意思用字符串常量有\0字符数组长度计算下图中,if 0前面的第一个printf中%s是要打印字符串,字符串打印的话要遇到\0才会结束,所以会接着打印直到碰到\0。

2023-10-31 20:57:17 162

原创 Linux C语言进阶-D1二维数组

数据类型 数组名[常量表达式][常量表达式]由于内存是一维的,所以数组时顺序存放的:按行顺序排放验证行名就是一维数组名:1、数组名代表数组起始地址2、sizeof得到数组整体大小。

2023-10-31 17:08:07 126

原创 Linux C语言开发-D15一维数组

数组:有一定顺序关系的数据类型相同变量的变量集合形式: []数组名表示内存首地址,是一个,sizeof(数组名)是数组占用的总内存空间编译时分配连续内存内存字节数=数组维数*sizeof(元素数据类型)pr其中%p代表是打印地址或指针注意事项C语言对数组不作越界检查,使用时要注意。

2023-10-30 16:08:11 146

空空如也

空空如也

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

TA关注的人

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