摘要: 第一部分: 1. 官网教程地址 https://docs.espressif.com/projects/esp-idf/zh_CN/v4.0.1/get-started/linux-setup.html 2.官网教程提到针对ubuntu,需要输入下列指令 sudo apt-get install g 阅读全文
posted @ 2020-11-17 19:54 一匹夫 阅读(3008) 评论(0) 推荐(0) 编辑
摘要: 1. 工作中的代码: 2. 使用指针作为形参,不会造成编译报错,我是可以理解的。 那么请讨论下为什么使用值传递和引用作为形参,会造成编译报错? 3. 答案揭晓 boost 的mutex源码: 最终原因: 我的input_dev_param没有实现拷贝构造函数 ,而编译器默认提供的构造函数会调用各个成 阅读全文
posted @ 2020-11-03 20:38 一匹夫 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 在我的项目工程代码内#include <boost/asio.hpp>后导致了编译报错: ./include/boost/asio/detail/consuming_buffers.hpp: In member function 'boost::asio::detail::consuming_buf 阅读全文
posted @ 2020-10-27 10:30 一匹夫 阅读(885) 评论(0) 推荐(0) 编辑
摘要: Asio是一个建立在Boost所提供的相关组件之上的异步的网络库,可以运行在Win/Linux/Unix等各种平台之上。 不过随着C++11的发布,其对Boost的依赖也越来越少,作者又做了一个不依赖于Boost的版本。 1. 同步Timer: 调用wait后立即阻塞 #include <iostr 阅读全文
posted @ 2020-10-24 23:53 一匹夫 阅读(971) 评论(0) 推荐(0) 编辑
摘要: 2020春节,阅读了下SimpleGUI源码,我一直喜欢边阅读,边手绘图片,所以这里只贴几张图片。 一,什么是SimpleGUI ? https://gitee.com/Polarix/simplegui/ 二,个人理解 最后,贴一个读友写的关于Simple GUI精简字库的制作方法 https:/ 阅读全文
posted @ 2020-10-22 15:13 一匹夫 阅读(740) 评论(0) 推荐(0) 编辑
摘要: set是一种关联式容器,其特性如下: set以RBTree作为底层容器 所得元素的只有key(键)没有value(值) 不允许出现键重复 所有的元素都会被自动排序 不能通过迭代器来改变set的值,因为set的值仅有键,键不能被修改 map和set一样是关联式容器,它们的底层容器都是红黑树,但是,ma 阅读全文
posted @ 2020-10-22 11:22 一匹夫 阅读(742) 评论(0) 推荐(0) 编辑
摘要: pimp.hpp: #ifndef pimp_hpp #define pimp_hpp class CMyComponent{ public: CMyComponent(); ~CMyComponent(); void DoSomething(); private: class CMyCompone 阅读全文
posted @ 2020-10-19 22:50 一匹夫 阅读(413) 评论(0) 推荐(0) 编辑
摘要: 代码: // boost库 条件变量 使用测试 #include <iostream> #include <boost/thread.hpp> using namespace std; boost::condition_variable cond; //关联多个线程的条件变量 boost::mute 阅读全文
posted @ 2020-10-19 17:20 一匹夫 阅读(643) 评论(0) 推荐(0) 编辑
摘要: BOOST库的array, 类似std库的vector. 下图所示书籍的下载地址,我的另一篇博客内有记载: https://www.cnblogs.com/happybirthdaytoyou/p/13837384.html 实验代码: #include <boost/array.hpp> #inc 阅读全文
posted @ 2020-10-18 22:45 一匹夫 阅读(369) 评论(0) 推荐(0) 编辑
摘要: 直接贴实验代码: /******* boost 消息队列 **********/ #if 1 #include <boost/thread/thread.hpp> #include <boost/interprocess/ipc/message_queue.hpp> #include <iostre 阅读全文
posted @ 2020-10-18 22:33 一匹夫 阅读(1684) 评论(0) 推荐(0) 编辑
摘要: BOOST库的环形队列比较灵活,前插或后插,删除队首或删除队尾元素,都支持。 只贴代码: #include <boost/circular_buffer.hpp> #include <numeric> #include <assert.h> #include <iostream> using nam 阅读全文
posted @ 2020-10-18 22:21 一匹夫 阅读(1131) 评论(0) 推荐(0) 编辑
摘要: 好记性不如烂笔头,BOOST库的移植,我也记录一下。 1. BOOST库 版本1.66.0 下载地址, 附书籍C++ BOOST库开发指南: https://download.csdn.net/download/qq_37372700/12960498 2.交叉编译: 当前环境: 编译脚本: my_ 阅读全文
posted @ 2020-10-18 21:53 一匹夫 阅读(924) 评论(0) 推荐(0) 编辑
摘要: 1. 环境测试 alsa_test.c #include <alsa/asoundlib.h> #include <stdio.h> // 官方测试代码, 运行后只要有一堆信息打印出来,即说明安装成功了。 int main() { int val; printf("ALSA library vers 阅读全文
posted @ 2020-10-18 17:27 一匹夫 阅读(1023) 评论(0) 推荐(0) 编辑
摘要: 关联博文: 当文件操作遇上fork Linux内核的文件结构体 struct file { ......... struct path f_path; //文件的路径 #define f_dentry f_path.dentry #define f_vfsmnt f_path.mnt const s 阅读全文
posted @ 2020-10-15 22:35 一匹夫 阅读(594) 评论(0) 推荐(0) 编辑
摘要: 1.为什么可以析构? 我对单例模式的理解: 在单例类对象的生命周期内,只有一个单例类的对象,所以我可以让单例类对象生,也可以让它死,只要保证单例类对象生的时候,只有一个对象就行。 让单例类对象死,就得需要接口,即在外部调用delete。 2.单例的析构-实验, 以及注意事项 注意事项: 不要重复调用 阅读全文
posted @ 2020-10-15 15:26 一匹夫 阅读(1673) 评论(0) 推荐(1) 编辑
摘要: 管道文件是一个特殊的文件,是由内核环形队列来实现的。 函数形式: int pipe(int fd[2]) ,无需额外调用open,但需手动调用close来关闭fd[0]和fd[1]。 功能: 该系统调用,用于创建无名管道。无名管道作用于有血缘关系的进程之间,完成数据传递。 头文件:#include 阅读全文
posted @ 2020-10-12 22:30 一匹夫 阅读(280) 评论(0) 推荐(0) 编辑
摘要: 进程间通信概述 1. 什么是进程间通信? 什么是线程间通信? 进程间通信: 在用户空间实现进程间通信是不可能的,进程间通信通过Linux内核对象来实现。 线程间通信:这在用户空间就可以实现,甚至可以通过全局变量来通信。 2. 有哪几种进程间通信方式? ** 管道通信:无名管道、有名管道(文件系统中有 阅读全文
posted @ 2020-10-12 21:56 一匹夫 阅读(141) 评论(0) 推荐(0) 编辑
摘要: I/O处理五种模型 *** 阻塞I/O模型 *** 非阻塞I/O模型 *** I/O多路转接模型 *** 信号驱动I/O模型 当数据报准备好的时候,内核会向应用程序发送一个信号,进程对信号进行捕捉,并且调用信号处理函数来获取数据报。 该模型分为两个阶段: 1.数据准备阶段:未阻塞,当数据准备完成之后 阅读全文
posted @ 2020-10-11 21:20 一匹夫 阅读(97) 评论(0) 推荐(0) 编辑
摘要: 原型: #include <unistd.h> #include <fcntl.h> int fcntl(int fd, int cmd, ... /* arg */ ); 功能: 改变已经打开文件的性质 常见使用方式: int fcntl(int fd, int cmd); int fcntl(i 阅读全文
posted @ 2020-10-10 05:52 一匹夫 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 我的相关博文: 系统编程-进程-exec系列函数超级详解(带各种实操代码) 一般我们会调用exec执行另一个程序,此时会用全新的程序替换子进程的正文,数据,堆和栈等。 此时保存文件描述符的变量当然也不存在了,我们就无法关闭无用的文件描述符了。 所以通常的做法是,我们一般会fork子进程后,先在子进程 阅读全文
posted @ 2020-10-05 23:35 一匹夫 阅读(1026) 评论(0) 推荐(0) 编辑
摘要: 在linux下,一切皆文件。 文件描述符用于操作文件。 从shell中运行一个进程,默认会有3个文件描述符存在(0、1、2);)0表示标准输入,1表示标准输出,2表示标准错误。 一个进程当前有哪些打开的文件描述符可以通过/proc/进程ID/fd目录查看。 1、 dup函数 #include <un 阅读全文
posted @ 2020-10-05 21:57 一匹夫 阅读(317) 评论(0) 推荐(1) 编辑
摘要: # 进程结束后,进程的所有内存都将被释放,包括堆上的内存等泄露的内存。 原因是,当进程结束时,GDT、LDT和页目录都被操作系统更改,逻辑内存全部消失, 可能物理内存的内容还在, 但是逻辑内存已经从LDT和GDT删除,页目录表全部销毁,所以内存会被全部收回。 # # # # # # # # # # 阅读全文
posted @ 2020-10-04 18:35 一匹夫 阅读(108) 评论(0) 推荐(0) 编辑
摘要: # 行缓存会输出的时机: 行缓存满,程序结束,遇到fflush刷新,遇到换行符。 磁盘通常是全缓存。 标准错误一般是无缓存,希望尽快被输出到终端上。系统调用api不带缓冲,C库函数api带缓冲。 # 调用read系统调用读取大量磁盘数据时: 先通过df命令查看磁盘文件系统(一般是/dev/sda1) 阅读全文
posted @ 2020-10-04 18:31 一匹夫 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 1. 下面张贴实现该队列仅需的两个头文件:ring_buffer_iterator.h 和 fifo_iterator.h ring_buffer_iterator.h 1 /* 2 * 3 * This program is free software; you can redistribute 阅读全文
posted @ 2020-10-04 17:37 一匹夫 阅读(704) 评论(0) 推荐(0) 编辑
摘要: 列一个我在工作上写的代码片段, 下面是消费者端的代码 static void input_status_report_thread(struct local_pthread_wrapper* thread, void* param) { struct input_manager *input = N 阅读全文
posted @ 2020-10-03 23:40 一匹夫 阅读(217) 评论(0) 推荐(0) 编辑