- 博客(22)
- 问答 (1)
- 收藏
- 关注
原创 aliyun物联网平台搭建MQTT环境
在阿里云上创建一个简单的产品和其下设备,并能使用mqtt.fx工具来测试对于此设备的topic的订阅和发布。进入到aliyun官网,并注册一个账号。在产品服务栏,进入到物联网平台。创建一个产品,先有产品后有设备。产品名称和分类可自定义。点击产品可以看到其详细信息和可执行功能接下来定义产品的功能:进入到功能定义,并添加功能:此时产品”温度获取服务”下添加了一个功能:“当前...
2019-07-28 22:52:43 2071
原创 Linux下的文件IO
大概是一年前学习的Linux文件IO,现在整理一下。Linux下一切皆文件,我们对Linux下任何设备的操作都是对文件的操作,学习了Linux驱动开发就会对“文件操作”有很强烈的感觉。Linux的虚拟文件系统给我们提供了大量的对文件进行操作的系统调用:文件描述符文件描述符(file descriptor, fd)是Linux内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是...
2019-07-27 00:11:29 343
原创 TLV自定义通信协议的编码和解析
以下内容均为原创,如有错误,欢迎指正,感激!!!说到通信协议,不得不谈的就是计算机网络中的TCP/IP协议,Linux C提供的网络socketAPI就是基于TCP/IP协议的可靠通信。在计算机网络中,为提高数据传输的可靠性,TCP/IP协议中用到多种对数据的封装和加密来保证接收端收到正确的数据和丢弃错误的数据,而这些"可靠"的接口都是TCP/IP协议隐藏实现直接提供给User的。以往我们见到的...
2019-04-27 14:59:38 1663
原创 不可重入函数,信号量,可重入函数
在了解了一下不/可重入函数以及互斥锁,信号量后,写了这篇blog。先看一下这个程序:void fun(int *val){ *val+=1; return ;}int main(){ static int val=0;//or int val=0; /* */ fun(&val); return 0;}函数f...
2019-03-28 23:52:14 602
原创 Linux多路复用epoll
在linux 没有实现epoll事件驱动机制之前,我们一般选择用select或者poll等IO多路复用的方法来实现并发服务程序。自 Linux 2.6内核正式引入epoll以来,epoll已经成为了目前实现高性能网络服务器的必备技术,在大数据、高并发、集群等一些名 词唱得火热之年代,select和poll的用武之地越来越有限,风头已经被epoll占尽。select的缺点:单个进程能够监视...
2019-03-28 15:02:47 355
原创 Linux多路复用poll
poll函数的原型说明如下:#include <poll.h>struct pollfd { int fd; /* 文件描述符 */ short events; /* 等待的事件 */ short revents; /* 实际发生了的事件 */ } ;int poll(struct pollfd *fds,...
2019-03-27 22:00:58 268
原创 Linux多路复用select
前面提到过,使用多进程和多线程来提高系统运行的效率,多线程的并发相对多进程来说占用的资源更少,效率相比多进程更快, select()函数允许进程指示内核等待多个事件(文件描述符)中的任何一个发生,并只在有一个或多个事件发生或经历一段指定时 间后才唤醒它,然后接下来判断究竟是哪个文件描述符发生了事件并进行相应的处理。#include <sys/select.h> #include &...
2019-03-27 17:10:14 284
原创 Linux下多线程编程以及互斥锁
在操作系统原理的术语中,线程是进程的一条执行路径。线程在Unix系统下,通常被称为轻量级的进程,线程虽然不是进 程,但却可以看作是Unix进程的表亲,所有的线程都是在同一进程空间运行,这也意味着多条线程将共享该进程中的全部系统资 源,如虚拟地址空间,文件描述符和信号处理等等。但同一进程中的多个线程有各自的调用栈(call stack),自己的寄存器环境 (register context),自己的...
2019-03-27 13:49:48 419
原创 Linux多进程编程fork和vfork系统调用
服务器按处理方式可以分为迭代服务器和并发服务器两类。平常用C写的简单Socket客户端服务器通信,服务器每次只能处理 一个客户的请求,它实现简单但效率很低,通常这种服务器被称为迭代服务器。 然而在实际应用中,不可能让一个服务器长时间 地为一个客户服务,而需要其具有同时处理 多个客户请求的能力,这种同时可以处理多个客户请求的服务器称为并发服务器,其 效率很 高却实现复杂。在Linux的服务器编程中...
2019-03-26 16:10:00 461
原创 Linux下利用socket进行通信
1.socket计算机专业术语:网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通...
2019-03-26 14:37:30 1493
转载 Linux下学习用C语言实现MQTT(五)(setCallback回调函数用于多线程)
在MQTT中设置回调函数常用于多线程,示例代码:#include <pthread.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include "MQTTClient.h"#if !defined(WIN32)#include <unistd.h>
2019-03-16 13:57:13 2532 1
原创 Linux下学习用C语言实现MQTT(四)(setCallback回调函数)
直接给出publish和subscribe端代码:#include &amp;amp;lt;stdio.h&amp;amp;gt;#include &amp;amp;lt;stdlib.h&amp;amp;gt;#include &amp;amp;lt;string.h&amp;amp;gt;#include &amp;quot;MQTTClient.h&amp;q
2019-03-16 13:36:52 4641 4
原创 Linux下学习用C语言实现MQTT(三)(异步函数)
客户端库支持两种操作模式,称为同步模式和异步模式。如果你的应用程序调用了MQTTClient_setCallbacks(),则客户端将会进入异步模式,否则会以同步模式运行。同步模式下,客户端应用程序运行在单个线程上。信息的发布使用MQTTClient_publish()和MQTTClient_publishMessage()函数。为了确定Qos1和Qos2(详见Quality of servic...
2019-03-13 21:11:35 6157 5
原创 Linux下学习用C语言实现MQTT(二)(常用函数介绍)
介绍一下常用的MQTT的C函数。MQTT系列函数有很多,在paho-mqtt.c库中的src路径下有大量函数的定义和声明,这里只介绍比较常用的函数解耦提和结构体:1.结构体MQTTClient定义:typedef void* MQTTClient;含义:代表MQTT客户端的句柄,成功调用MQTTClient_create函数后会得到有效的客户端句柄。(这里可以做一个对比,我并不是很了解这种...
2019-03-13 17:19:39 5294 2
原创 Linux下学习用C语言实现MQTT(一)(同步函数)
使用系统版本Ubuntu14.04先介绍一下MQTT:MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和制动器(比如通过Twitter让房屋联网)的通信协议。MQTT协议是为大量计算能力有限,且工作在低带...
2019-03-12 23:38:56 13235 26
原创 MQTT代理服务器--mosquitto的搭建
Mosquitto是一个实现了MQTT3.1协议的代理服务器,由MQTT协议创始人之一的Andy Stanford-Clark开发,它为我们提供了非常棒的轻量级数据交换的解决方案。本文的主旨在于记录Mosquitto服务的安装和使用,以备日后查阅。Linux下安装mosquitto(本文使用操作系统Ubuntu14.04)下载地址(非最新版本):wget http://mosquitto.o...
2019-03-12 17:00:23 1000
原创 关于new(C++)和malloc(C)
c++中new运算符从堆区分配一段存储空间:char *pb=new char[1024];char *pa=(char *)malloc(1024*sizeof(char));从堆区分配连续的1024*sizeof(char)大小的存储空间;该空间与栈区(即自动变量所在区域)不同,栈区有FILO(或LIFO)的特点,自动变量在代码块执行时载入,结束时出栈。而堆区是一段专门给new和C函...
2019-01-10 18:35:30 556
原创 C/C++实现二叉树的先序,中序,后序,按层遍历以及深度,叶子结点,是否是满二叉树的计算和判断
废话不说,直接上代码:#include&lt;iostream&gt;#include&lt;cmath&gt;#define MAXSIZE 1024struct tree{ char data; tree *lchild; tree *rchild;};using namespace std;void create_tree(tree **ptr,in...
2019-01-10 18:35:16 406 1
原创 关于字符串(C语言)
在c语言中,有过函数:scanf("%c",&amp;a);//1scanf(" %c,&amp;b);//2scanf("%s",str);//3,str为数组1从缓冲区读取单个字符,该字符可以是空白字符,回车符,如果是整数(1 2 3…)会将其解释为字符(‘1’,‘2’,‘3’…)。(回车结束)当用%d或其他格式串读取时,都会跳过空白符。2在格式控制串%
2019-01-10 18:35:03 139
原创 网络编程域名解析函数gethostbyname()的使用
我们通常在网页上访问一个网址,例如访问百度时,我们通常是输入www.baidu.com,这种表示是代表百度的域名,实际上当我们在访问这个网址的时候,操作系统会自动向DNS服务器发送请求,来获取百度的ip,完成域名到ip的转换。在计算机网络中,通常我们我们在访问一个网址时,输入的是该网址的域名,而不是ip,因为像百度这种网址的ip通常是公有ip,这种ip是会变的,我们当然不会去记它会变的i...
2018-11-18 16:27:42 2123
原创 树莓派的ssh远程登录和树莓派配置无线路由器
电脑远程登陆树莓派1.首先使用电脑远程登陆树莓派,树莓派相当于一个微型电脑,目前电脑所拥有的基本功能树莓派基本上都有。想要远程登陆树莓派,必须电脑与树莓派处于同一无线局域网。对树莓派进行设置,首先对树莓派sd卡进行格式化并载入操作系统镜像文件。树莓派操作系统镜像下载地址:https://www.raspberrypi.org/downloads/raspbian/从下面地址中下载并安装 ...
2018-10-08 13:16:54 5212
空空如也
Linux交叉编译移植的netcat命令无法使用
2021-11-16
TA创建的收藏夹 TA关注的收藏夹
TA关注的人