自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 资源 (1)
  • 收藏
  • 关注

原创 Linux下使用函数创建一个目录——mkdir、access函数

1.access函数头文件:#include<unistd.h>作用:确定文件或文件夹的访问权限。检查某个文件的存取方式,例如:只读方式、只写方式等。如果指定的存取方式有效,则函数返回0,否则函数返回-1。函数原型:int access(const char *pathname, int mode);参数:1:路径 2:权限判断--- 在头文件unistd.h中的宏义如下: #define R_OK 4 /* Test for read permission. */ #

2020-08-31 10:40:54 2874

原创 c语言实现一个线程池——附程序demon,可编译执行

备注:线程池学习时阅读的博客连接初学线程池,在网上找了大量的文章,阅读参考后,以开头链接为模板自己写了一个demon一、线程池介绍1.线程池的应用就是为了在需要大量线程创建、销毁时提高程序的执行效率而出现的2.线程池重要的一个知识就是对队列的引用,通过读取队列的数据去执行队列中的任务,通过队列的数量判断是否需要创建、销毁线程!c语言创建队demon二、线程池demon示例#include<stdio.h>#include<stdlib.h>#include<pt

2020-08-28 15:05:52 366

原创 判断线程是否存活——pthread_kill()函数

一、pthread_kill()函数介绍1.函数作用1>pthread_kill()函数的作用是向某个线程传递一个信号2>[注意]创建的线程中使用signal(SIGKILL,sig_handler)函数去处理对应的信号,如果你给一个线程发送了SIGQUIT,但线程却没有实现signal处理函数,则整个进程退出信号的设置:signal函数2.函数原型#include <pthread.h>#include<signal.h>int pthread_ki

2020-08-27 19:07:39 5807

原创 c语言实现一个队列——数据结构

一、队列理论1.队列是一种受约束的线性表,一端插入,另一端移除数据,数据先进先出二、程序demon#include<stdio.h>#include<stdlib.h>#define QUEUE_SIZE 4 typedef struct{ char *data[QUEUE_SIZE];//存放指针的数组,队列大小是QUEUE_SIZE-1 int prev; int next;}queue_t;//1.初始化一个队列queue_t *create_

2020-08-27 14:06:56 441

原创 c语言双向链表的增、删、改、查

双向链表与单向链表相比,多了一个前驱(指向前一个节点的指针,初始化多加一个前驱指针即可)双向链表增、删、改、查demon#include<stdio.h>#include<stdlib.h>typedef struct double_list{ char* data; struct double_list *next; //后继---指向下个节点 struct double_list *prev;//前驱---指向上一个节点}d_list;typedef s

2020-08-26 18:49:47 518

原创 sqlite3提升执行速度——事务操作

数据库在执行多条操作时就会显得速度很慢,为了提升速度可以使用数据库的事务操作来提升速度一、事务介绍 事务(Transaction)是一个对数据库执行工作单元。事务(Transaction)是以逻辑顺序完成的工作单位或序列,可以是由用户手动操作完成,也可以是由某种数据库程序自动完成。 例如:在一张表中插入一条数据,删除数据,修改数据,查找数据,都是在执行事务。实际上可以把一些相同操作的事务归并在一起,最后一起提交就可以变成一个事务,大大提高了数据库执行的效率。1.事务操作分类1."begin tr

2020-08-26 16:10:11 2922

原创 sqlite3_exec()函数归纳

一、sqlite3_exec函数介绍sqlite3_exec是sqlite3的接口API函数源码API接口截图1.参数分析:int sqlite3_exec( sqlite3*, /* An open database */ const char *sql, /* SQL to be evaluated */ int (*callba

2020-08-26 14:44:52 8069

原创 c语言时间相关函数

一、timeval结构体需要头文件#include<sys/time.h>man手册截图1.通过man手册可以看到timeval结构体包含了time_t和suseconds_t俩个结构体2.使用int gettimeofday(struct timeval *tv, struct timezone *tz);函数获取当前时间3.gettimeofday——demon#include<stdio.h>#include<sys/time.h>int m

2020-08-26 12:13:53 615 3

原创 sqlite表更新添加字段——sqlite3

sqlite_master结构1.sql语句:SELECT * from sqlite_master where name = '表名' and sql like '%字段名%'//查询表中有无要添加的字段:alter table 表名 add column 字段 INTEGER default 1//在表的结尾添加新字段2.demon节选int sql_exec(sqlite3 *db, const char *sql){ int res; sqlite3_stmt *stmt = NULL

2020-08-25 18:54:42 5477

原创 sqlite线程模式——sqlite3_threadsafe、sqlite3_config的使用

sqlite一共有三种线程模式:sqlite3_threadsafe:sqlite3_threadsafe()函数的返回值可以确定编译时指定的线程模式(0-单线程模式 1-串行模式 2-多线程模式源码截图:sqlite_config:sqlite3_config()函数可以修改线程,模式(参数为:SQLITE_CONFIG_SINGLETHREAD---单线程 SQLITE_CONFIG_MULTITHREAD----多线程 SQLITE_CONFIG_SERIALIZED-----串行模式)源码

2020-08-25 15:42:36 4685 1

原创 MD5操作指令

1.生成MD5报文:md5sum filename2.将生成的MD5报文写入到md5文件md5sum filename>filename.md53.将多个文件的md5报文存放到文件中md5sum *filenam >filename.md54.验证文件内容有无变化:md5sum -c filename.md55.判断多个文件有无被修改,并写到一个文件中:md5sum -c filename.md5 > filename.md5...

2020-08-25 14:20:01 2380

原创 sqlite_master结构——sqlite3

1.sqlite_master表 sqlite_master是一个表,属于系统表,存放在根页中,每一个数据库的.db文件都有一个sqlite_master表。 sqlite_master表存放了.db中所有表的相关信息,比如:表的名称、用于创建此表的sql语句、索引、索引所属的表、创建索引的sql语句等。 sqlite_master表是只读的,只能对他进行读操作,写的操作由系统自动执行,使用者没有写的执行权限。用户对自定义表的操作多会自动同步到这个表中。2.sqlite_master结构:

2020-08-24 16:03:55 1262

原创 Linux——动态库的编译

1.创建要编译成库的源码文件和头文件头文件:#ifndef _HELLO_H_#define _HELLO_H_#include<stdio.h>void display_hello();#endif源码:#include "hello.h" void display_hello(){ printf("hello world!");}编译生成动态库:gcc hello.c -fPIC -shared -o libhello.so–fPIC:

2020-08-24 15:10:20 219

原创 MQTT开发(一)嵌入式c客户端开源项目的下载

1.官网网址:http://mqtt.org/下面是图片下载步骤1->2->3->根据具体开发需要选择相应版本的开源代码,这里博主采用的嵌入式开发方案g’ithub下载链接:https://github.com/eclipse/paho.mqtt.embedded-c以上代码就下载完成。2.代码大致介绍:以上就是在嵌入式设备上搭建c客户端用到的开源代码,其它平台可以在官网寻找...

2020-08-21 18:55:16 1035

原创 Linux下静态库的制作

一.静态库概念1.库是预编译的目标文件的集合,它们可以被链接进程序。静态库以后缀为”.a”的格式文件存在。2.标准系统库可在目录/usr/lib与/lib中找到3.2.静态库的优点:1>节约编译时间 2>可以不用提供源代码,对代码施行封装二、编译过程1.hello.cvoid display(){ printf("hello world!\n"); return;}2.hello.h#ifndef _HELLO_H_#ifdef _HELLO_H_ void

2020-08-20 17:24:08 330

原创 使用openssl实现ras-密钥创建-加密-解密(c语言)

一、下载安装过程openssl下载安装过程二、使用介绍1-使用指令实现/*********************************************************************************************1.openssl genrsa -out test.key 1024 —>生成一个密钥**2.openssl rsa -in test.key -pubout -out test_pub.ke

2020-08-20 16:14:57 3063 1

原创 openssl官网-下载安装过程

OpenSSL是一个开放源代码的软件库包,主要来保证安全通信。1.官网下载地址:https://www.openssl.org/source/2.3.安装1–>./config --prefix=/usr/local/openssl2–>make3–>make install4.动态库环境配置1–>vim /etc/ld.so.conf2–>/usr/local/openssl/lib3–>最后执行:ldconfig /etc/ld.so.con

2020-08-20 13:19:41 14577 1

原创 数据结构——冒泡算法

冒泡算法:是排序算法中的基本算法,基本概念就是逐个比较大小,由开始到末尾逐次比较,比较一次确定一个数的位置,例如数组元素个数n,则比较(n-1)+(n-2)+…+1次。demon:#include<stdio.h>void bubble_sort(int *arry,int n){ int tmp,i,j; for(i=0;i<n-1;i++) for(j=0;j<n-i-1;j++) if(arry[j]>arry[j+1]) { tmp

2020-08-18 16:51:25 827

原创 数据结构——二叉树的遍历

一、遍历二叉树按一定的规律对二叉树进行每个节点的访问,且每个节点只访问1次。遍历方案有:DLR(根左右):先序遍历,LDR(左根右):中序遍历LRD(左右根):后序遍历上诉遍历方法遵循左>右的规则,对根节点的访问进行了前、中、后三种不同的访问时间区分。//创建二叉树typedef struct node_t{ char data; struct node_t *lchild; //指向左子节点的指针 struct node_t *rchild; //指向右子节点的指针}tr

2020-08-16 17:41:45 177

原创 数据结构——树与二叉树的存储方式

一、树的存储方式1.顺序结构存储:用一组地址连续的存储单元去存放树的节点,每个节点有俩个存放数据的空间,data——存放节点的信息,parent——存放节点父节点位置如图:2.链式存储:每个节点的子节点用单链表的方式存储起来,称为子链表,这样存储的话,n个节点就有n个链表二、二叉树的存储方式1.顺序存储结构(从上到下,从左到右)图例:2.链式存储1.链式存储结构://二叉链表typedef struct tree_node{ data_t data;//数据 struct t

2020-08-16 16:52:53 1960

原创 数据结构——什么是树和二叉树

一、树的定义树:n(>=0)个节点的有限集,当n=0时为空树(没有根节点)非空树特点:1.只有一个根节点2.当节点数n>1时,其他的节点可分为m(>0)个没有交集的集合,每一个单独的集合都是一个树(子树)。下图是一个简单的树形结构其中根节点是A,B、E是A的子节点,同时以B、E为父节点的是子树二、树的形容1.节点的度数:一个节点拥有子树的大小称为节点的度(如图上A节点的度是2,拥有2个子树)2.树的度:树的度是取节点中节点最大的度为树的度(上图节点最大是2,所以树的度是

2020-08-16 15:22:59 594

原创 sqlite数据库——select查询

sql语句:1.select count(*) FROM student//查询表中数据行数2.SELECT sex,student_number FROM student where name=?//查询名字为《要查的名字》的性别,学号查询demon//查找表中所有学生人数#define SELECT_STUDENT_MSG "select count(*) FROM student"//查找某个学生的信息#define SELECT_STUDENT_NAME "SELECT sex,st

2020-08-14 18:32:04 3270

原创 sqlite数据库更新过程

1.sqlite语句:update student(表名) set student_number(列名)=?,sex(列名)=? where name(列名)=?2.更新代码://更新学生信息#define UPDATE_STUDENT_MSG "update student set student_number=?,sex=? where name=?;"void update_student_msg(int student_number,char *sex,char *name){ int

2020-08-14 13:52:34 2695

原创 base64编码解码讲解

一、base64base64是一种对字符通过二进制进行编码解码转换的一种编码算法,便于在不同环境间通信,规避了乱码的出现。base64算法:1->字符串转换为三个字节一组,不足三个字节时用“=”补全2->然后将一组三个字节的数据转换为4组6位的数据3->转换后的每个6为数据对应base64数组的元素的位置unsigned char base64[64]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz012345678

2020-08-13 18:38:50 4069

原创 ASCII值与字符间的转换

ASCII表【图片摘自网上】demon1【打印hello的ASCII值】:#include<stdio.h>int main(){ char a[10]="hello\0"; printf("=h->%d |=e->%d |=l->%d |=l->%d |=o->%d\n",a[0],a[1],a[2],a[3],a[4]); return 0;}运行结果:demon2:字符转ASCII值#include<stdio.h

2020-08-12 19:14:27 1372 2

原创 pthread_cond_broadcast与pthread_cond_signal的区别——linuxc

pthread_cond_signal——唤醒睡眠的线程,一次只能唤醒一个线程pthread_cond_broadcast——唤醒睡眠的线程,一次唤醒所有睡眠的线程demon1——pthread_cond_signal#include <stdio.h>#include <pthread.h>static pthread_t thread1;static pthread_t thread2;//静态初始化static pthread_mutex_t lock=PT

2020-08-11 16:05:10 1578

原创 c++——函数模板

一、函数模板我们定义一个函数void function(int x);如果后面想把参数int型换位float型,我们需要重新定义一个函数将参数定义为void function(float x);,如果使用函数模板则可以轻松解决这一个囧境,只需要定义一个模板即可不要重复定义函数模板函数示例#include<iostream>using namespace std;/*模板类*/template <typename AnyType>void Swap(AnyType &a

2020-08-10 19:01:40 109

原创 c++——函数重载(多态)

一、什么是函数重载函数重载是c++在C语言基础上新增的功能。函数重载又称函数多态,就是能够使用多个同名的函数,同时可以实现函数的多种形式。函数重载的关键是函数的参数列表(函数特征标),如果俩个函数的参数数目和类型相同,同时参数的排列顺序也相同,则它们的特征标相同。c++允许定义相同名称的函数,前提条件是它们的特征标不同。//函数重载例子,下面三个函数的特征标不同void printf(int a,char b);//1void printf(int a,float b);//2void print

2020-08-10 18:32:28 1265

原创 c++——引用

一、什么是引用先看一小段代码#include<iostream>using namespace std;int main(){ int a=10; int & b=a; cout<<"a="<<a<<" b="<<b<<endl; return 0;}这里c++将“&”赋予了新的功能引用,这里int &指向int的引用,同int * 指向int的指针一样。二、引用后交换只交换别名

2020-08-09 16:29:16 129

原创 c++——结构体应用

一、c++结构初始化c++结构体的初始化相比较于c语言可以使用外部结构声明struct school{ char name[20]; int age; float score;};//结构体赋值school student1= { "张三",//name 18,//age 89.9//score };school student2 {"李四",18,90.0};//student3的成员全被置0school student3 {};二、结构体间赋值s

2020-08-09 15:36:33 436

原创 使用cJSONG解析一个json

demon如下#include <stdio.h>#include "cJSON.h"char *creat_json(){ char *creat_json = NULL; cJSON *json=NULL; cJSON *province=NULL; cJSON *twcityArray=NULL; /*1.初始化*/ //创建一个json对象,返回一个cJSON结构体类型的指针。 json=cJSON_CreateObject(); //创建一个json对

2020-08-09 14:21:58 145

原创 用cJSON创建一个json

创建如下结构:{ "country": "中国", "province": { "name": "台湾", "city": ["台北", "高雄"] }}demon如下#include <stdio.h>#include "cJSON.h"int creat_json(){ char *creat_json = NULL; cJSON *json=NULL; cJSON *province=NULL; cJSON *twcityArray; /*1

2020-08-07 17:41:35 557

原创 cJSON下载使用过程

JSON(JavaScript Object Notation)是一种轻量级的文本数据交换格式,易于让人阅读。在嵌入式应用中因简洁实用性比较高,与web端通信交流时是一种不错的文本解析工具一、下载链接:https://sourceforge.net/projects/cjson/...

2020-08-07 15:48:08 2535

原创 linux内核目录分析

内核源代码目录结构1.arch目录:包含硬件体系结构相关的代码,每种平台占一个目录,如arm、mips、x86等,截图如下2.block目录:块设备驱动程序IO调度3.crypto目录:存放一些常用算法4.Documentation目录:内核的各个部分的注释5.drivers目录:设备驱动程序6.fs目录:支持的各种不同的文件系统7.include目录:存放头文件的目录8.init目录:内核初试化代码9.ipc目录:进程间通信的代码10.kernel目录:内核核心部分

2020-08-02 21:04:56 220

原创 c++ string类简介

一、string类介绍string类位于std名称空间中,使用时std::string来引用,或者生命std的命名空间using namespace std,使用时可以省略std::。1.string简单的使用demon#include<iostream>#include<string>int main(){ using namespace std; char array[20]; char array1[20]="hello"; string str1; s

2020-08-02 19:00:45 404

原创 c语言线程唤醒机制——pthread_cond_wait

一、pthread_cond_wait()唤醒函数讲解1.函数原型讲解头文件#include <pthread.h>函数int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);函数功能:实现线程的睡眠参数1:条件锁参数2:互斥锁二、程序demon#include <stdio.h>#include <pthread.h>pthread_t atte

2020-08-02 15:32:09 4329 2

原创 c语言使用lseek获取文件大小——Linux文件IO

一、lseek函数1、头文件 #include <sys/types.h> #include <unistd.h>2、函数原型off_t lseek(int fd, off_t offset, int whence);功能:重新定位与该文件相关联的打开文件的偏移量描述符fd到参数根据指令的偏移量参数1:打开的文件描述符参数2:偏移量参数3:1>SEEK_SETThe offset is set to offset bytes.(设置便宜字节)2&g

2020-08-02 14:13:25 2017

数据库插入速度提升的demon

此程序demon验证了sqlit3数据插入速度的提升方法,使用事务操作大幅度提升了数据插入的效率,可以下载参考,程序可以编译运行,gcc -sqlite_master.c -lsqlite3

2020-08-26

空空如也

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

TA关注的人

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