自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 GDB调试器的使用

GDB调试器的使用一.gdb使用流程1.查看文件在gdb中键入l,就可以查看所载入的文件。2.设置断点在gdb中设置断点非常简单,只需在b后面加入对应的行号即可3.查看断点情况info b4.运行代码gdb默认是从首行开始运行代码,键入r即可,如果想从程序中指定行开始运行,可在r后面加上行号进行。5.查看变量值在gdb中键入p+变量值即可,如下所示:6.单步运行单步运行可以使用n或s,它们之间的区别在于:若有函数调用的时候,s(step in)会进入该函数而n(step over)

2020-11-27 22:47:02 2

转载 互斥锁Mute AutoLock的使用

互斥锁Mute AutoLock的使用一.Mute用途主要用于多线程访问同一临界资源时,保证访问的互斥性。同一时间只能有一个线程访问该临界资源。对应系统源码实现:inline Mutex::Mutex(int type, const char* name) { if (type == SHARED) { //type如果是SHARED,则表明这个Mutex支持跨进程的线程同步。 //以后我们在Audio系统和Surface系统中会经常见到这种用法。

2020-11-15 15:45:10 28

原创 property_get和property_set使用方法

property_get和property_set使用方法

2020-11-15 15:21:05 31

原创 Android系统移值之简介

Android系统移值之简介一.Android系统框架其中几个组成部分:1.linux内核标准linux内核的基础上外加android特有的一些驱动,binder驱动用于进程间通讯,还有电源管理,音频驱动,输入设备驱动等;2.android核心库层...

2020-10-26 21:37:01 28 1

原创 Linux命令常用命令行

Linux命令常用命令行一.常用命令行1.cp 拷贝源文件或者目录到指定路径a.将普通文件拷贝到指定的路径 sudo cp /mnt/hgfs/share/test.c /home/Ubuntub.将目录拷贝到指定的路径sudo cp /mnt/hgfs/share/dir /home/ubuntu -ac.实现备份的功能,将源文件备份一次sudo cp test.c test_bak.c d.实现备份的功能,将目录备份一次sudo cp dir dir_

2020-10-26 10:29:18 36

原创 C语言的行指针和列指针

一、定义二维数组<1>定义方式数据类型 数组名[行数][列数];例如:int a[3][4]; =====>3行4列C语言对二维数组采用的这种特殊的定义方式,使得二维数组可以被看作一种特殊的一维数组:它的元素又是一个一维数组。例如:上图中的a可以看出是一个一维数组,他有3个元素:a[0],a[1],a[2].每个元素又包含四个一维数组。a[0]----------->a[0][0] a[0][1] a[0][2] a[0][3]a[1]------

2020-10-25 13:10:53 61

原创 C语言中a和&a

C语言中a和&a一.a这里我们先看看数组名代表的是什么,这个概念可能大家有所误解,认为数组名代表的就是数组的地址,当然,数组名代表的是一个地址,但是关键是,通过这个地址,我们关注的是它能取得多大空间的数据的值。例如对于一个char 类型的地址,我们能够取得一个字节的值,对于一个int型的地址,我们能够取得4个字节的值。好了,下面我来谈谈类型的理解。1.C语言中的类型char a ; =====> a是char类型short b; =====> b 是short类型int

2020-10-25 13:05:33 72

原创 C语言之指针数组

C语言之指针数组一.指针数组1.简介简介:本质是一个数组,但是里面存放的数据都是指针,即数组元素都是指针。它是“存储指针的数组”的简称。2.内容格式数据类型 * 数组名[元素个数];例如:int a[4];“[]“的优先级比我们的”"的优先级高,所以[]与我们的4先结合,形成了我们的数组的定义,数组名叫做a,我们平时定义数组的格式如下:int b[10];------>数组名b------>数组里面元素的类型 int 类型而指针数组 aint * a[10];

2020-10-25 12:57:25 13

原创 C语言基础知识一

C语言基础知识一一.二维数组连续存储,即内存地址是连续的。#include <stdio.h>int main(int argc, char *argv[]){ int a[2][2]; int i, j; a[0][0] = 1; a[0][1] = 2; a[1][0] = 3; a[1][1] = 4; //第二种赋值方式,定义加初始化 int b[2][2] = {1,2,3,4}; int c[2]

2020-10-18 16:44:43 36

原创 C/C++中static关键字的使用

C/C++中static关键字的使用一.修饰变量1.修饰局部变量即在函数体中定义的变量,只能在这个函数中使用了,同一个文档中的其他函数用不了。并且即使这个函数执行完成之后,这个局部静态变量的值还是不会被销毁的,函数下次调用依然有效。2.修饰全局变量仅限于变量被定义的文件中使用,其他的文件即使使用extern也无法使用静态全局变量。并且其作用域其实就是从定义之处开始,到文件结尾处结束。在定义之处前面也无法使用该变量的。#include <stdio.h>static int j;

2020-10-10 21:28:13 7

原创 C/C++编程规范

C/C++编程规范一.编写可重入函数时,应注意局部变量的使用,如编写C/C++语言的可重入函数时,应使用auto即缺省态局部变量或寄存器变量。编写C/C++语言的可重入函数时,不应使用static局部变量,否则必须经过特殊处理,才能使函数具有可重入性。static局部变量相当于全局变量,如果两个进程同时访问该函数则会导致错误。二.编写可重入函数时,若使用全局变量,则应通过关中断,信号量(即P,V操作)等手段对其加以保护。如果对所使用的全局变量不加以保护,则此函数就不具有可重入性,即当多个进程调用此函

2020-10-10 21:27:31 8

原创 ubuntu软件包详解

ubuntu软件包详解一.dpkg软件包管理(本地安装)dpkg安装软件包的时候需要考虑软件包之前的依赖关系。也有人把它叫做本地安装工具。总之,dpkg是一个底层的软件包管理系统,主要用于对已下载到本地和已安装的软件包进行管理.1.dpkg命令详解特点:不会检查软件包之前的依赖关系。故可能安装多个软件包。A.安装软件sudo dpkg -i 软件包 [安装单个软件包]或者sudo apkg -i *.deb [多个软件包一起安装]例如:sudo dpkg -i nano_2.2

2020-10-06 15:32:25 15

原创 Vim编辑器命令的使用

Vim编辑器命令的使用以下命令均在vi命令模式有效h 光标左移一个字符l 光标右移一个字符j 光标下移一行k 光标上移一行一.对整行操作1.复制光标所在行 yy(如数字+yy代表复制光标往下的几行)粘贴光标所在行 p(注:是在当前行的下一行粘贴)2.删除光标所在行 dd3.选中光标所在行 shift + v结合j k选取多行4.复制选中内容 y(按一个y即可)5.粘贴选中内容 p(向光标所在行的下一行粘贴)shift + p(向光标所在行的上一行粘贴)数字 + p 指定粘贴

2020-10-06 14:55:54 14

原创 JNI技术之动态注册

JNI技术之动态注册一.静态注册的缺点1.C/C++实现的函数名,必须通过javah工具生成对应的C/C++的头文件。2.初次调用native函数时,采用的是在动态库中寻找,如果native函数较多的话,效率比较低下的。...

2020-09-29 19:36:33 36

原创 JNI技术之静态注册

JNI技术之静态注册一.JNI技术简介JNI是Java Native Interface的缩写,通过这种机制可以实现JAVA代码调用C/C++写的接口,也可以在C/C++回调JAVA代码。二.JAVA代码中调用C/C++接口JAVA只需要加载相应的C/C++的库,就可以在java中调用C/C++的函数了的。class Test { //通过"native"修饰成员函数接口,表示这个函数接口是由C/C++来实现的 public native void helloworld();

2020-09-29 19:27:32 18

原创 android.mk

Android.mk的基础知识一.基础知识1.Android.mk文件可以将源码打包成模块,模块可以是apk,jar包,c/c++应用程序,静态库和动态库。动态库可以被以到应用程序包apk,静态库可以被连接入动态库。2.Android.mk中可以定义一个或者多个模块,一个源文件也可以打包进入多个模块中。二.变量1.LOCAL_PATH := $(call my-dir)指定当前模块的目录2.include KaTeX parse error: Double subscript at posit

2020-09-19 07:51:04 6

原创 Wireshark使用指南之重组FTP会话,提取FTP传输原始数据

Wireshark使用指南之重组FTP会话一.重组FTP数据FTP通信使用命令和数据通道进行连接,数据通道仅由TCP握手连接数据包。在数据通道中使用重组功能,可以很容易地将传输的文件重新组装成原始格式。为了使Wireshark能捕获到FTP数据包,需要在一个客户端主机上操作一些FTP命令。ftp 192.168.0.1get cat.jpgquit选择FTP-DATA协议数据帧,并选择Follow TCP Stream命令。该界面显示的数据,就是将传输的原格式重组后的结果。...

2020-09-17 21:22:31 38

原创 Wireshark使用指南之显示过滤器

Wireshark使用指南之显示过滤器一.协议过滤器arp:显示所有ARP流量,包括免费ARP,ARP请求和ARP应答。ipipv6tcp二.应用过滤器bootp:显示所有DHCP流量(基于BOOTP);dns:显示所有DNS流量,包括基于TCP传输和UDP的DNS请求和响应;tftp:显示所有TFTP(简单文件传输协议)流量;http:显示所有HTTP命令,响应和数据传输包。icmp三.字段存在过滤器bootp.option.hostname:...

2020-09-13 13:34:00 53

原创 Wireshark使用指南之捕获过滤器命令

Wireshark使用指南之捕获过滤器命令一.捕获单个IP地址数据#捕获到达/来自192.168.1.110主机的数据host 192.168.1.110host fe80::d5aa:d0e6:db5b:7ed5not host 192.168.1.110src host 192.168.1.110dst host 192.168.1.110host 192.168.1.110 or host 192.168.1.111host www.baidu.com二.捕获IP地址范围#捕获

2020-09-06 13:16:23 48

原创 WireShark使用指南之数据包,数据包延迟分析,实用技巧

WireShark使用指南一一.数据包wireshark捕获到一个数据包,分为帧,包,段。Frame:物理层的数据帧概况;Ethernet II : 数据链路层以太网头部信息;Internet Protocol Version 4: 互联网IP包头部信息;Transmission Control Protocol: 传输层的数据段头部信息,这里是TCP;Hypertext Transfer Protocol:应用层的信息,这里是HTTP协议;1.物理层的数据帧概况2.数据链路层以太网帧头部

2020-09-06 12:23:11 208

转载 Java设计模式优秀网站

Java设计模式优秀网站涵盖:1.工厂模式2.抽象工厂模式3.单例模式4.建造者模式5.原型模式6.适配器模式7.桥接模式8.过滤器模式9.组合模式10.装饰器模式11.外观模式12.享元模式13.代理模式14.责任链模式15.命令模式16.解释器模式17.迭代器模式18.中介者模式19.备忘录模式20.观察者模式21.状态模式22.空对象模式23.策略模式24.模板模式25.访问者模式26.MVC模式27.业务代表模式28.组合实体模式29.数据

2020-08-20 22:50:41 49

原创 C/C++可变参数的使用详解

C/C++可变参数的使用详解一.#的使用定义:#就是用来提取生成字符串的。#include <stdio.h>//#就是用来提取生成字符串的#define P(A) printf("%s:%d\n",#A,A)int main(int argc, char *argv[]){ int a = 1, b = 2; P(a); P(b); P(a+b); printf("Hello World!\n"); return 0;}输出

2020-08-14 23:50:43 50

原创 Java语言学习之网络编程

一.Java的基本网络支持1.使用InetAddressjava提供了InetAddress类来代表IP地址,InetAddress下还有两个子类:Inet4Address, Inet6Address,它们分别代表IPv4地址和IPv6地址。getByName(String host):根据主机获取对应的InetAddress对象。getByAddress(byte[] addr):根据原始IP地址来获取对应的InetAddress对象。import java.net.*;public cla

2020-08-09 21:15:21 49

原创 Java语言学习之进程与线程二

一.线程同步java的多线程支持引入了同步监视器来解决这个问题,使用同步监视器的通用方法就是同步代码块。1.同步代码块public class DrawThread extends Thread{ // 模拟用户账户 private Account account; // 当前取钱线程所希望取的钱数 private double drawAmount; public DrawThread(String name , Account account , double drawAmoun

2020-08-09 13:53:43 40

原创 Java语言学习之进程与线程一

一.进程与线程1.并发性和并行性并行指在同一时刻,有多条指令在多个处理器上同时执行;并发指在同一时刻只能有一条指令执行,但多个进程指令被快速轮换执行,使得在宏观上具有多个进程同时执行的效果。2.多线程的优势多个线程共享同一个进程虚拟空间。线程共享的环境包括:进程代码段,进程的公有数据等,利用这些共享的数据很容易实现线程间的通信。二.线程的创建和启动1.继承Thread类创建线程类// 通过继承Thread类来创建线程类public class FirstThread extends Th

2020-08-09 12:12:39 40

原创 Java语言学习之文件IO

java.io包下主要包括输入,输出两种IO流,每种输入,输出流又可分为字节流和字符流,其中字节流以字节为单位来处理输入,输出操作,而字符流以字符来处理输入,输出操作。一.File类import java.io.*;public class FileTest{ public static void main(String[] args) throws IOException { // 以当前路径来创建一个File对象 File file = new File("."); //

2020-08-09 09:15:41 37

原创 java语言学习之异常处理

一.异常类的继承try{}catch(Exception e){ //使用continue之后会继续运行try中的语句, //从而实现循环 continue;}public class DivTest{ public static void main(String[] args) { try { int a = Integer.parseInt(args[0]); int b = Integer.parseInt(args[1]); int c = a

2020-08-09 08:50:34 45

原创 java语言学习之集合

java语言学习(9)一.Java集合概述Java集合大致分为Set,List,Queue和Map四种体系。其中set代表无序,不可重复的集合;List代表有序,重复的集合;Map代表具有映射关系的集合,Queue代表一种队列集合实现。java的集合类主要由两个接口派生而出:Collection和Map二.Collection和Iterator接口Collection接口是List,Set和Queue接口的父接口,该接口里定义的方法即可用于操作Set集合,也可用于操作List和Queue集合。

2020-08-08 18:05:05 31

原创 java语言学习之基础类库

java语言学习(8)Java 基础类库1.Scanner类输入;import java.util.*;import java.io.*;public class ScannerFileTest{ public static void main(String[] args) throws Exception { // 将一个File对象作为Scanner的构造器参数,Scanner读取文件内容 Scanner sc = new Scanner(new File("ScannerF

2020-08-08 14:27:57 34

原创 java语言学习之枚举类

java语言学习(7)一.枚举类枚举类是一种特殊的类,它一样可以有自己的成员变量,方法,可以实现一个或者多个接口,也可以定义自己的构造器。枚举类与普通类区别:1.枚举类可以实现一个或多个接口,使用enum定义的枚举默认继承了java.lang.Enum类,而不是默认继承Object类,因此枚举类不能显示继承其他父类,其中java.lang.Enum类实现了java.lang.Serializable和java.lang.Comparable两个接口。2.使用enum定义,非抽象的枚举类默认会使用f

2020-08-08 14:06:00 51

原创 java语言学习之内部类,静态内部类,内部类的使用,匿名内部类

java语言学习(6)一.内部类内部类的作用:内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类。内部类成员可以直接访问外部类的私有数据,但外部类不能访问内部类的实现细节,如内部类的成员变量。匿名内部类适合用于创建那些仅需要一次使用的类。内部类比外部类可以多使用三个修饰符:private,protected,static,外部类不可以使用这三个修饰符。非静态内部类不能拥有静态成员。public class Cow{ private double wei

2020-08-08 11:38:54 57

原创 java语言学习之抽象类,接口

java语言学习(5)一.抽象类1.抽象方法和抽象类1.1 抽象方法不能有方法体;1.2 抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例。即使抽象类里不包含抽象方法,这个抽象类也不能创建实例。1.3 抽象类可以包含成员变量,方法(普通方法和抽象方法都可以),构造器,初始化块,内部类(接口,枚举)5种成分。抽象类的构造器不能用于创建实例,主要用于被其子类调用。1.4 含有抽象方法的类(包括直接定义了一个抽象方法;或继承了一个抽象父类,但没有完全实现父类包含的抽象方法;

2020-08-08 08:51:57 58

原创 java语言学习之初始化块,final关键字,类成员

java语言学习(4)一.初始化块一个类可以有多个初始化块,相同类型的初始化块之间有顺序:前面定义的初始化块先执行,后面定义的初始化块后执行。从某种程度上来看,初始化块是构造器的补充,初始化块总是在构造器执行之前执行,与构造器不同的是,初始化块是一段固定执行的代码,它不能接收任何参数。如果有一段初始化处理代码对所有对象完全相同,且无须接收任何参数,就可以把这段初始化处理代码提取到初始化块中。二.静态初始化块用static修饰的初始化块称为静态初始化块,也称为类初始化块(普通初始化负责对对象执行初

2020-08-08 06:54:56 30

原创 java语言学习之类的继承,多态,继承与组合

java语言学习(3)一.类的继承1.java只能有一个直接父类,实际上,java类可以有无限多个间接父类。class Fruit extends Plant{...}class Apple extends Fruit{...}2.方法的重写遵循"两同两小一大"规则,“两同”:即方法名相同,形参列表相同;“两小”指的是子类方法返回值类型应该比父类方法返回值类型更小或相等,子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等。一大指的是子类方法的访问权限应该比父类方法的访问权限更大或相

2020-08-04 21:23:58 46

原创 java语言学习之类与对象,变量,访问控制符,import

java语言学习(2)一.类与对象1.static主要是用于修饰方法,成员变量等成员,static修饰的成员表明它属于这个类本身,而不属于该类的单个实列。有时也把static修饰的成员变量和成员方法称为静态变量和静态方法。静态成员不能直接访问非静态方法的。2.static修饰的方法和成员变量,既可以通过类来调用,也可以通过实例来调用;没有使用static修饰的普通方法和成员变量,只可以通过实例来调用。3.如果确实需要在静态方法中访问另一个普通方法,则只能重新创建一个对象。public class

2020-08-01 13:42:36 44

原创 java语言学习之概述

java基础知识一.java语言概述1.Java语言执行步骤使用Java编译器编译Java程序时,生成的是与平台无关的字节码,这些字节码不面向任何具体的平台,只面向JVM,不同平台上的JVM都是不同的,但它们都提供了相同的接口。JVM是java程序跨平台的关键部分,只要为不同平台实现了相应的虚拟机,编译后的java字节码就可以在该平台上使用了的。二.语法基础知识1.一个java源文件里最多只能定义一个public类HelloWorld.java//Helloworld和A类的执行顺序以在文件中

2020-08-01 10:01:43 42

原创 ctags安装与使用

ctags安装与使用一.ctags是什么ctags工具是用来遍历源代码文件生成的tags文件,而这些tags文件被编辑器如vim用来快速查找定位源代码中的符号(tag/symbol),包含变量名,函数名等。二.如何安装ctags1.在线安装ctags工具sudo apt-get install exuberant-ctags2.vim配置ctags插件脚本,并运行#! /bin/bashTAGS="set tags+=/usr/include/tags"MAP="map <F9&

2020-07-30 22:50:19 115

原创 Linux进程间通信之信号量

Linux进程间通信之信号量一.信号量定义信号变量; sem_t sem1 sem2初始化信号量P操作V操作功能 信号量(POSOX) 信号量灯(IPC)定义信号变量 sem_t sem1 semget初始化信号量 sem_init semctlP操作 sem_wait semopV操作 sem_post semop前面学的信号量时针对的是单个的信号。而信号灯集是一个整体的概念是针对的多个信号量来操作的。信号灯:信号灯集合(可以

2020-07-27 23:07:33 58

原创 Linux进程间通信之消息队列

Linux进程间通信之消息队列一.消息队列Msqid_ds 维护消息队列的结构体,队列的第一个消息指针msg_first,最后一个消息指针msg_last消息中有一个成员指针next每一个消息中包含有哪些内容:Data 数据Length 数据的长度Type 数据的类型。例如:1----voltage data2----电流数据3----有功功率与其他的不同的是内核空间创建的是一个链式队列消息的接收端可以根据消息的类型来接收。|文件I/O | 消息队列||op

2020-07-27 22:30:27 32

原创 Linux进程间通信之IPC通信共享内存

Linux进程间通信之IPC通信共享内存一.IPC通信1.IPC通信(Inter-Process Communication)三种: 共享内存、消息队列、信号灯这个IPC对象,肯定是存在于内核中。而且用户空间的文件系统中有没有IPC的文件类型?没有。1.1 有名管道为什么能实现无亲缘关系的进程之间的通信?是因为用户空间有管道这种文件类型。1.2 IPC是不是只能用于亲缘关系进程之间的通信呢?肯定不是1.3 它是怎样实现无亲缘关系之间的通信呢?也即你是保证用户空间的二个进程对内核中的同一个IP

2020-07-27 21:18:00 30

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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