<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[junh_tml的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/junh_tml</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; junh_tml]]></copyright><item><title><![CDATA[c++11 thread类在嵌入式上运行报错问题]]></title><link>https://blog.youkuaiyun.com/junh_tml/article/details/124168550</link><guid>https://blog.youkuaiyun.com/junh_tml/article/details/124168550</guid><author>junh_tml</author><pubDate>Thu, 14 Apr 2022 14:07:19 +0800</pubDate><description><![CDATA[从昨晚到今天遇到一个怪异的问题，暂时无解，先记录在此处。
测试代码：
#include &lt;iostream&gt;
#include &lt;unistd.h&gt;
#include &lt;thread&gt;
using namespace std;
void  func1()
{
    cout&lt;&lt;"AAAAAAAAAA"&lt;&lt;endl;
}

int main()
{
    thread(func1).detach();
    sleep(2);
    cout]]></description><category></category></item><item><title><![CDATA[linux指定目录下按文件创建时间清理旧文件的实现]]></title><link>https://blog.youkuaiyun.com/junh_tml/article/details/123827898</link><guid>https://blog.youkuaiyun.com/junh_tml/article/details/123827898</guid><author>junh_tml</author><pubDate>Tue, 29 Mar 2022 18:23:28 +0800</pubDate><description><![CDATA[一. 问题描述
linux的一个目录下存放着日志文件，每个日志文件都是打包压缩好的。每次生成新的日志文件后，都要检查一下是否超过10个，如果超过10个则删掉最旧的日志文件。依此滚动循环。
二. 代码实现

假设存放日志的目录是：/home/log，且该目录下只存放日志文件，无其他文件
假设日志文件名格式为log_xxx_xxx.zip


bash版

#获取日志文件数量
num=`ls /home/log -l |grep "^-"|wc -l`;
#需要保留的日志数量上限
retaincount = 1]]></description><category></category></item><item><title><![CDATA[log4cplus v2.0库的简单使用]]></title><link>https://blog.youkuaiyun.com/junh_tml/article/details/123217455</link><guid>https://blog.youkuaiyun.com/junh_tml/article/details/123217455</guid><author>junh_tml</author><pubDate>Fri, 04 Mar 2022 16:23:38 +0800</pubDate><description><![CDATA[log4cplus 2.0库的简单使用。]]></description><category></category></item><item><title><![CDATA[imx6移植log4cplus库]]></title><link>https://blog.youkuaiyun.com/junh_tml/article/details/123212583</link><guid>https://blog.youkuaiyun.com/junh_tml/article/details/123212583</guid><author>junh_tml</author><pubDate>Tue, 01 Mar 2022 21:36:33 +0800</pubDate><description><![CDATA[前言
	
本文所用ARM开发板为周立功m6708Q（imx6q系列），交叉工具链为官方提供：poky-glibc-x86_64-meta-toolchain-cortexa9hf-vfp-neon-toolchain-1.7.


	下载
	
1. 进入项目主页

log4cplus / Wiki / Homehttps://sourceforge.net/p/log4cplus/wiki/Home/2. 点击“SourceForge”



3. 点击“Downlo...]]></description><category></category></item><item><title><![CDATA[qt远程调试imx6，勾选了run in terminal却无法开启终端]]></title><link>https://blog.youkuaiyun.com/junh_tml/article/details/120448510</link><guid>https://blog.youkuaiyun.com/junh_tml/article/details/120448510</guid><author>junh_tml</author><pubDate>Fri, 24 Sep 2021 14:10:26 +0800</pubDate><description><![CDATA[开发环境：

主机：ubuntu18.04 LTS
目标板：imx6q
交叉工具链：poky-glibc-x86_64-meta-toolchain-qt5-cortexa9hf-vfp-neon-toolchain-1.7

问题出现背景：
1. qtcreator的启动
imx6 qt开发环境的搭建，不用赘述，随便一搜都是。其中最后一步，打开qtcreator时，一般是执行一个qtcreator_start.sh（文件名随意）脚本打开，因为需要更改环境变量，通常我们在这个脚本中的内容是这样的：
#!/b]]></description><category></category></item><item><title><![CDATA[c++11 atomic使用几点注意事项]]></title><link>https://blog.youkuaiyun.com/junh_tml/article/details/117554642</link><guid>https://blog.youkuaiyun.com/junh_tml/article/details/117554642</guid><author>junh_tml</author><pubDate>Fri, 04 Jun 2021 14:15:35 +0800</pubDate><description><![CDATA[初步总结几点：

不能直接传结构体类型，以此希望对整个结构体成员的操作都是原子性的，比如：

	struct Test_STU{
	    int a;
	    float b;
	    char c;
	};
	atomic&lt;Test_STU&gt;  test; //错误
	//但可以这样（BTW：c++11之后允许在结构体或类内初始化）
	struct Test_STU{
	    atomic_int a{};	//初始化为默认值0
	    atomic&lt;float&gt; b{}]]></description><category></category></item><item><title><![CDATA[c++十六进制字符串转int型三种方法的测试总结]]></title><link>https://blog.youkuaiyun.com/junh_tml/article/details/116903816</link><guid>https://blog.youkuaiyun.com/junh_tml/article/details/116903816</guid><author>junh_tml</author><pubDate>Sun, 16 May 2021 22:42:55 +0800</pubDate><description><![CDATA[三种方法：stoi，strtol，sscanf
各函数具体用法本文不赘述。
测试一：只含数字的十六进制字符串
string str("123");
int a = stoi(str,0,16);
int b = strtol(str.c_str(),0,16);
int c;
sscanf(str.c_str(),"%X",&amp;c);
cout&lt;&lt;"a = "&lt;&lt;a&lt;&lt;endl;
cout&lt;&lt;"b = "&lt;&lt;b&lt;&lt;endl;
co]]></description><category></category></item><item><title><![CDATA[linux使用mmap共享内存封装动态库，实现全局变量对外只读接口]]></title><link>https://blog.youkuaiyun.com/junh_tml/article/details/116192632</link><guid>https://blog.youkuaiyun.com/junh_tml/article/details/116192632</guid><author>junh_tml</author><pubDate>Tue, 27 Apr 2021 11:25:52 +0800</pubDate><description><![CDATA[想要实现的功能：动态库中定义结构体类型全局变量（一个结构体中嵌套多个结构体），该变量在库内可读写，但主程序（外部程序）只可读，不可写。
方便说明，简化成一个如下的结构体变量：
typedef struct
{
    int a;
    int b;
    int c;
} Test_STU;

思路：

结构体改成类，public成员，通过get()方法获取——不喜欢，直接采用 . 结构体方式访问最好；
结构体改成类，public成员，添加const修饰——不喜欢，变量很多，初始化列表不方便，且类内以]]></description><category></category></item><item><title><![CDATA[linux下socketCAN实现反转过滤——CAN_INV_FILTER的使用]]></title><link>https://blog.youkuaiyun.com/junh_tml/article/details/115576172</link><guid>https://blog.youkuaiyun.com/junh_tml/article/details/115576172</guid><author>junh_tml</author><pubDate>Sat, 10 Apr 2021 15:20:26 +0800</pubDate><description><![CDATA[关于Linux中socket can怎么使用，优快云上已经有很多文章介绍。本文重点记录can_filter中的 CAN_INV_FILTER的使用，很多文章对此一笔带过，且很多文章翻译不全，或者原文不全，导致自己浪费了些时间，最后在看candump源码时才发现问题所在。
直接贴代码解释，以下为写的一个最简单的canId过滤函数：
宏定义
/** CAN报文过滤方式 **/
#define CAN_FILTER_PASS     0x01    //过滤方式-通过
#define CAN_FILTER_RE]]></description><category></category></item><item><title><![CDATA[libevent中关于bufferevent_socket_connect的使用小结]]></title><link>https://blog.youkuaiyun.com/junh_tml/article/details/115250534</link><guid>https://blog.youkuaiyun.com/junh_tml/article/details/115250534</guid><author>junh_tml</author><pubDate>Fri, 26 Mar 2021 17:10:23 +0800</pubDate><description><![CDATA[经过多次代码测试，总结如下：

bufferevent_socket_connect 返回0，不代表和服务器连接成功，返回-1一定是连接失败（简单看了下源码，的确大部分情况都是返回0，包括连接被拒绝等）
网线未插（wifi未连接），服务器没开，bufferevent_socket_connect立即返回0，但在后台继续请求连接（前提socket已被设置成非阻塞），若无进一步操作，将在130秒后，报错：110-Connection timed out
在上述状态下，若先插网线，再开服务器，几秒之后，可以成功建]]></description><category></category></item><item><title><![CDATA[PIMPL实现——通过this指针和接口纯虚函数实现客户端代码调用]]></title><link>https://blog.youkuaiyun.com/junh_tml/article/details/115001150</link><guid>https://blog.youkuaiyun.com/junh_tml/article/details/115001150</guid><author>junh_tml</author><pubDate>Fri, 19 Mar 2021 11:08:14 +0800</pubDate><description><![CDATA[示例代码如下，基于网上PIMPL经典示例代码改动。

Person.h （对外发布的头文件，其余文件客户端不可见）

#ifndef PERSON_H
#define PERSON_H
#include &lt;string&gt;

class PersonImpl;   //前向声明
class Person
{
public:
    Person();
    virtual ~Person();
    int fun1(int x, int y);
    virtual void fun2()]]></description><category></category></item><item><title><![CDATA[no known conversion from ‘const char [4]‘ to ‘std::__cxx11::string &‘ (aka ‘basic_string＜char…引用传参问题]]></title><link>https://blog.youkuaiyun.com/junh_tml/article/details/114990246</link><guid>https://blog.youkuaiyun.com/junh_tml/article/details/114990246</guid><author>junh_tml</author><pubDate>Thu, 18 Mar 2021 21:25:01 +0800</pubDate><description><![CDATA[今天测试一段代码时遇到报错：

**重点是这句“no known conversion from ‘const char [[4]]’ to ‘std::__cxx11::string &amp;’ (aka ‘basic_string &amp;’) for 1st argument……”
代码如下：**
h文件中声明类如下：
class Person 
{
public:
    Person( string &amp;name, int age);
    virtual ~Person();
   ]]></description><category></category></item><item><title><![CDATA[c++让代码只执行一次的方式]]></title><link>https://blog.youkuaiyun.com/junh_tml/article/details/114675327</link><guid>https://blog.youkuaiyun.com/junh_tml/article/details/114675327</guid><author>junh_tml</author><pubDate>Thu, 11 Mar 2021 17:53:27 +0800</pubDate><description><![CDATA[今天查找这方面的资料，然后自己简单改写了一个宏来实现：
/*** 宏函数-括号中的code代码只执行一次 ***/
#define once_run(code) {        \
    static auto tmp = [&amp;](){    \
        code;                   \
        return 0;               \
    }();                        \
    (void)tmp;          ]]></description><category></category></item></channel></rss>