自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 protobuf - 使用arena构建proto对象

参考资料:[1] C++ Arena Allocation Guide:https://developers.google.cn/protocol-buffers/docs/reference/arenas#arenaclass[2] arena.h的文档:https://developers.google.com/protocol-buffers/docs/reference/cpp/g...

2020-01-10 15:28:36 8265

原创 C++中proto的field与序号index的对应关系查找

假设有一个proto message定义如下:message Example { optional bool a = 1; optional bool b = 2;};如果想在代码里知道a这个field定义时的给的序号是多少(这里是1):Example obj;std::cout << obj.GetDescriptor()->FindFieldByN...

2020-01-08 15:29:38 1131

原创 实时内核中,使用chrt设置进程和线程的实时调度属性

安装了带实时补丁的linux内核后,就可以让指定的进程或者线程拥有实时优先级。有一些系统调用可以在代码中来精细控制线程和进程的优先级,如果不方便修改代码,则可以通过chrt命令来达到这个目的。关于实时优先级和实时调度算法,可以参考linux文档:http://man7.org/linux/man-pages/man7/sched.7.html。简而言之,linux中有五种调度策略:非实时调...

2019-12-10 17:16:57 4237 1

原创 使用实时补丁内核的ubuntu中安装nvidia显卡驱动

根据上上篇的博客,安装了打了PREEMPT_RT实时补丁的内核。在我的应用场景中,是想在一台机器上同时能够使用两种内核,并且在nvidia-docker中,跑一个需要用到显卡的程序。结果发现在实时内核中,非实时内核中装好的显卡驱动不能用,直接使用apt install nvidia-410又说已经update了。如果系统是刚装的,非实时内核中还没有装过显卡驱动,直接在实时内核中apt inst...

2019-12-10 15:52:42 4032 3

原创 ubuntu修改默认启动的linux内核

修改/etc/default/grub这个文件中的配置可以达到目的。这个文件里,找到GRUB_DEFAULT所在的行。默认这个值是0,这个0对应的就是开机的时候,引导界面的第一行,如下图就是Ubuntu(如果什么都不动,这里高亮的应该是第一行Ubuntu,在用户没有动作的时候,过几秒就会用这一项来引导启动)。在高级选项中,还有其他的内核:如果这里我们想把第四行的4.15....

2019-12-10 15:47:48 1275

原创 linux内核中PREEMPT_RT实时补丁的安装

本文参考了两篇博文:https://blog.csdn.net/zzsfqiuyigui/article/details/7621665https://www.jianshu.com/p/8787e45a9e01根据我自己安装的实际情况做了一些小的修改。1、下载内核代码和补丁Kernel:http://www.kernel.org/pub/linux/kernel/P...

2019-12-10 15:27:07 1263

原创 boost::make_transform_iterator的基本用法

boost::make_transform_iterator接受一个迭代器对象作为参数,得到一个boost::transform_iterator。boost::transform_iterator的特别之处在于,可以在dereference原始迭代器的同时,做一些指定的事情,甚至让解引用的结果变成与原始迭代器指向的东西完全不同的值。#include <algorithm> ...

2019-12-06 10:44:33 791

原创 glog没有在-dir_log位置生成日志文件

-dir_log是glog一个内置的gflag,如果不设置的话,默认的日志文件会生成在/tmp目录下。./mytest -dir_log=./logs但是发现设置了以后,运行没有效果,文件还是生成在了/tmp下。main函数源码如下:int main(int argc, char *argv[]) { glog::InitLogging("mytest"); std::co...

2019-11-14 14:35:32 4863 1

原创 WARNING: perf not found for kernel 4.16.18

尝试运行perf,发现没安装$ perf程序“perf”尚未安装。 您可以使用以下命令安装:sudo apt install linux-tools-common按照提示安装了linux-tools-common,然后再运行perf:$ perfWARNING: perf not found for kernel 4.16.18 You may need to inst...

2019-11-13 21:01:09 8326 1

原创 C++ grpc stream message size 调整消息大小限制

在工作中遇到了grpc的stream通信(server通过stream向client返回一个消息的stream),client会收不到消息的情况。发现收不到的这个消息比较大,跟同事讨论说可能是grpc限制了消息的大小,通常是4M。网上搜索了一下,大多数是go的解决方案,和C++的接口名称不太一样,其中帮助比较大的是这一篇C++相关的博客http://www.freesion.com/article...

2019-10-09 16:02:51 6032

原创 查看文件被哪个vim进程打开(查找swap文件的位置)

假设用vim打开了一个叫abc.txt的文件(假设此时值打开了一个vim进程,可以用pgrep vim看到该进程的进程号,用于验证后续找到的vim进程号是否正确)通常可以使用lsof或者fuser这两个命令来查看文件的被占用情况。在该文件的路径下,使用如下命令:(1)lsof abc.txt(2)fuser abc.txt会发现都没有输出。这是因为vim实际上占用的并不是abc.t...

2019-08-22 11:12:29 2026

原创 C/C++中使用pugixml来读写xml文件

reference:http://www.gerald-fahrnholz.eu/sw/DocGenerated/HowToUse/html/group___grp_pugi_xml.htmlxml文件,假设名为hello.xml:<?xml version='1.0' encoding='UTF-8'?><scenarios map="hangzhou"&g...

2019-08-21 20:57:18 3563

原创 检查grpc server是否可连接

分两种情况,一种是普通调用,一种是stream调用。(1)普通调用直接使用返回的status来检查。不过如果请求本身就可能失败,不是因为server没有启动的原因,则可以进一步检查error_message的内容。普通调用下的server可连接性检查,应该也可以使用stream调用描述的方式,可能更加准确,但是没有实验过。grpc::ClientContext context;...

2019-08-19 20:41:56 5639 1

原创 C++标准库 高斯分布(正态分布)随机生成

#include <random>#include <chrono>#include <iostream>int main(void) { // 从epoch(1970年1月1日00:00:00 UTC)开始经过的纳秒数,unsigned类型会截断这个值 unsigned seed = std::chrono::system_clock::no...

2019-08-16 10:56:03 8287

原创 在python里调用C++带参数的类方法

核心思路:python的底层是用C实现的,所以理论上python可以调用C的代码。如果想调用C++的代码,需要另外将C++代码通过extern "C"包含起来,使其命名修饰等符合C的规则然后将C/C++代码打包成一个.so文件(这一步有个坑,我用bazel编译的.so被import到flask项目中时,会导致整个服务以exit code 245退出,但是直接在python脚本里调用是没...

2019-08-01 14:41:50 3118

原创 taskset命令:查看、指定进程运行在哪个cpu上

reference:https://baijiahao.baidu.com/s?id=1592330790387359245&wfr=spider&for=pchttps://www.cnblogs.com/LubinLew/p/cpu_affinity.html1、CPU亲和性(cpu affinity)CPU affinity 是一种调度属性(schedu...

2019-07-19 11:43:35 1803

原创 isolcpu参数 隔离cpu使其不被自动调度(linux 修改boot参数)

我的系统是Ubuntu16.04,以下方法在我的系统上测试有效首先需要说明的是,隔离cpu对用户空间的进程有效,但是对内核的进程无效,所以被隔离的cpu并不是完全空闲的。(参考:https://unix.stackexchange.com/questions/282256/isolcpus-kernel-parameter-has-no-effect-on-ubuntu-16-04-de...

2019-07-19 11:40:28 13099 1

转载 为什么模板函数应该定义在头文件内

参考:https://www.cnblogs.com/cnsec/p/3789824.htmlgeneral的编译链接过程:首先,C++标准中提到,一个编译单元[translation unit]是指一个.cpp文件以及它所include的所有.h文件,.h文件里的代码将会被扩展到包含它的.cpp文件里,然后编译器编译该.cpp文件为一个.obj文件,但是,不一定能够执行,...

2019-05-23 12:09:02 4871 2

翻译 获取protobuf enum变量的字符串名字

假设proto中定义了一个enum枚举:enum UserStatus { AWAY = 0; ONLINE = 1; OFFLINE = 2; }方法一:std::string name = UserStatus_Name(UserStatus::AWAY);(如果UserStatus嵌套在message类型MyMessage内,则使用MyMessa...

2019-05-22 10:19:26 11367

原创 获取另一个脚本中定义的指定变量的值

例如有脚本test.sh,其中定义了两个变量:bag=1log=2有另外一个脚本test2.sh,在其中想获取test.sh的log变量的值,并且test2.sh本身有一个bag变量,不希望这个变量的值被影响到。bag="known"log="unknown"如果直接使用source,会使bag变量被覆盖:bag="known"log="unknown"...

2019-05-15 17:17:59 1456

原创 git拉取远程分支并切换到该分支

整理了五种方法,我常用最后一种,这五种方法(除了第4中已经写了fetch的步骤)执行前都需要执行git fetch来同步远程仓库(1)git checkout -b 本地分支名 origin/远程分支名(2)git checkout --track origin/远程分支名 (这种写法是上面的简化版,效果完全一样)(3)git checkout -t origin/远程分支名(这种写法...

2019-04-19 13:22:11 25879

原创 tmux下ls目录没有颜色

根据网上所说,在~/.tmux.conf中加入:set -g default-terminal "screen-256color" 之后仍然无效。 可以试一下在tmux里面,ls --color可不可以有颜色。如果可以的话,则在~/.bash_profile中增加对ls的alias:alias ls="ls --color"注意,在~/.bashrc中加是无效的,tmux读...

2018-11-05 19:21:40 2156

原创 为啥文件有写权限还是说只读

chattr可以防止关键文件被修改在linux下,有些配置文件是不允许任何人包括root修改的,为了防止被误删除或修改, 可以设定该文件的"不可修改位(immutable)"。 例如: chattr +i /etc/fstab 如果需要修改文件则: chattr -i /etc/fstab 以后再修改文件。

2017-11-26 18:55:54 1783

原创 cedar trie树的基本使用

安装:> wget http://www.tkl.iis.u-tokyo.ac.jp/~ynaga/cedar/cedar-latest.tar.gz> tar zxvf cedar-latest.tar.gz> cd cedar-YYYY-MM-DD> configure> make install使用:#include cedar::da trie;

2017-11-26 18:50:24 1897

原创 在python代码中输出一个字符的unicode编码

如果ch是一个unicode字符:print '\u%04x' % ord(ch)ord(ch)返回的是这个字符的unicode编码的10进制形式,只需要将其按照unicode的格式用16进制打印出来即可例如:上面这个例子中就打印出了"你"、"好"、"a"这三个unicode字符的unicode码。unicode字符就是unicode字符串中的字符,

2017-11-26 18:45:05 22429 1

原创 wchar、char_t、char16_t、char32_t

wchar&wstring来自《C++ primer》The wchar_t type is guaranteed to be large enough to hold any character in the machine’s largest extended character set. The types char16_t and char32_t are intend

2017-11-26 18:34:15 6858 1

原创 [编程珠玑笔记]第12章 取样问题

整理了这一章提到的几个算法,其中蓄水池算法书中没有写,这里放在一起比较一下,出了方法2是C++的代码,其它都是python的实现。问题:程序的输入包括两个整数m和n,其中m1、以特定概率顺序选择每一个数如果要从r个剩余的整数中选出s个,则以s/r的概率选择剩余整数中的第一个整数,然后递归处理剩下的r-1个数。select_num = mremaining =

2016-12-08 11:04:41 268

原创 句法结构可视化工具(成分句法)

这里有一个html版的可视化工具,可以吧BerkeleyParser分析得到的成分分析结果复制到网页的文本框中,然后可以自动显示出句法树结构。同时还有一个句法结构标注的工具,可以在现有句法树上调整其树结构以及节点内容,并且能自动生成调整后的字符串形式的句法结构结果。https://github.com/tanglrHello/SyntacticParsingViewer可视化效

2016-04-22 13:47:07 2462

原创 编程之美1.1

解法一:简单的解法#include void halfcpu();int main(void){ halfcpu();}//2.30GHz,2,300,000,000clk/s,执行一次循环为5条指令,每个时钟周期两条指令//每秒可以循环的次数:2,300,000,000*2/5=920,000,000次//每10ms作为一个时间片来轮流执行循环和sle

2013-07-13 15:48:47 331

空空如也

空空如也

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

TA关注的人

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