首页
学习
活动
专区
工具
TVP
发布

蓝天

专栏作者
526
文章
829224
阅读量
41
订阅数
#微码分享#C++变参字符串格式化函数format_string
在C和C++中,变参格式化函数虽然非类型安全,但却十分便利,因为得到广泛使用。对于常见的size_t类型要用“%zu”,ssize_t用”%zd“,int64_t用“% ”PRId64,uint64_t用“% ”PRIu64,long用"%ld",long long用"%lld",示例: const int64_t datetime = INT64_C(20190124144930); printf("datetime: %" PRId64"\n", datetime); 注意在PRId64前保留一个空格,以避免编译警告 format_string源代码链接: https://github.com/eyjian/r3c/blob/master/utils.cpp https://github.com/eyjian/libmooon/blob/master/src/utils/string_utils.cpp format_string源代码:
一见
2019-03-14
1.2K0
#微码分享#AES算法的C++包装类
AES为Advanced Encryption Standard的缩写,中文名:高级加密标准,在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准,用来替代DES。基于std::string实现的C++包装类,使用得应用AES算法十分简单。完整源代码链接: https://github.com/eyjian/libmooon/blob/master/include/mooon/utils/aes_helper.h https://github.com/eyjian/libmooon/blob/master/src/utils/aes_helper.cpp aes_helper.h头文件
一见
2019-03-14
1.6K0
一个简单的支持MySQL和SQLite3的DB接口
simple_db.zip 相关联代码:https://github.com/eyjian/mooon/tree/master/common_library/include
一见
2018-08-10
6860
Failed connect to github.com:443; No error
任务目标:将线上已有的https://github.com/eyjian/mooon.git克隆到本地的E:\GitHub\mooon目录 问题描述:使用Git的Windows客户端UI工具GitHub执行克隆操作时报错,查看它的日志,难发现问题,于是改用Git的Windows命令行终端Git Shell操作,得到了较为详细的错误信息,基于错误提示解决了问题,过程描述如下。 打开Git Shell,进入本地的E:\GitHub目录,注意不是E:\GitHub\mooon目录,然后执行克隆命令git clone如下: E:\GitHub> git clone https://github.com/eyjian/mooon.git Cloning into 'mooon'... fatal: unable to access 'https://github.com/eyjian/mooon.git/': Failed connect to github.com:443; No error 遇到错误,克隆失败。通过执行telnet github.com 443,发现网络不通,于是想到设置代理,通过baidu找到设置proxy方法: 1) 打开文件.gitconfig,文件位于用户主目录下,执行ls ~即可看到它。假设Win7登录用户名为tom,则位于C:\Users\tom目录下 2)编辑.gitconfig,在文件尾加入以下内容: [http]     proxy = http://www.proxy.com:8080/ [http]顶格写,proxy前保留一个tab,其中www.proxy.com为代理服务器的IP或域名。 完成后,再次执行git clone https://github.com/eyjian/mooon.git,发现成功了。。。 对文件.gitconfig的操作,实际可以借助git命令来完成,而不必直接编辑.gitconfig,对应的子命令是git config --global,如:git config --global user.name "eyjian",则在.gitconfig文件中可以看到如下内容: [user]     name = eyjian 同理,配置proxy命令为:git config --global http.proxy http://www.proxy.com:8080/
一见
2018-08-10
1.9K0
Thrift辅助类,用于简化Thrift编程
CThriftServerHelper用于服务端,CThriftClientHelper用于客户端。 源代码链接:https://github.com/eyjian/mooon/blob/master/mooon/include/mooon/net/thrift_helper.h IDL定义: service PackageManagerService { } 服务端使用示例: CThriftServerHelper _thrift_server_helper; return _thrift_server_helper.serve(FLAGS_package_port, rpc_threads); 客户端使用示例: CThriftClientHelper thrift_client_helper(FLAGS_package_ip, FLAGS_package_port); thrift_client_helper.connect(); // 注意需要处理异常TTransportException/TApplicationException/TException
一见
2018-08-10
1.8K0
GitHub配置示例
GitHub官方的Git Shell和GitHub for Windows配置示例,配置文件“.gitconfig”位于用户主目录下,假设用户名为zhangsan,在Windows7上为:C:\Users\zhangsan\.gitconfig。 [user] 配置登录GitHub的用户名和邮箱 [http] 配置访问GitHub的代理,一些公司内部网经常需要配置,家庭拨号上网直连的则不用 [core] 在Windows和Linux混合编程时经常需要配置,autocrlf=input表示提交时自动将\r\n转成\n,safecrlf = true表示不允许混有\r\n和\n 即可直接修改.gitconfig,也可以通过Git Shell命令,如:git config --global core.autocrlf=input
一见
2018-08-10
3190
远程执行命令的C++实现CLibssh2
CLibssh2可以帮助实现相当于Linux的ssh命令的功能。CLibssh2基于libssh2库(http://www.libssh2.org)实现,不过libssh2的使用较为复杂,而CLibssh2通过封装提供了简单的接口,即可以代码中实现远程执行命令。 头文件:https://github.com/eyjian/mooon/blob/master/common_library/include/mooon/net/libssh2.h 实现文件:https://github.com/eyjian/mooon/blob/master/common_library/src/net/libssh2.cpp 测试代码:https://github.com/eyjian/mooon/blob/master/common_library/test/net/ut_libssh2.cpp
一见
2018-08-10
2K0
不再担心日志文件过大:通用日志滚动脚本
log_rotater.zip #!/bin/sh # https://github.com/eyjian/mooon/blob/master/mooon/shell/log_rotater.sh # Writed by yijian on 2012/7/22 # # Linux自带的工具logrotate使用稍复杂,但功能强大 # # 本脚本功能: # 1) 实现一个通用的按大小的日志滚动 # 2) 要求日志文件扩展名为“.log”,否则请稍修改代码 # 3) 支持处理多个目录下
一见
2018-08-07
1.8K0
基于zookeeper的主备切换方法
继承CZookeeperHelper即可快速实现主备切换: https://github.com/eyjian/mooon/blob/master/mooon/include/mooon/net/zookeeper_helper.h zookeeper的ZOO_EPHEMERAL节点(如果ZOO_EPHEMERAL满足不了需求,可以考虑和ZOO_SEQUENCE结合使用),在会话关闭或过期时,会自动删除,利用这一特性可以实现两个或多节点间的主备切换。 实现方法: 1)在进程启动时调用zookeeper_init()初始化: bool X::init_zookeeper() {     // 第一次调用时_clientid总是为NULL,     // 状态为ZOO_EXPIRED_SESSION_STATE时,需要重新调用zookeeper_init,     // 这个时候可传入的_clientid为前一次zookeeper_init()产生的_clientid     // 请注意zookeeper_init()是一个异步调用,返回非NULL并不表示会话建立成功,     // 只有当zk_watcher中的type为ZOO_SESSION_EVENT和state为ZOO_CONNECTED_STATE时,     // 才真正表示会话建立成功。     _zhandle = zookeeper_init(zk_hosts, zk_watcher, 5000, _clientid, this, 0);     if (NULL == _zhandle)     {         MYLOG_ERROR("init zookeeper failed: %s\n", zerror(errno));         return false;     }     MYLOG_INFO("init zookeeper(%s) successfully\n", zk_hosts);     return true; } 2)进入工作之前,先尝试切换成主,只有成功切换成主后才进入work bool X::run() {     while (true)     {         int num_items = 0;         // 备机最简单的方法是每隔一定时间,如1秒就尝试转成master,         // 如果不使用轮询,则可以采用监视_zk_path的方式         mooon::sys::CUtils::millisleep(1000);         // 如果不是master,则尝试转成master,如果转成不成功则继续下一次尝试         if (!is_master() && !change_to_master())             continue;         do_work();     } } bool X::is_master() const {     return _is_master; } bool X::change_to_master() {     static uint64_t log_counter = 0; // 打log计数器,备状态时的日志输出     // ZOO_EPHEMERAL|ZOO_SEQUENCE     // _myip为本地IP地址,可以通过它来判断当前谁是master     // _zk_path值示例:/master/test,注意需要先保证/master已存在     int errcode = zoo_create(_zhandle, _zk_path.c_str(), _myip.c_str(), _myip.size()+1, &ZOO_OPEN_ACL_UNSAFE, ZOO_EPHEMERAL, NULL, 0);     // (-4)connection loss,比如为zookeeper_init()指定了无效的hosts(一个有效的host也没有)     if (errcode != ZOK)     {         _is_master = false;         // 减少为备状态时的日志输出         if (0 == log_counter++ % 600)         {             MYLOG_DEBUG("become master[%s] failed: (%d)%s\n", _zk_path.c_str(), errcode, zerror(er
一见
2018-08-02
1.9K0
一种基于Redis的10行代码实现IP频率控制方法
优点:可支持海量访问的频率控制,只需要增加Redis机器,单个Redis节点(只占用一个cpu core)即可支持10万/s以上的处理。 基于IP频率限制是种常见需求,基于Redis可以十分简单实现对IP的频率限制,具体手段为利用Redis的key过期和原子加减两个特性。 以IP作为key,频率为key过期时长,比如限制单个IP在2秒内频率为100,则key过期时长为2秒,基于r3c(a Redis Cluster C++ Client)的实现大致如下:
一见
2018-08-02
5350
没有更多了
社区活动
腾讯技术创作狂欢月
“码”上创作 21 天,分 10000 元奖品池!
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档