自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 资源 (6)
  • 收藏
  • 关注

原创 Python中如何查看模块的源码内容

导入模块,查看参考链接:https://www.cnblogs.com/david-lcw/p/10050410.html#:~:text=ubuntu%E4%B8%AD%E6%9F%A5%E7%9C%8Bpython%E6%A8%A1%E5%9D%97%E7%9A%84%E6%BA%90%E7%A0%81%201.%20%E6%89%93%E5%BC%80ipython3%EF%BC%8C%E8%BF%9B%E5%85%A5%E4%BA%A4%E4%BA%92%E5%BC%8F%E8%A7%A3%E9

2022-02-24 17:08:12 1765

原创 numpy排序

argsort函数返回的是数组值从小到大的索引值

2022-02-22 10:16:36 541

原创 mac sublime3 SublimeREPL->python->python-IPython安装后无法使用

1、找到Main.sublime-menu文件Preferences -> Browse Packages -> SublimeREPL -> config ->Python> ->Main.sublime-menu2、Main.sublime-menu文件中,图示的53行的python改成自己的python路径(使用which python查看),图示的68行的ipython改成自己的ipython路径(使用which ipython查看)参考链接:http

2022-02-21 10:21:15 828

原创 网络编程:字节序

网络编程:字节序一、字节序的概述二、字节序转换的函数1.htonl 将主机字节序的IP地址转换成网络字节序的IP地址2.ntohl 将网络字节序的IP地址转换成主机字节序的IP地址3.htons 将主机字节序的端口转换成网络字节序的端口4.ntohs 将网络字节序的端口转换成 主机字节序的端口三、地址形式的转换函数1.inet_pton函数,将点分十进制数串转换成32位网络字节序地址2.inet_ntop函数,将32位网络字节序IP转换成点分十进制数串一、字节序的概述当存储多字节数据时,就涉及到字节序的

2020-08-07 17:52:35 427

原创 Linux网络编程概述

网络编程概述1.分组交换:对IP报文进行分组,每组包含一个首部,记录分组编号和目的主机地址信息。分组编号用来进行数据的重组主机信息用来进行数据的传输2.交换方式:存储-转发分组独立地寻址进行路由的跳跃,在目的地址进行最终的重组。3.网络的四层结构:TCP/IP 协议应用层:应用层的协议:FTP、Telnet、HTTP协议传输层:进程与进程之间通信(端口信息),TCP、UDP协议网络层:主机与主机之间进行通信(IP地址) IP、ICMP协议链路层:设备到设备之间进行通信,收发的完整的帧数据

2020-08-07 16:59:16 296

原创 进程间通信:管道、FIFO、消息队列、共享内存、mmap

进程间通信:管道、FIFO、消息队列、一、进程间通信简介1、IPC 工具分类2、通信工具3、同步工具二、无名管道三、FIFO(命名管道)四、一、进程间通信简介1、IPC 工具分类按照功能将UNIX系统上各种通信和同步工具分为三类:通信:关注进程之间的通信同步:关注进程和线程操作之间的同步信号:信号的主要作用并不在此,但是特定场景下仍然可以作为同步技术甚至通信技术2、通信工具通常情况下,IPC是为进程间的通信准备的,但某些工具确实可以实现同一进程的线程间的数据交换,但很少需要这样做,因为线程

2020-08-07 11:48:12 1628

原创 进程特例:僵尸进程、孤儿进程、守护进程

进程特例:僵尸进程、孤儿进程、守护进程一、僵尸进程和孤儿进程二、守护进程一、僵尸进程和孤儿进程僵尸进程: 子进程结束,父进程尚未调用wait()回收子进程资源,子进程的PCB还残留在内核,造成资源的浪费孤儿进程:父进程先于子进程结束,子进程成为孤儿进程,子进程修改PCB使其父进程为init进程,孤儿进程结束后,由init进程负责回收其PCB资源二、守护进程守护进程(daemon process),是Linux中的后台进程。守护进程具有以下特征:具有较长的生命周期,一般系统启动时就启动并一直运行

2020-08-05 19:51:06 201

原创 Linux终端、进程组、会话

Linux终端、进程组、会话一、进程组1. 进程组概述2. 进程组API二、会话1.会话概述2.会话API一、进程组1. 进程组概述进程组是一个或多个进程的集合。进程组随进程组首进程创建,进程组的PGID为首进程ID。进程组的生命周期从首进程的创建开始,到进程组内的最后一个进程结束或离开而结束。2. 进程组API(1)获取本进程进程组ID,该函数一定能够成功返回。#include <unistd.h>pid_t getpgrp(void);功能:获取本进程进程组ID参数:voi

2020-08-05 19:11:00 579

原创 解决在Vim中鼠标右键不能粘贴问题

原文链接:https://www.cnblogs.com/csnd/p/11406901.html最近维护一台服务器,使用putty登录后,用vim时,鼠标右键不能 粘贴而是进入了visual模式。网上查找一番找到了解决方法:方 法一:在普通模式下键入“ :set mouse-=a”(不包括引号)方 法二:编辑 ~/.vimrc 文件,加入如下代码: if has(‘mouse’) set mouse-=a endif方法一每次打开vim时都需要设置一次。方法二改了配置文件后,问题就解决了。.

2020-08-05 11:34:41 783

原创 fork()创建多个子进程Demo

#include <stdio.h>#include <sys/types.h>#include <unistd.h>#include <sys/wait.h>/* 创建指定数量的子进程 */int main(int argc, char *argv[]){ int i = 0; pid_t pid; //父进程创建3个子进程 for(i = 0;i < 3 ; ++i) { pid = fork(); if(pid ==

2020-08-05 11:32:32 347

原创 arm架构和x86架构区别

指令集指令集是存储在CPU内部,对CPU运算进行指导和优化的硬程序。拥有这些指令集,CPU就可以更高效地运行。Intel主要有x86,EM64T,MMX,SSE,SSE2,SSE3,SSSE3 (Super SSE3),SSE4A,SSE4.1,SSE4.2,AVX,AVX2,AVX-512,VMX等指令集。AMD主要是x86,x86-64,3D-Now!指令集。arm架构和x86架构区别:X86主要用于PC领域如笔记本、台式机、小型服务器;ARM主要用于移动领域如手机、平板。总体还是为了在不同设备上

2020-08-04 15:57:43 1944

原创 二、驱动设计的硬件基础

驱动设计的硬件基础一、处理器1.通用处理器(GPP)2.数字信号处理器二、存储器三、接口与总线1.串口2.I²C3.SPI4.USB5.以太网接口6.PCI和PCI-E7.SD和SDIO四、CPLD和FPGA五、原理图分析六、硬件时序分析一、处理器1.通用处理器(GPP)目前主流的通用处理器(GPP) 多采用SoC(片上系统) 的芯片设计方法, 集成了各种功能模块, 每一种功能都是由硬件描述语言设计程序, 然后在SoC内由电路实现的。在SoC中, 每一个模块不是一个已经设计成熟的ASIC器件, 而是

2020-08-04 15:57:00 1167

原创 一、Linux设备驱动概述

Linux设备驱动概述一、设备驱动的作用二、无操作系统时的设备驱动三、有操作系统时的设备驱动四、Linux设备驱动1.设备的分类及特点2.Linux设备驱动与整个软硬件系统的关系五、设备驱动Hello World:LED驱动1.无操作系统时的LED驱动2.Linux下的LED驱动一、设备驱动的作用对设备驱动最通俗的解释就是“驱使硬件设备行动”。 驱动与底层硬件直接打交道, 按照硬件设备的具体工作方式, 读写设备的寄存器, 完成设备的轮询、 中断处理、 DMA通信, 进行物理内存向虚拟内存的映射等, 最终

2020-08-04 15:56:31 630

原创 进程的终止

进程的终止一、进程的终止方式二、进程终止的细节三、退出处理程序四、fork()、 stdio 缓冲区以及_exit()之间的交互一、进程的终止方式进程通过接受信号异常退出通过调用_exit(status)正常退出,其中status保存进程退出的状态,0为正常退出,非0为异常退出,但这并不是明文规定的标准,SUSv3 规定有两个常量: EXIT_SUCCESS(0)和 EXIT_FAILURE(1)通过执行exit(status)正常退出exit()会执行的动作如下:1、调用退出处理函数(通过

2020-08-04 15:49:14 2730

原创 进程的创建(fork、vfork)

进程的创建:fork、vfork一、fork()1.fork()的概述2.父子进程之间的文件共享3.fork()的内存语义3.fork()的使用场景二、vfork()1.vfork()的概述三、fork之后的竞争条件一、fork()1.fork()的概述fork()允许父进程创建一个子进程,为子进程申请一块独立的内存空间,拷贝父进程的执行代码段、数据段、堆栈内容,之后父进程和子进程各自拥有独立的内存空间,执行各自的程序代码。简单说,子进程拷贝父进程的资源后,拥有自己的进程号和计时器,开始执行自己的程序

2020-08-04 14:17:01 548

原创 sqlite3 按上下键可以让历史命令回调

sudo apt-get install rlwrap;sudo vim ~/.bashrc最后一行添加alias sqlite3=‘rlwrap sqlite3’source ~/.bashrcsqlite3 test.db

2020-07-08 17:23:24 722 2

原创 ZStack通信(Zigbee协议栈通信)

ZStack通信-Zigbee协议栈通信一、注册端点二、发送数据函数三、接收数据一、注册端点应用都是建立在端点ZDO(Zigbee Device Object)之上的, 所以要实现通信首先要定义并注册一个端点。注册过程就是向端点应用链表epList增加一个节点。注册函数:afRegister( endPointDesc_t *epDesc );终端描述类型:typedef struct{ uint8 endPoint;//端点号1-240 uint8 *task_id; //当前任务I

2020-07-03 21:33:41 1885

原创 arm开发板开发环境搭建

arm开发板开发环境搭建一、XShell连接开发板二、ubuntu配置交叉编译器三、交叉编译四、ubuntu搭建nfs服务器五、ubuntu挂载到开发板上一、XShell连接开发板1.连接开发板,右击我的电脑->属性->设备管理->端口2.新建会话,添加SERIAL(串口)连接二、ubuntu配置交叉编译器目的:在ubuntu下编译,在arm开发板上运行第一步:查看当前系统是否支持arm-linux-gcc,如果不支持继续以下步骤第二步:将arm-linux-g

2020-06-30 20:41:27 1845

原创 Linux进程详解

进程一、进程和程序二、进程号和父进程号三、进程内存布局四、虚拟内存管理五、栈和栈帧六、命令行参数七、环境列表八、执行非局部跳转一、进程和程序进程(process)是一个可执行程序(program)的实例。程序是包含了一系列信息的文件, 这些信息描述了如何在运行时创建一个进程, 所包括的内容如下所示:二进制格式标识。每 个 程 序 文件 都 包 含 用于 描 述 可 执行 文 件 格 式的 元 信 息(metainformation)。内核(kernel)利用此信息来解释文件中的其他信息。程

2020-06-30 08:50:23 816

原创 野指针与非法内存操作

野指针与非法内存操作一、野指针二、合法的内存地址三、野指针的由来1.局部指针变量没有被初始化2.使用已经释放过后的指针3.指针所指向的变量在指针之前被销毁四、非法内存的操作1.指针变量未初始化就使用2.数组越界3.内存泄露4.多次释放指针一、野指针野指针通常是因为指针变量中保存的值不是一个合法的内存地址而造成的。C语言中没有任何手段可以判断一个指针是否为野指针!二、合法的内存地址1.在堆空间动态申请的;2.局部变量所在的栈。三、野指针的由来1.局部指针变量没有被初始化局部变量没有被初始化,指

2020-06-15 15:27:15 475

原创 Linux系统调用详解

Linux系统调用详解一、用户空间和内核空间二、系统调用层及作用三、系统调用和POSIX标准四、系统调用表五、用程序直接访问系统调用六、新增的系统调用一、用户空间和内核空间在现代操作系统中,处理器的运行模式通常分成两个空间:用户空间和内核空间。大部分程序运行在用户空间,而内核和设备驱动运行在内核空间。二、系统调用层及作用在现代操作系统架构中,内核空间和用户空间中间增加了一个中间层:系统调用层系统调用层的主要作用:为用户空间程序提供一层硬件抽象接口。让应用程序编程者从学习硬件设备底层编程中解放出

2020-06-11 20:36:42 543

原创 open和fopen的区别

1.函数声明、参数、返回值、头文件函数声明: FILE *fopen(const char *filename, const char *mode)参数: 1. filename -- 这是 C 字符串,包含了要打开的文件名称。 2. mode -- 这是 C 字符串,包含了文件访问模式,模式如下: "r" 打开一个用于读取的文件。该文件必须存在。 "w" 创建一个用于写入的空文件。如果文件名称与已存在的文件相同,则会删除已有文件的内容,文件被视为一个新的空文件。 "a

2020-06-10 21:38:33 443

转载 js如何获取select下拉框的value以及文本内容

html代码: <body> 书籍分类: <select id="s1" > <option value="1">教学类</option> <option value="2"> 技术类</option> </select></body>javascrtipt代码:window.onload = function(){ //首先

2020-06-03 14:46:57 372

原创 网络数据包的封包格式

网络数据包的封包格式一、网络封包的概述二、各层报文的封包格式1.UDP封包格式2.TCP封包格式3.ICMP封包格式4.IP封包格式5.Ethernet封包格式一、网络封包的概述1.在TCP/IP协议栈中的每一层为了能够正确解析出上层的数据包,从而使用一些“协议类型”来标记,详细如下图2.组装/拆解udp数据包流程二、各层报文的封包格式1.UDP封包格式2.TCP封包格式3.ICMP封包格式4.IP封包格式5.Ethernet封包格式...

2020-05-30 10:49:20 3199

原创 JavaScript的介绍及简单使用

什么是JavaScriptsJavascript 是一种基于对象并具有安全性能的脚本语言, 是由浏览器内解释器翻译成可执行格式后执行, 在概念和设计方面, Java和 Jvascript 是两种完全不同的语言。Javascript 的四个特点: 基于对象的语言、 简单性、 动态性、 跨平台性网页使用js脚本的三种方式直接添加脚本<html> <head> <title>demo1</title> &l

2020-05-28 09:24:23 676

原创 CGI的介绍及简单应用

什么是CGI?CGI是通用网关接口(Common Gateway Interface);是HTTP服务器与其它程序进行“交谈”的工具,通过CGI接口就能在服务器端运行其他的程序。CGI是任何具备标准输入、输出、环境变量的语言编写并生成的可执行文件。CGI处理步骤通过浏览器将用户请求送到服务器服务器接收用户请求并交给CGI程序处理CGI程序把处理结果传送给服务器服务器把结果送回到浏览器CGI编程CGI程序通过标准输入(stdin)、标准输出(stdout)实现与web服务器间信息的传递

2020-05-27 21:37:09 2242

原创 AJAX的介绍及简单应用

AJAX 概述AJAX 是 Asynchronous JavaScript And XML 的缩写AJAX 是一种用于创建快速动态网页的技术AJAX 不是新的编程语言, 而是一种使用现有标准的新方法AJAX 最大的优点是在不重新加载整个页面的情况下, 可以与服务器交换数据并更新部分网页内容。传统的网页(不使用 AJAX) 如果需要更新内容, 必需重载整个网页面 AJAX 不需要任何浏览器插件, 但需要用户允许JavaScript 在浏览器上执行。有很多使用 AJAX 的应用程序案例: 新浪

2020-05-27 20:13:31 304

原创 网络开发包 libpcap

Libpcap的主要作用捕获各种数据包: 例如,网络流量统计。过滤网络数据包: 例如,过滤掉本地上的一些数据,类似防火墙分析网络数据包: 例如,分析网络协议,数据的采集存储网络数据包: 例如,保存捕获的数据以为将来进行分析Libpcap的安装sudo apt-get install libpcap-dev使用时需要加pcap.h头文件编译时需要加-lpcap利用libpcap函数库开发应用程序的基本步骤:打开网络设备设置过滤规则(可选)捕获数据关闭网络设备捕获网

2020-05-25 22:04:28 418

原创 虚析构和纯虚析构

虚析构:class Base{public: virtual ~Base() {函数体}}纯虚析构:class Base{public: virtual ~Base()=0;}Base::~Base(){函数体}虚析构写成纯虚析构后还得在类外进行定义。而且虚析构和纯虚析构在子类析构之后都会被调用。纯虚析构的引入是不是有点多此一举呢?在基类中使用...

2020-03-27 22:19:33 300

原创 C++为何引入多态及多态的实现

#include <iostream>using namespace std;class Animal{public: void sleep(void) { cout << "Animal::sleep() - 动物在睡觉" << endl; }};class Cat:public Animal{publ...

2020-03-27 21:10:52 473

原创 动态创建对象时候为什么使用new,而不是malloc

使用malloc或calloc创建对象的时候

2020-03-21 15:26:01 592

转载 [C/C++] C++声明和定义的区别

变量定义:用于为变量分配存储空间,还可为变量指定初始值。程序中,变量有且仅有一个定义。变量声明:用于向程序表明变量的类型和名字。定义也是声明:当定义变量时我们声明了它的类型和名字。·extern关键字:通过使用extern关键字声明变量名而不定义它。1.定义也是声明,extern声明不是定义,即不分配存储空间。extern告诉编译器变量在其他地方定义了。 extern int i; ...

2020-03-21 14:52:03 198

原创 delete的使用

1.delete NULL;是安全的在C ++中删除设置为NULL的指针时会发生什么?值得庆幸的是,什么都没有! delete将检查指针是否为NULL,如果发现该对象设置为NULL,则跳过该对象的删除。2.delete对象和对象数组如果delete-expression的操作数的值不是空指针值,则delete-expression将为要删除的对象或数组元素调用析构函数(如果有)。...

2020-03-21 11:40:05 865

原创 Qt creator 常用的17个快捷键

alt +enter // 自动创建类的定义F1 // 查看帮助,文档F2 // 快速到变量声明F4 // 在 cpp 和 h 文件切换Shift + F2 // 函数的声明和定义之间快速切换Ctrl +M //创建书签Ctrl + . //切换书签Alt + M//打开书签栏Ctrl + Enter //换行Ctrl +Shift + Enter //到上一行添加Ctrl +...

2020-03-18 21:21:06 427

原创 C/C++中变量的定义和声明

和C相比,C++对于全局变量的检测增强,在C中,全局区域的两次int a;并不会出现报错,但在C++中却会出现变量重定义的错误然而在C++中,两次int a;会出现变量重定义的错误但无论C还是C++,变量的定义只有出现一次,但变量的声明可以出现多次。先了解一哈变量的定义和变量的声明到底做了哪些事情~C语言变量的定义://变量声明的示例int a;int b = 1;extern ...

2020-03-16 21:18:08 2390

原创 ubuntu界面自适应VMware窗口大小

环境:Ubuntu16.04VMware workstation pro

2020-03-06 23:14:52 375

原创 C:文件加密

主函数:main.c#include <stdio.h>#include "fun.h"int main(int argc, char *argv[]){ while(1) { int cmd = 0; print_help(); scanf("%d", &cmd); if(1 == cmd) { char src_fil...

2020-03-04 23:50:05 511

原创 Android中的表格布局详解

Android中的表格布局详解1.TableLayout简介Tablelayout类以行和列的形式对控件进行管理,每一行为一个TableRow对象,或一个View控件。当为TableRow对象时,可在TableRow下添加子控件,默认情况下,每个子控件占据一列。当为View时,该View将独占一行2.如何确定行数和列数如果我们直接往TableLayout中添加...

2018-03-08 16:28:20 4278

原创 Android中的相对布局详解

Android中的相对布局详解1.相对布局和LinearLayout一样,RelativeLayout也是常用的一种安卓布局。通常使用LinearLayout+RelativeLayout完成页面的布局。相对布局即参照兄弟组件或者父容器来决定组件的位置。2.基本属性gravity:设置容器内组件的对齐方式ignoreGravity:设置了该属性为true的属性的组件,将...

2018-03-08 16:27:08 1022

原创 Android中的线性布局详解

Android中的线性布局详解1.线性布局LinearLayout按照垂直或者水平的顺序依次排列子元素,每一个子元素都位于前一个元素之后。如果是垂直排列,那么将是一个N行单列的结构,每一行只会有一个元素,而不论这个元素的宽度为多少;如果是水平排列,那么将是一个单行N列的结构。如果搭建两行两列的结构,通常的方式是先垂直排列两个元素,每一个元素里再包含一个LinearLayout进行水平排...

2018-03-05 16:00:51 3124

NodeMCU_api+ESP8266指引.rar

NodeMcu Api.pdf Nodemcu指引PDF.pdf 引脚图.png

2020-07-06

lua-api.rar

Lua中文教程

2020-07-06

mount_nfs.sh

#!/bin/sh #auto get ip #udhcpc #config ip netmask gw #ifconfig eth0 172.20.223.123 netmask 255.255.255.0 #route add default gw 172.20.223.254 serverip=$1 serverpath=$2 localpath=$3 echo "usage:./mount_nfs serverip serverpath localpath" if [ -z $serverip ]; then echo "serverip is NULL" exit 1 fi if [ -z $serverpath ]; then echo "serverpath is NULL" exit 1 fi if [ -z $localpath ]; then localpath=/mnt/nfs echo "localpath default /mnt/nfs" fi mount -o nolock,wsize=1024,rsize=1024 $serverip:$serverpath $localpath if [ $? = 0 ]; then echo "nfs mount succeed!!" echo "if you want to umount the serverpath" echo "please input umount like this: umount /mnt" else echo "nfs mount failed,please check and try again!!" fi

2020-06-30

arm-linux-gcc.4.3.2.rar

Ubuntu-arm 交叉编译器 目的:在ubuntu下编译 在arm开发板上运行 第一步:将arm-linux-gcc-4.3.2.bz2拷贝到虚拟机的任意目录 第二步:查看当前系统是否支持arm-linux-gcc 如果不存在 则继续如下步骤: 第三步:在/usr/local创建一个文件夹为arm mkdir /usr/local/arm 第四步:将arm-linux-gcc-4.3.2.bz2解压到/usr/local/arm目录下 sudo tar xvf arm-linux-gcc-4.3.2.bz2 -C /usr/local/arm 第五步:进入到 /usr/local/arm cd /usr/local/arm cd 4.3.2 cd bin pwd得到arm-linux-gcc的路径为:/usr/local/arm/4.3.2/bin 第六步:将上面得到的目录添加到环境变量PATH中 sudo vim ~/.bashrc 在文件的末尾添加: export PATH=/usr/local/arm/4.3.2/bin:$PATH 第七步:重启.bashrc脚本 source ~/.bashrc 如果再去which arm-linux-gcc就会发现存在

2020-06-30

flex与bison(中文版)带目录

Flex和Bison的工具书。你会找到适用于新手的修订教程和适用于高级用户的参考资料,以及对每个程序的基本用法的解释,并且运用它们创建简单、独立的应用程序。

2019-04-17

虎书(现代编译原理)课后习题答案

chapter2-chapter7的课后习题答案,每一个章节的答案不全,是老师批改作业时统计的大多数学生的问题,个别同学不具代表性的问题没有统计。 附带全书代码。

2019-04-14

空空如也

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

TA关注的人

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