编程语言
文章平均质量分 88
fanchenxinok
汽车电子行业资深软件工程师
展开
-
《What every programmer should know about memory》-What Programmers Can Do译
原文PDF: http://futuretech.blinkenlights.nl/misc/cpumemory.pdf一二章参考博文:https://www.oschina.net/translate/what-every-programmer-should-know-about-memory-part1?lang=chs&p=6目的在边学习边翻译让自己理解的更加深刻。6.程序员可以做什么通过前面章节的学习我们清晰的认识到程序员有很多机会影响程序的性能,可以是正面的也可...原创 2021-11-11 11:19:37 · 1402 阅读 · 0 评论 -
python学习笔记:利用contextlib和@contextmanager实现with语句上下文实例
#contextlib'''任何对象,只要正确实现了上下文管理,就可以用于with语句。实现上下文管理是通过__enter__和__exit__这两个方法实现的,也可以通过@contextmanager和closing函数实现'''print('用contextlib实现在函数调用前后打印log的功能:')print('(1)contextlib: with...as...语句')原创 2017-11-06 17:21:19 · 3782 阅读 · 0 评论 -
python学习笔记:利用__getattr__属性实现枚举Enum
#自定义 enumdef enum(**enums): return type('Enum', (), enums)m = enum(JAN=1, FEB=2, MAR=3, APR=4, MAY=5, JUN=6, JUL=7, AUG=8, SEP=9, OCT=10, NOV=11, DEC=12)print('FEB = %d' % m.FEB)d = {'JAN':1, 'F原创 2017-11-01 12:24:51 · 625 阅读 · 0 评论 -
温故而知新:gtest单元测试工具和lcov覆盖率统计工具的结合使用
一、简介 之所以叫温故而知新,是因为将这两个工具结合起来作为单元测试工具的想法在上一个项目中应用了,好像还没有人将这两种工具结合使用,或者没有写成博客供大家参考,现在重新温习下将想法写下来。 gtest单元测试工具接触过的人都很熟悉了,它是一款google提供的强大的测试框架,测试案例的编写也比较简单,gtest案例的编写可以参考系列博文:http://www.cn...原创 2016-12-30 15:05:37 · 17161 阅读 · 13 评论 -
解决ubuntu14.04下samba共享目录share点开弹出没有权限访问的问题
在ubuntu14.04下如何配置samba就不多说了,我的问题是配置完成以后,从windows访问共享目录,都连上了,但是点开share文件夹却弹出没有权限访问的对话框。如下图所示:这个问题搞了好久,网上试了各种方法都不行,最后看了下/var/log/samba/目录下的log.%m文件,里面输出的几条log信息如下:[2016/10/17 20:27:00.296304,原创 2016-10-17 21:02:52 · 14044 阅读 · 1 评论 -
学习笔记:Makefile的ifeq逻辑或,逻辑与的变通实现
(1)ifeq的用法 ifeq ($(变量名), 变量值 ) ........ else ifeq ($(..), ..) ......... else ......... endif(2)最近在学习makefile的过程中遇到需要用i原创 2016-09-07 15:33:42 · 83934 阅读 · 7 评论 -
学习笔记:多个静态库连接成一个动态库例子
目标:将多个静态库链接为一个动态库,提供统一的接口给外部使用。看一下例子的目录文件:编译后将生成 libAdd.a libMutiply.a , 然后将这两个.a静态库和apl_myApi.o 链接成为一个动态库 libMyApi.so。提供这个动态库给app.cpp使用。(1)apl_add.cpp 及 apl_add.h 的内容#include "apl_add.h原创 2016-09-10 11:37:31 · 6974 阅读 · 0 评论 -
学习笔记:relocation R_X86_64_32 against `.rodata‘ can not be used when making a shared object;
解决多个.a静态库,链接成一个.so动态库出现:relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; 的错误。我的总目标是:写一个mainApi.cpp的文件,这个文件提供API给外部用户使用。mainApi.cpp需要依赖其他模块生成的静态库(在lib文件原创 2016-09-09 14:48:05 · 86103 阅读 · 5 评论 -
学习笔记:B+树模拟数据库索引查找
#include #include using namespace std;/******************************PROGRAMER: FanchenxinM 阶B+树: (1) 非叶子节点key 个数和子树指针最大个数均为M. (2) 非叶子节点的key 为其子树节点M个key的最大或最小key.?原创 2016-08-04 12:11:49 · 1740 阅读 · 1 评论 -
个人工作中常用Linux命令总结
linux命令大全网站:http://man.linuxde.net/tune2fsgdbserver调试:实机端:gdbserver 136.18.227.78:1234 test_main -c 1 -l 4 -p 0服务器端:xxx/arm-linux-gnueabihf-gdb test_main -c 1 -l 4 -p 0target remote 136.18.227....原创 2018-07-05 10:18:26 · 1486 阅读 · 0 评论 -
多个进程都链接同一个so动态库,代码段共享,数据段不共享
纸上得来终觉浅,这句话一点不假,动态库的知识在看《程序员的自我修养》这本书已经了解了。但是到实际项目遇到问题却没往这方面去考虑。浪费了半天时间。问题是这样的:我有个模块编译成一个so库供其他程序使用。比如A,B都需要链接lib.so。lib.so里面有个全局指针p,当A程序调用lib.so的函数启动lib的功能后这个p指针就被赋值了。然后B程序启动,但奇怪的是在B程序里面调用lib.so库...原创 2018-07-28 18:57:56 · 17479 阅读 · 17 评论 -
学习记录:各种YUV图像上画线的实现
几种常用YUV格式图像内存分布 (以 4x2 共8个像素为例):(1)YUV444I (interleaved) 每个Y分量都有一个UV分量YUV YUV YUV YUV YUV YUV YUV YUV (2)YUV444P (planar) 每个Y分量都有一个UV分量 ...原创 2019-09-26 09:59:33 · 4543 阅读 · 10 评论 -
终端打印彩色进度条
#include<stdio.h>#include<unistd.h>void draw_progress(int pos){ pos = (pos < 0) ? 0 : pos; pos = (pos > 100) ? 100 : pos; char bar[102]={'\0'}; const char *state = "-\\|/";...原创 2019-09-24 17:01:38 · 208 阅读 · 0 评论 -
正则三剑客grep, sed, awk复习记录
正则表达式字符列表:\ 转义字符(ex: "\/home\/test\/" 表示"/home/test") . 匹配任意单个字符 (ex: "a.b"可匹配 "aab" "abb" "acb"....) * 匹配在它之前一个字符的任意个数或0个 (ex: "a*b" 可匹配 "ab" "aab" "aab" "aaab"...) ^ 在行开头匹配它后面的正则...原创 2019-08-30 15:30:30 · 503 阅读 · 0 评论 -
sourceinsight代码路径变更项目工程不用重建的方法
在使用sourceinsight的时候会遇到这样的情况,项目非常的大比如linux kernel, 重建一个sourceinsight工程需要手动的去添加很多文件,很麻烦。比如在服务器的某个目录下创建了sourceinsight项目工程,但是有天服务器的地址变了,代码路径也发生变化。这时候再打开sourceinsight工程就会报找不到代码文件。但是我又不想重新创建sourceinsight工程怎...原创 2019-06-14 17:17:54 · 5685 阅读 · 0 评论 -
Linux上实现基于TCP和Unix domain Socket的本地IPC通信模型
功能:Linux上实现基于TCP和Unix domain Socket的本地IPC通信模型。类似安卓下的binder通信模式,可以自由定制service服务。概念: server (服务器); service(服务); client(客户);结构:采用CSS(client-server-service)模式,一个server负责管理client和service服务。可以在server上注册...原创 2019-05-23 15:41:01 · 1521 阅读 · 0 评论 -
学习笔记:UDP实现进程心跳检测
思路:UDP服务器端:服务器维护一个client链表,当有client连接创建新节点保存客户主机名和地址,并保存心跳时间heart_beat_time。当客户端发起一次心跳,服务器收到心跳包更新client节点的心跳时间。服务定时去检测client链表里的每个client的心跳时间,如果心跳时间和当前时间的时间差超过一定的时间间隔,就认为该client已经掉线。UDP客户端:定时发送心...原创 2018-08-24 16:05:07 · 7999 阅读 · 11 评论 -
学习笔记:linux timerfd配合epoll使用的例子
#include <stdio.h>#include <sys/epoll.h>#include <pthread.h>#include <time.h>#include <sys/timerfd.h>static void epollAddEvent(int epollFd, int addFd, int state){...原创 2018-08-23 11:41:53 · 2740 阅读 · 2 评论 -
学习笔记:fork实现守护进程
目标:fork的父进程作为守护进程监测子进程,如果子进程挂了,则可以实现子进程的重启。#include <stdlib.h>#include <stdio.h>#include <sys/types.h>#include <unistd.h>#include <time.h>#include <pthread.h&g...原创 2018-08-17 15:52:55 · 970 阅读 · 0 评论 -
记录下:解决fatal error: sqlite3.h: No such file or directory
编译sqlite3数据库c语言程序时出现fatal error: sqlite3.h: No such file or directory,找不到头文件的问题。原来是系统没有安装函数库。执行下面语句解决:sudo apt-get install libsqlite3-dev原创 2016-05-30 21:19:05 · 31555 阅读 · 0 评论 -
学习笔记:B树建立,搜索和删除操作
#include #include using namespace std;/******************************PROGRAMER: FanchenxinM阶多路查找树:1.定义任意非叶子结点最多只有M个儿子;且M>2; 2.根结点的儿子数为[2, M]; 3.除根结点以外的非叶子结点的儿子数为[M/2, M]; 4.每个结点存放至少M/2-1(取上整)和至多M-1个关键原创 2016-07-26 17:03:34 · 1486 阅读 · 0 评论 -
快排算法及利用快排思想寻找第k大(小)的数
#include #include using namespace std;void Swap(int &a, int &b){ int p = a; a = b; b = p;}void print(int* arry, int num){ int i; for(i = 0; i < num; i++) cout << arry[i] << " "; cout原创 2016-06-29 18:14:27 · 4979 阅读 · 1 评论 -
定时器的简单实现即回调函数的运用
这两天在 研究回调函数就想实现简单的定时器,以下是鄙人的程序望指教。#include #include using namespace std;#define MAXNUM 256typedef void (*timerProcessFunc)(void*);typedef struct{ unsigned int id; int timeout; /原创 2015-08-17 19:10:40 · 6271 阅读 · 0 评论 -
shell脚本编程:将文件中指定行的内容进行替换
(1)在文件中通过关键字查找得到其所在的行号 n=`grep -n "查找的关键字 " 文件名 | awk -F':' '{print $1}'` (2)用sed命令进行替换 TMP="替换的内容" sed -i "$[ n ]c $TMP" 文件名原创 2015-09-11 19:31:01 · 7162 阅读 · 0 评论 -
学习笔记:创建Trie 树存储英文单词及中文意思
#include #include using namespace std;//实现目标:用trie tree来存储英文单词及其中文意思,通过英文单词搜索其中文意思typedef enum{ BRANCH_NODE = 0, LEAF_NODE}NK;typedef struct trieNode{ int subNum; char* chinese;原创 2016-07-08 14:40:23 · 1402 阅读 · 0 评论 -
C语言char*字符串数组和unsigned char[]数组的相互转换
#include #include using namespace std;void convertUnCharToStr(char* str, unsigned char* UnChar, int ucLen){ int i = 0; for(i = 0; i < ucLen; i++) { //格式化输str,每unsigned char 转换字符占两位置%x写输%X写输原创 2016-06-08 21:36:32 · 38353 阅读 · 3 评论 -
模拟c++容器vector写的动态数组
/* 模板类:动态数组 */template class T_A{public: T_A() : num(1) { arry = new T[1]; } T_A(size_t n) : num(n) { if(n > 0) arry = new T[n]; else arry = NULL; } ~T_A(); void reset_arry_size原创 2016-05-18 15:42:39 · 522 阅读 · 0 评论 -
C++实现模拟定时器
#include #include #include #include #include #include using namespace std;/****************** Timer ****************************/typedef void (*TimeOutProcess)(int count);typedef int ID;type原创 2016-05-18 15:47:13 · 961 阅读 · 0 评论 -
自己写的内存池管理程序
#include <iostream>#include <stdlib.h>#include <stdio.h>#include <time.h>#include <new>#include <string.h>using namespace std;#ifdef WIN32#include <wind...原创 2016-05-17 16:26:53 · 3780 阅读 · 0 评论 -
segmentation fault, 段错误简单定位步骤
(1)执行命令:ulimit -a 查看系统是否可以产生core文件,如果core file size 是0 就需执行第二步(2)执行命令:ulimit -c 2048, 2048是你指定的core文件大小,可以根据自己的需要修改(3)gcc编译你的程序:gcc your_program.c -o you_exe -g, 一定要加“-g” 选项(4)./you_exe 运行程序, 假原创 2015-11-19 21:23:09 · 8629 阅读 · 0 评论