自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 python uiautomation 使用

uiautomation 使用

2024-09-17 14:30:59 150

原创 Vim 常用插件安装(vim-plugs, vim-gutentags 等)

vim 插件的安装

2024-06-11 00:00:50 2889

转载 linux驱动--》在内核空间操作文件

2022-03-08 21:53:16 146

原创 c++第五篇

C++ 第四篇4.1 静态成员(static)4.1.1. 静态成员变量1) 语法class 类名{static 数据类型 变量名;// 声明}数据类型 类名::变量名= 初值; // 定义和初始化2) 普通成员变量属于对象。静态成员变量不属于对象3) 普通成员变量在构造对象的时候定义和初始化,但是静态成员变量需要在类的外部单独定义和初始化。4) 静态成员变量和全局变量类似,被放在数据段(全局区),可以把静态成员变量理解访问被限制在类中使用的全局变量。5) 使用:类名::静态成员变

2021-11-20 23:16:04 904 1

转载 Qt 环境搭建

系统:Ubuntu18.04.02Qt:qt-opensource-linux-x64-5.12.0.run1:安装包下载官网下载地址:http://download.qt.io/archive/qt/,我这里下载的是5.12.0,选择linux版本qt-opensource-linux-x64-5.12.0.run;也可以点击这个链接直接下载:http://download.qt.io/archive/qt/5.12/5.12.0/qt-opensource-linux-x64-5.12.0.r.

2021-09-04 15:07:26 389

原创 C++第三篇 (引用 内存管理 类型转换)

C++ 第三篇一、内存管理二、引用一 、内存管理二 、引用一、内存管理内存管理分配 : new, new[]释放: delete, delete[]#include <iostream>using namespace std;int main(void){ // int *pi =(int*)malloc(sizeof(int)); // c 语言中的形式 int *pi = new int; *pi = 123; cout << *pi .

2021-06-05 11:07:07 170

原创 C++ 第二篇(函数重载 缺省 哑元 内联 extern “c“)

C++ 第二篇c++ 函数1. 函数重载1.1 定义在相同的作用域中,定义同名函数,但是他们的参数必须有所区别。这样的函数构成重载关系。注意: 函数重载与返回值的类型无关1.2 函数重载匹配调用重载函数时,编译器会根据实参和形参的匹配程度,自动选择最优的重载版本。当前 g++ 编译器的匹配原则:完全匹配 >= 常量转换> 升级转换 > 降级转换 > 省略号匹配对于 char --> cons char 这种没有 区别对于 char * —>

2021-05-30 09:15:59 92

原创 C++ 第一篇

C++ 第一篇一 c++ 程序编译1. 编译方式1.1 gcc xx.cpp -lstdc++1.2 g++ xx.cpp // 推荐2. c++ 文件拓展名.cpp // 推荐.cc.cxx.C3. 头文件#include ----> c++ 中I/O 相关类型,对象,函数都在该头文件中-----> c++ 中大多数头文件没有.h 后缀注: C++ 中也可以用标准C库中的内容,同时C++ 提供了一套不带“.h”的替换版本#include <st

2021-05-15 11:26:15 101

原创 进程间通信(共享内存)

共享内存(进程间通信)ipcs (1) 命令可以查看系统中的进程间通信针对于三种进程间通信 Message Queues共享内存和信号量数组system v ipc 对象(进程间通信的名字)需要根据ID 获得键值。如何获取键值?ftok(3) 使用他获取一个 system v ipc 的键值#include <sys/types.h>#include <sys/ipc.h>key_t ftok(const char *pathname, int proj_

2021-04-25 23:49:55 64

原创 网络 UDP通信

网络编程2udp通讯基于Udp 编程:服务器端创建socket ,返回该设备的文件描述符将fd 和本地的ip 地址 端口号 绑定while (1)使用 recvfrom(2)阻塞等待客户端请求数据的到来处理客户端的请求将处理结果返回给客户端 sendto(2)关闭fd客户端模型创建socket 设备使用sendto(2) 向服务器发送消息使用recvfrom(2)阻塞等待服务器 的相应消息处理响应消息关闭fdudp 系统调用recvfrom#includ

2021-04-13 22:50:19 169 1

原创 网络基础知识(TCP UDP 通信实例)

网络网络基础(续)几种类型的ip1.1 ip 地址 192.168.1.234由两部分组成 : 网络号 主机号主机号全0 代表网段主机号全1 代表本网段的广播地址因此一般的ip 主机号全0 不能用,全1 不能用IP 地址分为两类 : 私有IP 共有 IP1.2 子网掩码规定了主机号的位数,可以通过子网掩码,将主机号分到网络号中,从而对ip 进一步分类。比如 192.168.1.129如果子网掩码是:255.255.255.0即 11111111,11111111,

2021-04-10 14:22:46 1395

原创 信号的产生与使用

信号信号的基础信号就是软中断,软件实现中断的一种机制机器指令 检查是否有中断到来 ------》 (没有)机器指令有中断到来 —> 调用中断处理函数—>回到刚刚机器指令信号的处理是异步的信号的到来有不确定性信号的目的地是一个进程信号到来后,有信号处理 程序系统提供的信号系统一共提供了 62 个信号2) SIGINT 3) SIGQUIT9) SIGKIL 11) SIGSEGV4) SIGALRM 17) SIGCHLD(子进程终止的时候,给父进程发送

2021-03-13 19:59:47 186

原创 linux 的内存管理

一 内存的管理内存的页式管理cpu 在使用内存时,先向内存管理子系统申请内存,然后得到的是虚拟地址,user 通过虚拟地址,通过页表,可以访问到实际的物理地址。对于32为的系统,每一个进程都可以访问4G 的虚拟地址空间。内核使用的虚拟地址空间是1G, user 使用的虚拟地址空间为3G .内存的段式管理二...

2021-02-01 21:55:34 259

原创 linux程序中的错误处理

程序中的错误处理系统维护这一个全局变量 int errno , 当系统调用或者库函数出现错误时,errno 会记录这错误的值。 > 0 的值,每一个错误码会对应一个错误的描述信息。#include <errno.h>可以获取错误码STRERROR(3)#include <string.h>char *strerror(int errnum);功能根据错误编号,返回错误编号的字符串参数:错误的编号 errno返回值返回一个描述错误的字符串#inc

2021-01-09 17:52:50 198

原创 2021-01-04

动态库的制作和使用lib库名.so将所有要打包的动态库的源文件编译为目标文件(与位置无关的目标文件?)gcc -c -fPIC t*.c 将所有t 开头 的.c 文件打包生成与位置无关的.o 文件将第一步中生成的目标文件打包成为动态库gcc -shared -o libt_math.so *.o使用动态库链接生成可执行文件gcc main.c -L. -lt_math注意: 这一步使用的是静态连接器,当识别为动态库时,只是check 一下其中有没有需要的函数 没有则会报错。然后执

2021-01-09 17:25:05 94

原创 2020-12-05

shell 基本指令echo <> 将 <> 中的内容输出到屏幕¥? 上一次命令执行的结果man 帮助的使用:man commandman 1 command 和上面的一样man 2 系统调用man 3 库函数PRINTF(3) 表示man 3 可以查看这个函数...

2021-01-04 21:41:39 70

原创 2020-11-22

os基础知识什么是os :管理计算机底层硬件,并且为用户提供一个或者多个硬件接口。保护底层硬件管理计算机的硬件资源和软件资源程序和进程的关系:程序是指令的集合 位于磁盘上 是静态的进程是 程序运行的实例, 位于内存中 是动态的程序运行一次就会产生一个进程, 程序运行结束 进程也就结束了。管理进程 进程是软件所以操作系统管理软件资源操作系统是管理计算机资源的一款软件计算机资源包含硬件资源和软件资源内存的管理文件和文件系统的管理 磁盘的管理进程的管理

2020-11-30 23:31:49 65

原创 2020-10-31

二叉树二叉树的绝大多数操作都可以采用递归的方法来实现方块类型的变量代表一整颗树,圆圈类型的变量只代表一个节点有序二叉树: 任何一个树的左子树上都比他的节点的数小,右子树比节点的数大,则为有序二叉树树的遍历: 依次处理树的每一个节点,需要通过递归来实现树的遍历一定是先遍历左子树然后遍历右子树根节点的处理顺序:在处理子树之前处理根节点, 前序遍历在两个子树之间处理根节点,中序遍历处理两个子树之后处理根节点,后续遍历头文件#ifndef __TREE__H#define __TREE

2020-10-31 20:53:06 70

原创 2020-10-31

双向链表正向和反向遍历双向链表增加正向和反向的遍历需要注意的是,由于遍历的过程是一个指针记录了当前节点的位置,因此在遍历过程中,不允许有改变链表结构的操作(比如增加,删除,插入节点)头文件#ifndef __03_LINK__H#define __03_LINK__Htypedef struct node { int val; struct node * p_next; struct node * p_prev;} node_t;typedef struct { node_

2020-10-31 00:08:23 77

原创 2020-10-25

顺序链表的构建:只能从链表头向链表尾部存储和遍历头文件:#ifndef __03_LINK__H#define __03_LINK__Htypedef struct node { int val; struct node * p_next;} node_t;typedef struct { node_t head; node_t tail;} link_t;void link_init(link_t * p_link);void link_deinit(link_t *p_l

2020-10-25 22:18:37 60

原创 2020-10-24

循环队列更加的合理,节省内存和空间为了能够在一定空间内完成循环队列,需要记录队列尾部的位置以及队列中成员数量,根据这两个可以计算出头的位置,从而完成循环队列。02_queue.h#ifndef _02_QUEUE__#define _02_QUEUE__typedef struct { int buf[SIZE]; int tail; // last number + 1 int qty; // queue number } queue_t;void queue_init(

2020-10-24 13:05:40 60

原创 2020-10-24

实现单向链表的操作头文件 queue.h#ifndef __QUEUE_H__ #define __QUEUE_H__typedef struct { int buf[SIZE]; int head; // remember first data int tail; // remember last data} queue_t;void queue_init(queue_t * );void queue_deinit(queue_t *);int queue_size(con

2020-10-24 11:04:34 56

原创 2020-10-22

栈的编写其实是一个数组+ 记录栈空间元素个数的qty栈的头文件stack.h#ifndef __STACK_H_#define __STACK_H_#include<stdio.h>typedef struct { int buf[SIZE]; int qty;} stack_t;void stack_init(stack_t * );void stack_deinit(stack_t *);int stack_size (const stack_t *);

2020-10-22 22:19:19 70

原创 2020-10-18

初始化一个空链表,并且动态的插入数据#include<stdio.h>#include <stdlib.h>typedef struct node { int val ; struct node * p_next;} node_t;int main(){ int val = 0; node_t head = {0},tail = {0}; node_t * p_node = NULL, *p_first = NULL, *p_mid = NULL, *p

2020-10-18 13:17:19 62

原创 2020-10-17

C语言中 链表的 增加一个节点和删除一个节点#include<stdio.h>typedef struct node { int val; struct node * p_next;} node_t;int main(){ node_t node1 ={10},node2 ={20},node3={30} ,head = {0}, tail = {0}; head.p_next = &node1; node1.p_next = &node2; node2.

2020-10-17 23:01:38 68

原创 2020-10-17

最简单的链表#include<stdio.h>typedef struct node { int val; struct node * p_next; // 下一个节点依然是一个 node 类型的节点} node_t;int main(){ node_t node1 ={10},node2 ={20},node3={30}; node1.p_next = &node2; node2.p_next = &node3; return 0;}...

2020-10-17 14:58:14 65

原创 2020-10-17

如何在应用层简单的实现cp 命令#include<stdio.h>int main(int argc, char ** argv){ char temp[100]= {0}; int size_read = 0, size_write = 0; if (argc != 3) { printf("err argc input \n"); return 0; } FILE *p_des = NULL, *p_src = NULL; p_src = fopen(argv[1

2020-10-17 10:52:16 68

原创 2020-10-14

C语言文件操作2将一个二维数组写入文件中#include<stdio.h>int main(){ int arr [][5] = { 1,1,1,1,1, 2,2,2,2,2, 3,3,3,3,3, 4,4,4,4,4, 5,5,5,5,5}; int size = 0; FILE *p_file = fopen("a.bin","wb"); if (p_file) { size = fwrite(arr,sizeof(int),25,p_fi

2020-10-14 23:03:21 130 1

原创 2020-10-14

将数据二进制写入文件中#include<stdio.h>int main(){ int arr[] = {1,2,3,4,5}; FILE *p_file = fopen("a.bin","wb"); if(p_file) { fwrite(arr, sizeof(int),5,p_file); fclose(p_file); p_file = NULL; } return 0;}

2020-10-14 23:00:25 66

原创 Kernel

链表在linux 内核中,是最常用的一种数据结构,因此在此花费一些时间,来探索一下内核中,链表的结构,以及内核中链表怎么使用。

2020-03-23 23:13:42 232

空空如也

空空如也

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

TA关注的人

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