c/c++
SoulNov23
那些我们说着永远不分离的朋友,早已散落在天涯,时光的洪流中,我们总会长大。
展开
-
spdlog和fork冲突问题
遇到个问题,使用spdlog的async_logger打印日志,一直都是正常的,但是调用了fork之后就不打印了先使用打印TODO大法,使用的spdlog的default_logger打印,走的console打印,结果发现console打印没问题,就async_logger在fork之后就不打印了使用strace -f运行看一下这里的write 1就是console打印的,在fork前后都是正常的,但是write 3只在fork之前调用了,fork后没有调用,直接卡在了futex FUTEX原创 2022-02-19 21:41:23 · 918 阅读 · 0 评论 -
spdlog封装自己的日志库
先上日志配置定义struct logger_config { std::string name = "run_logger"; spdlog::level::level_enum level = spdlog::level::trace; std::string format = "[%Y-%m-%d %H:%M:%S.%f] [%P] [%^%l%$] [%s:%# %!()] %v"; std::string file_name = "../log/run.log";原创 2022-02-19 21:02:01 · 1951 阅读 · 4 评论 -
escape string实现
void escape_string(const string& sql, string& dest) { char escape; for (auto character : sql) { switch (character) { case 0: /* Must be escaped for 'mysql' */ escape = '0'; break;原创 2021-10-08 17:35:29 · 628 阅读 · 0 评论 -
线程安全的单例模式
把构造函数私有化,对外提供一个静态的成员函数获取对象实例,这是我们对单例模式的最简单印象,但是如果多线程同时获取对象实例的时候,我们首先想到的是加锁class Singleton { private: static Singleton* m_instance; Singleton(){} public: static Singleton* ge...原创 2016-07-13 15:03:32 · 585 阅读 · 0 评论 -
宏定义的巧用
1. #用来标记参数是字符串#defineSTRING(X) #Xconst char *str = STRING(test);cout << str << endl;这里str的内容就是"test"2. ##用来连接参数#define AND(X) X##Xint num = AND(8);cout << num <<...原创 2019-03-27 11:50:10 · 388 阅读 · 0 评论 -
把函数返回值转为异常处理机制
我们这里要使用的是#include <stdexcept>,可以参考官方文档 先举一个例子,比如调用recv的函数返回值处理:int ret = recv(fd...);if (ret > 0){}if (ret == 0){}if (ret == -1){ //EAGAIN/EWOULDBLOCK提示你的应用程序现在没有数据可读请稍后再试 if (...原创 2018-09-04 13:00:17 · 835 阅读 · 0 评论 -
#define MAX(a, b, ……)
用宏定义MAX(a,b)求两个数最大值:#define MAX(a,b) a>b?a:b用宏定义MAX(a,b,c)求三个数最大值:#define MAX(a,b,c) (a>b?(a>c?a:c):(b>c?b:c))用宏定义MAX(a,b,c,d)求四个数最大值:#define MAX(a,b,c,d) (a>b?a:b)>(c>d?c:d)?(a>b?a:b):(c>d?c:d)原创 2017-03-06 15:46:31 · 9597 阅读 · 3 评论 -
拷贝构造函数可以访问私有数据成员
class CExample{public: CExample(){pBuffer=NULL; nSize=0;} ~CExample(){delete pBuffer;} CExample(const CExample&); void Init(int n){ pBuffer=new char[n]; nSize=n;}private: char *pBuffer; ...原创 2016-07-13 10:55:55 · 6279 阅读 · 5 评论 -
不调用C/C++的字符串库函数,请编写函数strcpy
已知strcpy函数的原型是char *strcpy(char *strDest, const char *strSrc);其中strDest是目的字符串,strSrc是源字符串。(1)不调用C++/C的字符串库函数,请编写函数strcpychar*strcpy(char*strDest,constchar*strSrc){a...原创 2016-07-13 11:31:58 · 6487 阅读 · 4 评论 -
linux c使用system调用shell脚本
system的原理其实就是调用fork创建子进程去执行shell命令,然后返回最后一条shell命令的状态值。linux下man system可以看到返回值说明: 1.如果返回值等于-1就是system函数执行失败,准确的说是fork创建子进程失败。 2.shell执行最后一条语句的状态值放在返回值的低8位,使用WEXITSTATUS宏可以获得状态值。 3.使用WIFEXITED宏取返回值判断原创 2017-08-05 12:48:47 · 6459 阅读 · 0 评论