
C/C++
岚天逸剑
这个作者很懒,什么都没留下…
展开
-
取得std::ifstream对象的文件描述符
【代码】取得std::ifstream对象的文件描述符。原创 2023-09-05 14:18:56 · 490 阅读 · 0 评论 -
chatGPT用C++写的HMAC-SHA256函数
chatGPT用C++写的HMAC-SHA256函数原创 2023-08-15 15:57:28 · 467 阅读 · 0 评论 -
C++不同标准兼容性问题集
【代码】C++不同标准兼容性问题集。原创 2023-07-27 09:42:12 · 438 阅读 · 0 评论 -
使用gcc-13.1.0编译安装thrift-0.18.1
注意如果不指定 --with-libevent,则不会构建 TNonblockingServer,–with-boost 也需要指定。接下来执行 make 编译 和 make install 安装即可。原创 2023-07-25 17:06:58 · 510 阅读 · 0 评论 -
一键编译和安装 gcc 脚本
脚本自动下载依赖、编译安装依赖和下载 gcc、编译 gcc 和安装 gcc。直接执行即可,执行前需要确保机器上的 wget、gunzip、bunzip2、cmake 可用。整个过程将耗时一两小时以上。原创 2023-07-24 19:29:20 · 245 阅读 · 0 评论 -
mpc库问题导致gcc编译失败
【代码】mpc库问题导致gcc编译失败:Building GCC requires GMP 4.2+, MPFR 3.1.0+ and MPC 0.8.0+.原创 2023-07-24 15:23:42 · 861 阅读 · 1 评论 -
debug方式使用stl
-D_GLIBCXX_DEBUG编译时,指定宏 _GLIBCXX_DEBUG 即以 Debug 方式使用 STL 库,效果如下:#include <string>#include <stdio.h>int main(int argc, char* argv[]) { std::string str; str = "123"; printf("(%zd)%s\n", str.size(), str.c_str()); .原创 2022-04-25 11:34:17 · 1222 阅读 · 0 评论 -
编译 thrift-0.14.2 的 C++ 版本
编译命令:./configure --prefix=/usr/local/thrift-0.14.2 --with-cpp=yes --with-php=no --with-python=no --with-qt5=no --with-c_glib=no --with-java=no --with-erlang=no --with-nodejs=no --with-nodets=no --with-lua=no --with-py3=no --with-perl=no --with-php_extensi原创 2021-09-05 09:53:01 · 589 阅读 · 0 评论 -
librdkafka 退不出来问题分析
故障时的线程(gdb) info thread Id Target Id Frame 8 Thread 0x7f469fa66700 (LWP 31069) "rdk:main" 0x00007f46a1c83027 in pthread_join () from /lib64/libpthread.so.0 7 Thread 0x7f469ea64700 (LWP 31071) "rdk:broker1" 0x00007f46a0b5cc5d in pol.原创 2021-07-28 17:29:16 · 683 阅读 · 0 评论 -
多线程程序如何简单高效地读取配置中心上的配置?
本文限定为主动从配置中心读取配置方法,不限定配置中心类型,比如可使用DB作为配置中心。程序和配置中心间存在网络开销,因此需避免每次业务处理或请求都从配置中心读取配置。规避网络开销,可采取本地缓存配置,每隔指定时间只读取一次配置中心,比如每秒读取一次配置中心。假设每秒读取一次配置中心,这样每次的开销减少到每秒只有一次网络开销,此时可观察到性能毛刺,这毛刺是因为每次读取配置中心时的性能抖动(下降)。需要将读取配置中心从业务线程中移除,为此引入配置线程,由配置线程专门负责从配置中心读取配置,业务线程不直接原创 2020-12-18 15:53:55 · 392 阅读 · 2 评论 -
C++20新线程 jthread 体验代码
// C++20新线程 jthread 体验代码//// 编译(编译本代码,-pedantic 不是必须的):// g++ -std=c++20 -Wall -pedantic -pthread -static-libstdc++ C++20_jthread.cpp -o C++20_jthread//// 要求GCC10及以上版本,// 可使用GCC的Docker镜像静态链接stdc++库,以方便在非GCC10环境运行。//// docker pull gcc// docker run原创 2020-09-09 15:19:04 · 824 阅读 · 0 评论 -
C++鲜为人知的符号
目录目录 11. 引言 12. 少为人知的符号表1 12.1. 符号表 12.2. 代码示例 23. 少为人知的符号表2 23.1. 符号表 23.2. 代码示例 3附:C++的59个关键词列表 3引言这些鲜为人知的C++符号,可直接在代码中使用,但实践中不推荐这么做,可作为茶余饭后的乐趣了解C++的另一面。虽然它们鲜为人知,但却不是GNUg++独有的,而是C++标准定义的,找一本C++标准书或pdf文档看看,就可以见到它们赫然在目。(注:C++17标准将干掉这些鲜为人知的符号)原创 2020-07-20 20:19:17 · 454 阅读 · 0 评论 -
将资源文件编译成源代码文件
目的:简化使用,比如省去了读取配置或者代码中直接大段难以维护的定义。常用场景:Schema、Lua、SQL等Linux 自带了资源编译工具 xxd,可将任意文件编译成 c 源代码文件。常用命令格式:xxd -i 源文件 目标文件CMake应用示例1(将 test.lua 编译为 test.cpp):# test.lua 编译成 cpp 文件exec_program( xxd ${CMAKE_CURRENT_SOURCE_DIR} ARGS -原创 2020-07-20 17:20:14 · 693 阅读 · 0 评论 -
获取指定目录大小函数源码
static __thread off_t dirsize; // 目录大小static int _du_fn(const char *fpath, const struct stat *sb, int typeflag){ if (FTW_F == typeflag) dirsize += sb->st_size; return 0;}// 获取指定目录大小函数(线程安全,但仅适用Linux)// 遍历方式实现,低性能off_t du(const原创 2020-07-20 14:52:12 · 255 阅读 · 0 评论 -
CMake 方式编译 gRPC
首先,下载 grpc 源代码到本地:git clone https://github.com/grpc/grpc.git如果只想下载指定版本的,如以版本“1.27.3”为例,可改成如下语句:git clone -b v1.27.3 https://github.com/grpc/grpc.git上列操作成功完成后,grpc 源码的第三方依赖目录 third_party 实际是空的,...原创 2020-04-01 12:09:33 · 4935 阅读 · 0 评论 -
C程序中的raise和kill两个函数有何不同?
在Linux上执行“man raise”,即可看到两者的区别: 函数raise 函数kill 函数性质 LIBC库函数, raise基于系统调用kill或tgkill(如果内核支持)实现 系统调用,不是LIBC库函数 单线程程序 ...原创 2020-01-16 14:34:20 · 930 阅读 · 0 评论 -
运行程序时报错“Value too large for defined data type”
下列错误,可能是因为在64位上跑32位程序: Value too large for defined data type 此错误对应的出错代码为EOVERFLOW,原因可能是目标文件超过2GB大小。下列代码可能会导致这个错误出错(为何说是可能,本节最后部分解释): // g++ -g -o x x.cpp -m32 #include <err...原创 2020-01-13 15:33:46 · 4121 阅读 · 0 评论 -
GLIBC中的库函数fflush究竟做了什么?
目录目录 11. 库函数fflush原型 12. FILE结构体 13. fflush函数实现 24. fclose函数实现 4附1:强弱函数名 5附2:属性__visibility__ 6 库函数fflush原型先瞧瞧fflush的原型: #include <stdio.h> int fflush(FILE *stream);...原创 2019-11-14 12:48:27 · 1103 阅读 · 0 评论 -
C++标准库中的std::endl究竟做了什么?
先抓出std::endl的源代码: /** * @file ostream * @brief Write a newline and flush the stream. * * This manipulator is often mistakenly used when a simple newline is * des...原创 2019-11-13 16:15:20 · 1440 阅读 · 0 评论 -
C++ CGI报“资源访问错误”问题分析
一线上CGI偶发性会报“资源访问错误”,经过分析得出是因为CgiHost没有读取到CGI的任务输出,即CGI运行完成后连HTTP头都没有一点输出。然而实际上,不可能没有任何输出,因为CGI至少有无条件的HTTP头部分输出,因此问题是输出丢失了。CGI和CgiHost间是通过重定向CGI的标准输出到Unix套接字进行交互的,如果这个套接字坏了,或者CGI的标准输出关闭了,自然不会有任何输出...原创 2019-11-08 10:44:57 · 1549 阅读 · 0 评论 -
URLTester一个URL测试工具
URLTester是一个URL测试工具,最主要的一个特色是:当一个域名对应多个IP地址时,不用修改hosts文件,即可完成对这个域名映射到不同IP地址的测试。并支持域名和IP地址的批量测试,以及测试结果的统计输出功能。最新版本为2.3.1,有关URLTester的最新信息发布在http://aquester.cublog.cn上。网址:http://blog.chinaunix.net/u原创 2008-08-18 21:34:00 · 10083 阅读 · 0 评论 -
基于C++的纯面向对象的通用高性能大并发TCP-SERVER/CLIENT开发框架实践系列之基础篇
基于C++的纯面向对象的通用高性能大并发TCP-SERVER/CLIENT开发框架实践系列之基础篇yijian 2008-12-21 technologier@126.com1. 前言本篇主要介绍Servant和Client都会使用到的公共基础,主要包括两大部分:一是对线程相关的封装;另是对Socket相关的封装。这些基础类间的关系比较简单,但是和Server/Client框架息息原创 2008-12-21 16:59:00 · 10042 阅读 · 0 评论 -
基于C++的纯面向对象的通用高性能大并发TCP-SERVER/CLIENT开发框架实践系列之前言篇
基于C++的纯面向对象的通用高性能大并发TCP-SERVER/CLIENT开发框架实践系列之前言篇yijian 2008-12-21 technologier@126.com1. 回首工作几年了,没什么沉淀,不是忙工作就是忙着休息,大四和工作的第一年还偶尔在一些技术论坛写写文章,但是这都是N年前的事了,以前经常动手编写小程序的习惯也在三四前中断了。如今已经是三十而立之人,面原创 2008-12-21 17:02:00 · 9977 阅读 · 5 评论 -
文件和SOCKET跨线程安全吗?
?原创 2010-08-22 13:54:00 · 11269 阅读 · 0 评论 -
解决C++代码单元测试中的难题-不可验证和IO调用
在做C++程序的单元测试时,大家经常会遇到两个问题:1.不方便验证测试结果,原因是因为不可访问保护和私有类成员2.对于需要访问的connect、receive、send等不好绕过这里介绍两种方法,即可解决:1.在编译单元测试代码时,加上UNIT_TEST宏(名字可以为其它你喜欢的),并将private定义成public,即:#define private public这样就可以测试代码就可以随意访问类的任何成员了,单元测试就是要做白盒测试,将内部看得清清楚楚2.对于IO问题,只需要从被测试再继承一下,然后重原创 2011-03-31 10:14:00 · 10735 阅读 · 0 评论 -
Linux上制作可执行的共享库示例
http://bbs.hadoopor.com/thread-3313-1-1.htmlx.cpp为共享库libx.so的实现,b.cpp为可执行b的实现。x.cpp文件内容:#include #include // 使用C++作为编译器void woo(){ printf("woo/n");}// foo作为共享库的入口,必须为C函数extern "C" foo(){ printf("foo/n"); exit(0); // 请注意这里必须调用,否则输出foo后会有段错误}b.cpp文件原创 2011-06-02 11:11:00 · 10601 阅读 · 0 评论 -
开源分布式平台-mooon系统结构
http://code.google.com/p/mooon分层结构系统结构编程模式原创 2011-08-13 19:31:27 · 8637 阅读 · 0 评论 -
代码规范:换行对齐问题
今天有同事看了我写的代码,问为何逗号要放在前面,以下列两段代码为列:代码段一void function(int a , char b , short c , long d , struct* e){}注:这里的排版有点问原创 2011-10-26 19:31:25 · 8965 阅读 · 0 评论 -
Linux内核list&hlist解读
全文下载: Linux内核list&hlist解读.pdf 目录1. 前言 22. 通用宏 22.1. typeof 22.1.1. 定义 32.1.2. 用途 32.1.3. 示例 32.2. offset_of 32.2.1. 定义 32.2.2. 作用 32.2.3. 原理 3原创 2012-06-05 18:38:33 · 10707 阅读 · 0 评论 -
mooon-agent核心设计图
说明:以下类图只画出了基础的核心类和主要关系,弱的依赖关系没有画出来。应用场景:在很多应用中,会有一个中心节点(在这里叫作Center,它可以是Master,也可以不是),每个节点都要和Center建立通讯,两者之间会有心跳等,Center还可能下发一些控制命令,这个模型是定的,只是具体的命令字会存在差异和不同的处理。mooon-agent就是为解决这个问题而设计的,提供一原创 2012-06-05 18:40:08 · 7829 阅读 · 0 评论 -
简约的网络字节序处理
实现下载: inttypes.txt 处理网络程序的字节序,是件非常简单的事,但每次使用时,都显示调用ntohl之类的转换,仍是一件麻烦的事。怎样做更简单了?只需要定义出各种网络字节序的类型即可,而这些类型和主机字节序兼容。标准的网络字节序是大字节序,在当今小字节序横行的时代,建议以小字节序作为网络字节序,只要通讯双方约定好,效果是一样的,但会省去很多转换,原创 2012-06-05 18:40:59 · 11956 阅读 · 0 评论 -
优雅的让一个类在线程安全和线程非安全间切换
一个良好的多线程库,不应当一刀切的全加锁。因为有些时候,虽然是多线程环境,但可能依照设计一个类只会被一个线程操作,这个时候加锁是多余的,纯浪费性能,但另一些场景又需要它是线程安全的。假设有一个类X:class X{public: void xoo();};这里总结几个常见的做法:1.本身不加锁,由调用者来加锁,坏处是如果多数场景都是加锁的,由会原创 2012-07-15 12:47:35 · 10786 阅读 · 0 评论 -
链接静态库的顺序问题
原创 2012-07-24 16:16:32 · 9010 阅读 · 2 评论 -
进程绑定CPU简单应用
原创 2012-07-24 16:17:59 · 10556 阅读 · 0 评论 -
使用可重入函数进行更安全的信号处理
转载 2012-07-24 16:18:06 · 749 阅读 · 0 评论 -
Linux下可以替换运行中的程序么?
转载 2012-07-24 16:18:07 · 854 阅读 · 0 评论 -
Linux下select调用引发的血案
Select函数使用简单,其工作原理大家通常也知道,但是在实际的使用过程中可能并没有严格遵守,而且确实也比较难以完全遵守,除非不使用它。Select采用一个bit表,每个fd对应表中的一个bit位,宏FD_SETSIZE为表的大小,添加到fd_set中的fd值必须小于FD_SETSIZE,否则就会越界,假设有如下一段代码:fd_setreadfds;FD_ZERO(&...原创 2012-07-24 16:18:21 · 15297 阅读 · 0 评论 -
Oops错误
转载 2012-07-24 16:18:23 · 4796 阅读 · 0 评论 -
Linux系统中使用GCC CPU参数优化代码编译
转载 2012-07-24 16:18:30 · 2755 阅读 · 0 评论 -
Linux 内核中的 GCC 特性
转载 2012-07-24 16:18:34 · 1766 阅读 · 0 评论