05 2020 档案

摘要:Go汇编初识 对于每一个严肃的Gopher,Go汇编语言都是一个不可忽视的技术。因为哪怕只懂一点点汇编,也便于更好地理解计算机原理,也更容易理解Go语言中动态栈/接口等高级特性的实现原理。而且掌握了Go汇编语言之后,你将重新站在编程语言鄙视链的顶端,不用担心再被任何其它所谓的高级编程语言用户鄙视。 阅读全文
posted @ 2020-05-31 17:55 Binb 阅读(1146) 评论(0) 推荐(0) 编辑
摘要:CGO 编译和链接参数 编译和链接参数是每一个C/C程序员需要经常面对的问题。构建每一个C/C应用均需要经过编译和链接两个步骤,CGO也是如此。 本节我们将简要讨论CGO中经常用到的编译和链接参数的用法。 编译参数:CFLAGS/CPPFLAGS/CXXFLAGS 编译参数主要是头文件的检索路径,预 阅读全文
posted @ 2020-05-30 20:55 Binb 阅读(3902) 评论(0) 推荐(0) 编辑
摘要:CGO静态库和动态库 CGO在使用C/C资源的时候一般有三种形式:直接使用源码;链接静态库;链接动态库。直接使用源码就是在import "C"之前的注释部分包含C代码,或者在当前包中包含C/C源文件。链接静态库和动态库的方式比较类似,都是通过在LDFLAGS选项指定要链接的库方式链接。本节我们主要关 阅读全文
posted @ 2020-05-30 20:46 Binb 阅读(6268) 评论(1) 推荐(0) 编辑
摘要:C++ 类包装 CGO是C语言和Go语言之间的桥梁,原则上无法直接支持C的类。CGO不支持C语法的根本原因是C至今为止还没有一个二进制接口规范(ABI)。一个C类的构造函数在编译为目标文件时如何生成链接符号名称、方法在不同平台甚至是C的不同版本之间都是不一样的。但是C是兼容C语言,所以我们可以通过增 阅读全文
posted @ 2020-05-30 17:58 Binb 阅读(496) 评论(0) 推荐(0) 编辑
摘要:CGO内存模型 CGO是架接Go语言和C语言的桥梁,它使二者在二进制接口层面实现了互通,但是我们要注意因两种语言的内存模型的差异而可能引起的问题。如果在CGO处理的跨语言函数调用时涉及到了指针的传递,则可能会出现Go语言和C语言共享某一段内存的场景。我们知道C语言的内存在分配之后就是稳定的,但是Go 阅读全文
posted @ 2020-05-30 16:51 Binb 阅读(828) 评论(0) 推荐(0) 编辑
摘要:qsort快速排序函数是C语言的高阶函数,支持用于自定义排序比较函数,可以对任意类型的数组进行排序。本节我们尝试基于C语言的qsort函数封装一个Go语言版本的qsort函数。 认识qsort函数 qsort快速排序函数有<stdlib.h>标准库提供,函数的声明如下: void qsort( vo 阅读全文
posted @ 2020-05-30 09:19 Binb 阅读(454) 评论(0) 推荐(0) 编辑
摘要:CGO内部机制 CGO生成的中间文件 要了解CGO技术的底层秘密首先需要了解CGO生成了哪些中间文件。我们可以在构建一个cgo包时增加一个-work输出中间生成文件所在的目录并且在构建完成时保留中间文件。如果是比较简单的cgo代码我们也可以直接通过手工调用go tool cgo命令来查看生成的中间文 阅读全文
posted @ 2020-05-29 20:23 Binb 阅读(611) 评论(0) 推荐(0) 编辑
摘要:CGO函数调用 函数是C语言编程的核心,通过CGO技术我们不仅仅可以在Go语言中调用C语言函数,也可以将Go语言函数导出为C语言函数。 Go调用C函数 对于一个启用CGO特性的程序,CGO会构造一个虚拟的C包。通过这个虚拟的C包可以调用C语言函数。 package main /* static in 阅读全文
posted @ 2020-05-29 13:57 Binb 阅读(1645) 评论(0) 推荐(0) 编辑
摘要:#类型转换 最初CGO是为了达到方便从Go语言函数调用C语言函数(用C语言实现Go语言声明的函数)以复用C语言资源这一目的而出现的(因为C语言还会涉及回调函数,自然也会涉及到从C语言函数调用Go语言函数(用Go语言实现C语言声明的函数))。现在,它已经演变为C语言和Go语言双向通讯的桥梁。要想利用好 阅读全文
posted @ 2020-05-29 11:12 Binb 阅读(1923) 评论(0) 推荐(0) 编辑
摘要:#CGO基础 要使用CGO特性,需要安装C/C++构建工具链,在macOS和Linux下是要安装GCC,在windows下是需要安装MinGW工具。同时需要保证环境变量CGO_ENABLED被设置为1,这表示CGO是被启用的状态。在本地构建时CGO_ENABLED默认是启用的,当交叉构建时CGO默认 阅读全文
posted @ 2020-05-28 21:07 Binb 阅读(1143) 评论(0) 推荐(0) 编辑
摘要:share/share.go /****** ** @创建时间 : 2020/5/25 20:26 ** @作者 : SongZhiBin ******/ package share import ( "fmt" "net/http" "net/http/httputil" "net/url" "o 阅读全文
posted @ 2020-05-26 13:58 Binb 阅读(519) 评论(0) 推荐(0) 编辑
摘要:中间件是一种计算机软件,可为操作系统提供的软件应用程序提供服务,以便于各个软件之间的沟通,特别是系统软件和应用软件。广泛用于web应用和面向服务的体系结构等。 纵观GO语言,中间件应用比较普遍,主要应用: 记录对服务器发送的请求(request) 处理服务器响应(response ) 请求和处理之间 阅读全文
posted @ 2020-05-16 23:12 Binb 阅读(478) 评论(0) 推荐(0) 编辑
摘要:runtime.SetFinalizer func SetFinalizer(obj interface{}, finalizer interface{}) SetFinalizer sets the finalizer associated with obj to the provided fin 阅读全文
posted @ 2020-05-16 17:29 Binb 阅读(3278) 评论(0) 推荐(0) 编辑
摘要:ARM基础 ARM主要有7个基本工作模式 User:非特选模式,大部分任务执行在这种模式 FIQ:当一个高优先级(fast)中断产生时会进入这种模式 IRQ:当一个低优先级(normal)中断产生时将会进入这种模式 Supervisor:当复位或软中断指令时将会进入这种模式 Abort:当存取异常时 阅读全文
posted @ 2020-05-12 16:39 Binb 阅读(425) 评论(0) 推荐(0) 编辑
摘要:基于嵌入式的数据库 基于嵌入式Linux的数据库主要有SQLift,Firebird,Berkeley DB,eXtremeDb Friebird是关系型数据库,功能强大,支持存储过程,SQL兼容等 SQLite关系型数据库,体积小,支持ACID事务 Berkeley DB中并没有数据库服务器的概念 阅读全文
posted @ 2020-05-11 21:46 Binb 阅读(499) 评论(0) 推荐(0) 编辑
摘要:软件下载 https://www.wireshark.org/#download 选择对应的版本下载 mac装了Wireshark,一直以来使用都没有遇到问题,电脑系统升级后再次使用时,无论选择有线还是无线网卡,均抓包失败,弹出提示“the capture session could not be 阅读全文
posted @ 2020-05-10 19:20 Binb 阅读(463) 评论(0) 推荐(0) 编辑
摘要:IO模型 在UNIX/Linux下主要有4种I/O模型 阻塞I/O(最常用) 非阻塞I/O(可防止进程阻塞在I/O操作上,需要轮询) I/O多路复用(允许同时对多个I/O进行控制) 信号驱动I/O(一种异步通讯模型) 阻塞I/O模式 阻塞I/O模式是最普遍使用的I/O模式,大部分程序使用的都是阻塞模 阅读全文
posted @ 2020-05-10 18:15 Binb 阅读(416) 评论(0) 推荐(0) 编辑
摘要:大家都知道slice是一个引用类型,废话不多说,上代码 func test(res [][]int) { res[0] = []int{2,2,2,2} res[1][0] = 3 } func main() { res := [][]int{[]int{1,1,1,1},[]int{2,2,2,2 阅读全文
posted @ 2020-05-10 10:51 Binb 阅读(344) 评论(0) 推荐(0) 编辑
摘要:一、相关函数 函数描述 int socket(int family, int type, int protocol); 位于:<sys/socket.h>;功能:创建一个网络套接字 ;返回:成功返回一个非负数的描述符,出错返回-1。 family:AF_INET(ipv4) | AF_INET6(i 阅读全文
posted @ 2020-05-09 18:00 Binb 阅读(566) 评论(0) 推荐(0) 编辑
摘要:线程概念 进程: 进程有独立的地址空间 Linux为每个进程创建task_structt 每个进程都参与内核调度,互不影响 线程: 进程在切换时系统开销大 很多操作系统引入轻量级进程LWP 同一进程中的线程共享相同地址空间 linux不区分进程、线程 线程资源 共享资源 可执行的命令 静态数据 进程 阅读全文
posted @ 2020-05-08 15:36 Binb 阅读(490) 评论(0) 推荐(0) 编辑
摘要:进程的概念 程序 存放在磁盘上的 指令和数据的有序集合(文件) 静态的 进程 执行一个程序所分配的资源总称 进程是程序一次执行过程 动态的,包括创建、调度、执行和消亡 进程控制块(pcd) 进程标识PID 进程用户 进程状态、优先级 文件描述符表 进程类型 交互进程:在shell下启动。以在前台运行 阅读全文
posted @ 2020-05-07 20:55 Binb 阅读(477) 评论(0) 推荐(0) 编辑
摘要:库的概念 库是一个二进制文件,包含的代码可被程序调用 标准C库、数学库、线程库...... 库有源码,可下载后编译;也可以直接安装二进制包 库的知识 库是事先编译好的,可以复用的代码 在os上运行的程序基本上都要使用库。使用库可以提高开发效率 Windows和Linux下库文件格式不兼容 Linux 阅读全文
posted @ 2020-05-07 14:40 Binb 阅读(182) 评论(0) 推荐(0) 编辑
摘要:文件基础 概念: 一组相关数据的有序集合 文件类型 不同操作系统支持的文件类型是不相同的,这里列出的是linux 常规文件 r 目录文件 d 字符设备文件 c 块设备文件 b 管道文件 p 套接字文件 s 符号链接文件 l 标准I/O 由ANSI C标准定义 主流操作系统上都实现了C库 特点: 标准 阅读全文
posted @ 2020-05-07 08:25 Binb 阅读(227) 评论(0) 推荐(0) 编辑
摘要:树的基本概念 树满足以下特点 有且仅有一个特定的称为根(Root)节点 其余的节点可以分为m(m>=0)个互不相交的有限集合T1、T2、.....Tm,其中每一个集合又是一棵树,并称为其根子树(Subtree) 一个节点的子树的个数称为该节点的度数,一棵树的度数是指该数中节点的最大度数 度数为零的节 阅读全文
posted @ 2020-05-05 13:46 Binb 阅读(532) 评论(0) 推荐(0) 编辑
摘要:cmd -> $ netsh wlan show profiles // 会弹出电脑已经连接过的wifi名称。 $ netsh wlan show profile name="wifi名称"(可换成wifi名称)key=clearnetsh 找到安全设置-关键内容,后方就是wifi密码。 阅读全文
posted @ 2020-05-04 14:29 Binb 阅读(188) 评论(0) 推荐(0) 编辑
摘要:线性表的定义 线性表就是零个或多个相同数据元素的有限序列 线性表特征(假设a为一张线性表) 对非空表,a[0]是表头,无前驱 a[n-1]是表尾,无后继 其它的每个元素a[i]有且仅有一个直接前驱a[i-1]和一个后继a[a+1] 线性表的基本运算(假设L为一张线性表) 建立一个空表:Createl 阅读全文
posted @ 2020-05-02 15:21 Binb 阅读(258) 评论(0) 推荐(0) 编辑
摘要:数据结构基本概念 数据结构是研究组成数据的数据元素的关系学科 数据结构研究的目的 通过研究数据元素的关系,帮助我们在开发软件的时候更好的组成数据模型,让数据在你内存中的操作更加的流畅 基本概念 数据 数据即信息的载体,是能够输入到计算机中并且能被计算机识别、存储和处理的符号总称 数据元素 数据元素是 阅读全文
posted @ 2020-05-02 11:42 Binb 阅读(219) 评论(0) 推荐(0) 编辑
摘要:command(指令) [-options(选项)] arg(参数) agr2 ... // 一条指令的三要素之间要用空格隔开 // 多个命令要使用`;`隔开 // 如果一条命令不能再一行写完,在行尾使用`\`标明该条指令未结束 Tab键 // 按一下tab键表示文件名补齐 // 按两下tab键表示 阅读全文
posted @ 2020-05-02 10:26 Binb 阅读(456) 评论(0) 推荐(0) 编辑
摘要:shell脚本 变量 shell允许用户建立变量存储,但不支持数据类型(所有数据只认为是字符串)"="号左右不能有空格变量尽量大写,便于区分 声明: KEY=value KEY2=`命令` // 动态转换 命令置换 KEY3=$KEY 输出: echo $KEY 删除变量赋值 unset unset 阅读全文
posted @ 2020-05-02 10:22 Binb 阅读(242) 评论(0) 推荐(0) 编辑
摘要:Make简介 工程管理器,顾名思义是指管理较多的文件 Make工程管理器也就是个"自动编译管理",这里的"自动"是指它能够根据文件时间戳自动发现更新过的文件而减少编译的工作量,同时,它能够读入Makefile文件的额内容来执行大量的编译工作 Make将只编译改动的代码文件,不用完全编译 Makefi 阅读全文
posted @ 2020-05-01 19:34 Binb 阅读(250) 评论(0) 推荐(0) 编辑
摘要:存储类别 auto auto说明的变量只能在某个程序范围内(局部)使用,通常在函数体内或函数中的复合语句里。(默认是随机值),在函数体的额某程序段内说明auto存储类型的变量一般省略关键字auto,如下: auto int k; int j; double x; register register称 阅读全文
posted @ 2020-05-01 17:52 Binb 阅读(230) 评论(0) 推荐(0) 编辑
摘要:补充知识点:条件编译 根据宏是否定义 #ifdef <macro> // ... #else // ... #endif // Demo: #define _DEBUG_ int main(int argc, const char *argv[]) { #ifdef _DEBUG_ printf(" 阅读全文
posted @ 2020-05-01 14:10 Binb 阅读(435) 评论(0) 推荐(0) 编辑