自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

编码人生

太初有思,不止索思

  • 博客(46)
  • 资源 (4)
  • 收藏
  • 关注

原创 Linux C/C++解析xls

libxls作为开源库,支持在Linux C/C++ 环境下解析(读)xls文件,github提供了源码:https://github.com/libxls/libxls但是github的源码需要一堆辅助工具,才能够编译出libxls的C静态库,因此琢磨了下手动编译libxls的静态库/动态库方法,可以摆脱辅助工具缺失乃至版本问题导致的抓狂,尤其适合不方便联网的内网开发环境。将fuzz、src、include目录下所有文件拷贝到一个目录下,修改*.c和*.h文件中指定的include文件路径为当

2021-11-09 10:03:21 2401

原创 flex和bison实例分析

创建test.l文件,编写词法分析规则%{ #include <stdio.h> #include "test_yacc.h" //因为使用了bison在test_yacc.h中自动生成的token枚举 extern int yylval; //yylval定义在bison库中%}number [0-9]%%{number}+ { yylval = atoi(yytext); printf("number: %d ...

2021-01-06 20:43:10 2344

原创 Flex程序编译

Makefile三要素:目标、依赖、命令详解可见https://blog.csdn.net/lzb19890920/article/details/88432116Makefile中常用函数和自动化变量:wildcard-扩展通配符例:OBJECTS=$(wildcard *.o)该找到目标文件下的所有后缀为.c的文件名并将它们全都赋给OBJECT(即,OBJECT是.o文件的集合,并且这个函数中的OBJECTS是个任意命名的变量,但是$(wildcard .o)是这个实现找出.o文件的Mak

2021-01-04 20:32:21 799

原创 shell脚本实现C程序日志分流和多Terminal显示

日志打印是软件必需的功能,通常C程序会将所有运行日志输出到指定LOG。 一、有时候需要在C程序运行期间查看实时日志,最好地,可以根据关键字筛选自己想要查看的内容。 二、有时候,希望另开Terminal去查看日志,而不是使用当前的Terminal。 实时筛选流,利用tail命令可以实现,流显示则可以用tee命令;Linux设备自启Terminal窗口,利用gnome-terminal命令实现(在gnome集成桌面环境)。关于tail命令 tail -f filename...

2020-12-10 19:41:55 368

原创 shell脚本的命令行传参

在Linux环境下开发C程序,若想要可选择性的给程序传递外部参数,最后是以启动脚本的形式间接进行传递,这样对于命令行的参数解析工作将集中到shell脚本中,大大增加C代码的可移植性。shell脚本给C程序传参最常用的方法有两种,在执行C程序时使用命令行传参,要求命令行参数的位置固定(在C程序中不加入额外参数标识解析模块情况下),另外一种方法相对灵活,即使用环境变量的方式进行传参。针对以上方法,举一个简单例子:#!/bin/shECHO="echo"FPARG="-p"FSARG="-s"F

2020-12-09 17:35:28 2045 2

原创 SSH服务器管理与Termux使用

×××××××××××××××××××××SSH服务器安装及使用×××××××××××××××××××××MobaXterm常用的登录方式是SSH服务器,在Ubuntu终端上可以架设SSH服务器sudo apt-get updatesudo apt-get install openssh-serverservice sshd start/etc/init.d/ssh startsudo...

2020-03-07 19:27:18 1210

原创 Linux镜像USB转网口驱动模块配置

最近在调试USB转网口,涉及到Linux内核编译配置文件的更改,记录一下调试过程。首先需要了解USB设备接入后系统的识别信息,打印内核日志:root@MyDevice:/# dmesg | tail -20[ 5364.325642] usb 1-1.1: new high-speed USB device number 5 using xhci-hcd[ 5364.426138] ...

2019-11-19 15:23:36 6492 1

原创 Android系统的命令行操作及C程序编译

在Android系统执行C程序,需要使用Android系统的专用编译器NDK,下载NDK工具可以通过以下博文中给出的链接:https://blog.csdn.net/baidu_35904821/article/details/62218559Android API与版本对应关系:https://www.jianshu.com/p/27711d61f221除了使用封装好UI界面的A...

2019-11-16 15:51:37 583

原创 Linux网络编程实例分析

最近由于工作原因需要温习一下Linux网络编程的部分基础知识,因此对之前写的Socket网络通信的代码进行了进一步优化和拓展,在不关闭一次Socket连接的基础上,对服务端加入循环读写的功能,同时加入连接检测函数,防止客户端意外断开(例如Ctrl + C杀掉客户端程序),服务端程序陷入死循环。增加客户端退出命令(服务端亦接收此命令),增加客户端执行服务端程序的命令,这里主要用到了strncasec...

2019-11-15 20:33:49 372 1

原创 Ubuntu解决开机屏幕默认亮度偏低问题

在windows笔记本上安装了Ubuntu的双系统,但是每次启动Ubuntu时默认亮度都是置位很低,在系统设置中更改亮度后开机又会恢复为默认亮度值。在网上找各种方法,其中ttps://blog.csdn.net/WindsInHust/article/details/8469633提到的方法似乎应该有用,但是在给予Intel内核的双系统”sys/class/backlight/“目录下找不到配...

2019-09-21 00:28:58 1207

原创 Git/Ctags/Vim/GDB基础笔记

--------------------------------------------------git使用--------------------------------------------------git add file############增加新的文件跟踪,以及将修改后的文件放入暂存区git status -uno############查看被跟踪文件的修改情况git ...

2019-09-12 17:37:09 251 1

原创 Makefile和Shell学习笔记

Makefilemakefile定义了一系列的规则来指定文件的编译过程和一些复杂的功能操作。makefile带来的好处就是——“自动化编译”,通过make命令,整个工程完全自动编译,极大的提高了软件开发的效率。makefile默认从第一个target开始执行command命令,如果后面的target不是第一个target的子程序或者子程序的后续程序,就不会在make命令下执行,需要使用ma...

2019-09-12 17:35:57 282

原创 快捷操作辑录

------------------------------------------VS Code-----------------------------------------------如果需要删除某些包含目标字段的行,可以先用鼠标选中任何一个目标字段,之后使用Ctrl+Shift+L匹配并选中数据表中所有目标字段,最后使用Ctrl+Shift+K删除包含目标字段的所有行。-----...

2019-05-21 11:38:05 131

原创 Windows下Eclipse配置基于MinGW的C/C++开发环境

Eclipse安装CDT及其他插件的方法1.搜索CDT线上安装地址进入Ecllipse插件下载官网https://www.eclipse.org/cdt/downloads.php,在官网页面列表显示了很多的版本的插件:2.线上安装插件复制最新版本的CDT的下载链接,在Ecllipse中进入菜单 -&gt; Help -&gt; Install New Software... ...

2019-01-13 21:47:28 9126 4

原创 Android客户端开发—开源数据库框架LitePal

LitePal是一款开源的Android数据库框架,采用对象关系映射(ORM)模式,将常用的数据库功能进行封装,不使用SQL语句就可以完成创建表以及表单的CRUD操作,并且很轻量级,几乎零配置。(它将开发中常用的一些数据库功能进行了封装,因此可以在不使用SQL语句的情况下实现对数据库的CRUD操作。)依然,以MPD数据解析为例,后面可以发现之前建立的Representation正好是LiteP...

2019-01-08 16:42:07 480

原创 Android客户端开发—数据库SQLite基本语句

之前接触过一点MySQL数据库方面的知识,现在在学习Android软件开发过程中发现SQLite语句与MySQL的语句还是有部分不同,SQLite中的命令不算太多,可以在adb shell中进入App的data文件,之后执行sqite3 数据库名,进入到sql命令行界面查询SQLite的基本命令,输入".help"得到命令与句列表:sqlite&gt; .help.backup ?...

2019-01-07 16:41:02 852

原创 DASH流媒体MPD文件存储

Android中常见的持久化数据存储方法有三个:文件存储、SharedPreferences存储和数据库存储。文件存储的核心思想是将数据按照streaming的形式保存到本地,这点与C++有共通点。写一个利用文件存储数据的简单实例,重新定义《MPD解析模块在Android中的实现》中提到的parseXMLWithPull(String xmlData)方法,在showResponse()后接着调用...

2019-01-04 21:19:52 854

原创 解决Android Studio中DDMS缺少File Explore视窗的方法

在升级Android Studio3.0之后,最近用到SharedPreferences存储数据,想查看数据文件,发现进入DDMS后的File Explorer视窗居然直接没有了,在网上查找解决方法,各种下载ddmlib.jar巴拉巴拉的方法,Tools-&gt;Android-&gt;Android Device Monitor-&gt;File Explorer查看DDMS版本25.2.2。...

2019-01-03 21:32:49 540 3

原创 Android客户端多线程实例分析

Java中实现多线程主要有两种方式:继承Thread类、实现Runnable接口。Thread类存放于java.lang类库中,系统默认加载这个包,所以可以直接使用Thread类。class myThread extends Thread{ 属性 方法 修饰符 run(){ //激活的线程将从run()方法开始执行 要执行的代码块 } }...

2018-12-28 20:21:01 346

原创 DASH流媒体MPD文件解析

MPD文件本质是XML文件,其说明了DASH服务端流媒体视频切片的相关信息,包含分辨率,大小,帧率等等,因此在DASH客户端实现的第一步便是解析服务端的MPD文件,其常见结构如图所示:MPD文件来源https://dash.akamaized.net/akamai/bbb_30fps/bbb_30fps.mpd例如需要解析出的Representation中的id,width和heigh...

2018-12-19 18:55:45 3339 4

转载 内存中的堆和栈

一般认为在c中分为这几个存储区 1.栈 - 有编译器自动分配释放 ;2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 ;3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块 区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域; -&gt; 程序结束释放 4.另外还有一个专门放常量的地方; - &gt;程序结束释放...

2018-11-12 11:01:17 280

转载 C++中的Lambda表达式

转载自https://www.cnblogs.com/DswCnblog/p/5629165.html--------------------------------------------------------------------------------------C++11的一大亮点就是引入了Lambda表达式。利用Lambda表达式,可以方便的定义和创建匿名函数。对于C++这门...

2018-11-10 23:08:17 245

转载 return与exit()

1.return是C语言提供的,exit()是操作系统提供的(或者函数库中给出的)。exit()是一个库函数,通常情况:exit(0)表示程序正常,exit(1)和exit(-1)表示程序异常退出,exit(2)表示表示系统找不到指定的文件。在整个程序中,只要调用exit()就结束(当前进程或者在main()时候为整个程序)。在stdlib.h中exit()函数是这样子定义的:void exit(...

2018-11-09 21:54:15 186

转载 关于Socket通信客户端是否需要绑定端口号

参见http://blog.chinaunix.net/uid-23193900-id-3199173.html无连接的socket的客户端和服务端以及面向连接socket的服务端通过调用bind函数来配置本地信息。使用bind函数时,通过将my_addr.sin_port置为0,函数会自动为你选择一个未占用的端口来使用。Bind()函数在成功被调用时返回0;出现错误时返回"-1"并将errn...

2018-11-08 18:11:09 21151

原创 Socket通信之操作系统的字节序和位数

关于Socket通信过程中字节序在网络编程里,网络字节序是big-endian的,而大部分的PC的系统都是X86处理器系列,X86采用的是little-endian,所以需要将网络数据流转换成本地数据流的话,需要进行字节序的转换。标准库里提供了hlton()和nthl()两个函数来支持转换。hston(unsigned short), hlton(unsigned long) 将本地...

2018-11-08 16:40:12 1098

转载 位序、字节序、类型序

计算机学科中的很多问题,都是因为概念的抽象模糊,导致理解上的不确定性,增加学习领悟的难度。对于计算机中数据存放次序的问题,很多教材或文章要么含糊其辞,要么凭空飞来结论,让人看的一头雾水。几经周折,结合多篇文章,对内存中数据存放次序终于有了较深入的理解,现记录如下:一、几个概念:        1.内存中关于数据的存放顺序有三个层次(即三种不同的视角):                 ...

2018-11-06 21:58:56 3754

原创 初识Linux C线程

线程与进程进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位,线程在某种程度上可以看做轻量级的进程。每个进程都有独立的代码和数据空间,程序间的切换会有较大开销;同一组线程可以共享代码和数据空间,每个线程仍具有自己独立的运行栈和程序计数器,程序之间切换的开销也较小。由于线程共享进程地址空间的所有资源,所以线程之间的通信很方便;多个线程处理不同人物,增加了程序的并发性,是程...

2018-11-06 16:51:50 153

转载 Linux进程通信中IPC对象——IPC_PRIVATE与ftok

在linux中,可以使用IPC对象来进行进程间通信。IPC对象存在于内核中,多进程可以操作同一个IPC对象。每个IPC对象都有一个唯一的编号,该编号是由系统分配的。那么不同的进程如何知道这个编号,进而通过它进行通信呢?下面以共享内存为例,进行分析。方法一:通过ftok函数,产生相同的键值。假设,进程p1创建了共享内存。可以在创建时,调用ftok函数,得到一个key值,调用shmget函数,...

2018-11-05 17:43:07 861

转载 Linux文件中的stat结构

结构体statLinux文件系统以块为单位存储信息,为了找到某一个文件所在的存储空间的位置用一个数据结构来对每个文件进行索引,而stat显示的就是该结构体信息,下面我们可以来看下这个结构体。struct stat {        mode_t     st_mode;       //文件对应的模式,文件,目录等        ino_t      st_ino;       /...

2018-11-03 20:05:26 899

原创 Linux下进程通信知识点学习笔记(一)

4种主要事件导致进程创建:系统的初始化; 执行了正在运行的进程所调用的进程创建系统调用; 用户请求创建一个进程; 一个批处理作业的初始化;进程的终止:正常退出; 出错退; 严重错误; 被其他进程杀死;当编译器给定程序的编译工作之后,编译器执行一个系统调用,通知操作系统它的工作已经完成,在unix/linux系统中调用的是exit()。进程的状态:运行态,就绪态,阻塞态;...

2018-11-03 16:51:43 364

原创 整数求因数算法

对一个整数求因数的计算在编程题中比较常见,还有在求出因数后对因数构成的数组再进行操作。例如,求一个整数的所有因数的求和结果,若是求和结果等于该整数,称这个整数为“完全数”,现在需要对输入的一个整数进行判断。首先是确定整数应该测试因数的范围,最直观的是将整数num依次循环除以2~num-1所有数,挑出余数为0的数。事实上,这样测试使循环次数增加了,例如32=4*8,只需要测试出4,就已经知道8也满足...

2018-09-02 13:03:19 8261

原创 数组排序问题

牛客网上有一道很典型的数组排序问题:先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉。然后再把这些数从小到大排序(同一个测试用例里可能会有多组数据,希望大家能正确处理)。我的做法比较常规:先存储数组,然后去重,之后排序输出。编写代码:#include&lt;iostream&gt;#include&lt;algorith...

2018-08-20 13:16:06 1740

原创 字符串排序问题

 题目描述:编写一个程序,将输入字符串中的字符按如下规则排序。规则1:英文字母从A到Z排列,不区分大小写。如,输入:Type 输出:epTy规则2:同一个英文字母的大小写同时存在时,按照输入顺序排列。如,输入:BabA 输出:aABb规则3:非英文字母的其它字符保持原来的位置。如,输入:By?e 输出:Be?y 输入:A Famous Saying: Much Ad...

2018-08-18 11:22:33 1782

原创 字符串去重、统计不同字符种类数问题

1、编写一个函数,计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127),不在范围内的不作统计。#include &lt;iostream&gt;#include &lt;string&gt;using namespace std;int main(){ string str; int m,len,count=1; int flag = 0;...

2018-08-17 13:43:11 1303

原创 C/C++在不确定输入字符串长度情况下,对其进行存储和字符操作问题

在很多IT公司的编程笔试题中都会提到,输如长度未知的字符串以及整数数组进行各种操作,本文进行简单地归纳。对于输入一行随意大小的(中间不含空格)字符串求其长度并输出指定位上字符,用C++可以编程为:#include &lt;iostream&gt;#include &lt;string&gt;#include &lt;cstring&gt;using namespace std;...

2018-08-16 11:38:49 19598 2

原创 老实人线上笔试心得

之前投了菊厂的软件开发岗,第一道笔试题是输入长度未知的字符串,然后去重,不改变排列顺序输出字符串(字符串中不包含空格)。这一题比较简单,考虑到...

2018-08-15 22:55:14 6274

原创 涉及位操作的算法辑录

判断一个正整数X是否为2N,即是否为2的N次方(2,4,8,…)。除了使用循环语句(或者迭代)进行除2取余运算外,也可以采用位运算。考虑到2,4,8…这样的整数转化为二进制数是10,100,1000,…。如果X是2的N次方,比如2,4,8,那么X减1之后的二进制数则分别为1,11,111。与X作与运算,结果为零。利用此方法,可以写一个判断整数X是否为2的N次方的程序。#include&lt;...

2018-05-31 16:30:50 200

原创 C语言中构造随机数原理及rand()取余构造随机数方法

    在C语言中,ANSIC C程序库提供rand()函数来产生随机数。但事实上,rand()是并不是一个真正的随机数产生器,即可以预测随机序列的顺序,在默认随机种子情况下产生0~99之间的随机数,其随机序列为{83,86,77,15,……},比如以下程序:#include&lt;stdio.h&gt;#include&lt;stdlib.h&gt;int main(){ i...

2018-04-23 14:58:25 15011 7

原创 Linux C程序命令行传参

在命令行环境下,执行已编译的程序时,将命令行参数以同一行的附加参数的形式传入到要执行的程序中。C编译器允许main()函数没有参数,或者有两个参数(也有可能更多,是对标准的扩展)。一般形式为“int main(int argv;char* argv[])”,其中第一个参数argc代表命令行中字符串个数(系统以空格作为一个字符串结束的标志);第二个参数*argv[]是一个字符指针组成的数组或...

2018-04-18 15:56:00 13877

原创 C++/C语言中十进制转二进制的常见方法

用一个算法实现十进制数向二进制数转换,我们考虑得到7的二进制表示,奇数的二进制形式最后一位肯定是1,而偶数的二进制最后一位肯定是0。可以通过7%2来计算二进制最后一位数是0或者1。即对于十进制整数n而言,二进制表示的最后一位肯定可以用n%2计算出来。而为了得到二进制倒数第二位上的数字,则需要把十进制数除以2,这种对于十进制数的计算相当于把该数值的二进制位向左移了一位(可以类比计算一...

2018-04-17 10:34:40 64338 7

mips64el-linux-android-4.9.7z

放到toolchains目录下即可,可以解决Android Studio因为缺少工具链导致NDK编译不过以及AVD无法正常创建的问题,使用者注意版本和内核架构。

2019-11-16

arm-linux-androideabi-4.9.7z

NDK工具链中ARM架构的编译器工具包,放到toolchains目录下即可,使用者注意版本和内核架构。

2019-11-16

mipsel-linux-android-4.9(windows-64位)

将文件置于文件夹ndk-bundle/toolchain即可正常使用。

2018-12-02

aarch64-linux-android-4.9(windows-64位)

将文件置于android studio文件夹ndk-bundle/toolchain

2018-12-02

空空如也

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

TA关注的人

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