- 博客(49)
- 收藏
- 关注
原创 recv非阻塞接收的处理
recv非阻塞接收,recv返回的ret通常有3种情况,ret = 0 / ret < 0(即-1) /ret > 0ret > 0 是正常接收到字节数关键是ret == 0 和 ret == -1这两种情况要不要分开写还是统一考虑需要说明的是,当ret = -1时,说明发生了错误,错误号保存在errno中,通过errno可以分析出错误原因。但是,对于errno为EAGAIN (EWOULDBLOCK) 和 EINTR 的这两个情况,是不需要处理的,继续调用recv。除了这两种情况的
2021-05-19 13:42:44 4339
原创 {()}的用法
@TOCkernel 经常出现的({})本文跟编译原理的语法分析有关,需要清楚语句和表达式的两个基本概念Statements 语句The statements of a C program control the flow of program execution.包括Expression Statement:x = ( y + 3 ); /* x is assigned the value of y + 3 */x++;
2021-05-12 08:34:01 22750
原创 linux系统限制
linux系统限制一次偶然的共享内存打开失败openulimitiniparser一次偶然的共享内存打开失败int shm_fd;shm_fd = shm_open(shm_name, O_CREAT | O_RDWR | O_LARGEFILE, S_IWUSR | S_IRUSR);if(shm_fd == -1){ fprintf(stderr, "open shm failed errno[%d] [%s]\n", errno, strerror(errno)); ret
2021-01-07 13:55:16 304 1
原创 c++使用遇到的问题
1. 不能使用enum作为unordered_map键值2. c++ 不能函数调用传递固定大小数组3. gdb 时libso等看不到详细信息
2020-12-16 23:47:37 138
原创 不能使用枚举类作为unordered_map键
I use a functor object to calculate hash of enum class:struct EnumClassHash{ template <typename T> std::size_t operator()(T t) const { return static_cast<std::size_t>(t); }};Now you can use it as 3rd template-par
2020-12-16 23:44:57 798
原创 SCL 使用
scl --list / scl -lscl --help / scl -hscl enable <scl-package-name> <command>scl enable devtoolset-4 bashexit
2020-10-14 01:38:29 666
原创 C++ map和set与数据库联系
实际上,c++的map可以看是数据库,其中map的key是主键,value就是主键对应的那条记录的集合。主键是唯一的
2020-08-09 00:04:36 129
原创 gcc编译错误 ‘xxx’未声明
看一下报错的头文件的include 顺序通常是顺序没有拍好,不行你声明一个变量试试。如果你定义一个变量,就会报重定义错误,说明确实是没有前向声明的问题
2020-07-17 14:18:20 666
转载 SQL 的 group by和聚合函数(很好理解版)
为什么不能够select * from Table group by id,为什么select后面一定不能是*,而只能是某一个列或者某个列的聚合函数,group by 多个字段可以怎么去很好的理解呢?===正文开始===先来看下表1,表名为test:表一 testid name number 1 aa 2 2 aa 3 3 b...
2020-05-08 17:18:45 181
原创 Linux下阻塞和非阻塞读写
Linux下阻塞和非阻塞读写阻塞读非阻塞读阻塞读ssize_t ret;vhile (len != 0 && (ret = read(fd, buf, len))!=0) { if (ret = -1) { if (errno == EINTR) continue; perror("read"); ...
2020-04-13 14:01:02 979
原创 深入理解c格式化输出
格式化输出考察了不仅考察各种数据类型的转换以及你对内存的理解首先,要很清楚各个不同数据类型的大小,这个做面向对象的基础#include <stdio.h>printf("size of int:\t\t[%d]\n", sizeof(int));printf("size of long:\t\t[%d]\n", sizeof(long));printf("size o...
2020-03-27 15:41:39 842
原创 FreeSSHD的配置
内含多坑项目需求:定时将内网的Linux客户端文件定时上传到公网阿里云Windows服务器使用工具:FreeSSHD具体过程:1、FreeSSHD下载地址http://www.freesshd.com/?ctt=download2、确保阿里云开放了22端口,如果不用22端口,检查一下其他端口是否打开,使用telnet命令telnet 39.xxx.xxx.xxx po...
2020-03-25 12:34:56 3373
原创 左值/右值与应用
关于什么是左值、什么是右值,可以参考光放定义https://en.cppreference.com/w/cpp/language/value_category当第一次接触时,确实搞不清楚。下面将对左值和右值的用法进行剖析,反向理解什么是左值、右值。程序的数据一般放在内存,那么需要用到的时候,直接取用。例如int a = 10;当我们需要使用a这个名字所代表的内存值,通过a就可...
2020-03-22 18:50:44 164
原创 const 变量
本文根据的是msvc程序运行的结果,代码如下#include <iostream>const static int a = 99;int ab = 11;class MyClass{public: MyClass(); ~MyClass(); const int a;private:};MyClass::MyClass():a(9){}...
2020-03-22 17:47:05 731
原创 [Shell命令] tar -cvf -xvf 打包解包文件夹
压缩文件夹 xiaoq,命名为xiaoq.tartar -cvf xiaoq.tar xiaoq/ 解压文件夹tar -xvf xiaoq.tar
2020-02-21 09:48:43 6192
原创 C++细节1:无符号扩展和符号扩展
针对无符号整型和有符号整型int 最高位是0的话,全部补充为0。最高位是1的话,全部补充为1unsigned 由低位扩展到高位 全部补充为0sprintf(s, fmt, ...)例如short si = -1;sprintf(s, "%08X", si);会进行符号扩展,产生FFFF FFFFsprintf(s, "%08X", (unsigned short)s...
2020-01-21 13:15:02 715
原创 GDB 项目调试 常用
某一项目下代码文件的打断点b xxx.cpp:行号查看断点信息info breakpoints清除所有断点clear查看断点上下文信息list查看变量p 变量delete #删除所有breakpoints,watchpoints和catchpointsdelete bnum #删除断点号为bnum的断点p m_...
2020-01-17 10:02:10 305
原创 日志
感觉这周很忙很忙,主要是因为做一个网络这一块部署需要做一个rawsocket,说是绑定某个网卡获取数据,类似tcpdump -i eth2020-01-201、处理16、17号的日志FQR问题。发现是登录失败,原来的代码在connection后订阅所有的合约,导致又许多错误日志。现在处理结果是只有登录成功才订阅所有需要订阅的合约2、无法下单。原因是使用了spin锁,但是...
2019-12-19 23:18:49 75
原创 git的操作
查看远程仓库git remote -v重置远程仓git remote set-url origin http://jcode.cbpmgt.com/git/<your rep name>.git/修改已提交的commentgitcommit--amend查看已提交暂存区的文件差异git diff --staged回滚暂存区的...
2019-12-19 15:43:59 60
原创 gcc/g++编译的那点事
用多了IDE,有时候总是会忘记编译的命令,特此记录下来gccgcc -o hello hello.c -I /home/hello/include -L /home/hello/lib -lword-I 是头文件目录-L 是.c/.cpp/.so等目录-l 是库名,上面的lword对应libword.so,表示在lib目录下寻找libword.so文件(如果gcc编译选项加入...
2019-12-17 19:23:33 98
原创 #pragma用法大全
https://blog.csdn.net/qq_27870421/article/details/99305970不同编译器https://www.zhihu.com/question/23789676?sort=createdLLVMhttps://www.jianshu.com/p/1367dad95445MSVC编译器对应的VS_MSC_VER是微软公司...
2019-12-05 15:48:34 124
原创 定时器
定时器并不是一种并发[线程],而是一种延迟,是一种异步,由当前线程执行,即如果定时器任务中有阻塞,会阻塞主线程。alarmgettimer/settimer共同点:使用信号;不同点:settimer可以自动重启和有三个独有模式,并且时间精度不仅仅只有秒。#include <sys/time.h>int settimer (int which, ...
2019-12-01 17:00:15 178
原创 基于epoll的并发服务器编程
这一篇文章主要是理清服务器和客户端的建立通信的流程,整个通信是在网络层(即ip协议以及其上的传输层和应用层)。不明白的话需要先了解网络7层模型、对应的报文格式和不同层的封装。下面主要围绕图11-14讲述并深入探讨服务器socket#include <sys/types.h>#include <sys/socket.h>int socket(int...
2019-12-01 15:24:33 211
原创 C/C++ time处理及其相互转换
C 的时间time_point时间单位默认是秒,绝对时间获取的时间点都是相对新纪元。相关概念:新纪元:1970年1月1日00:00:00 UTC(GMT)#include <time.h>typedef long time_t //时间点,秒单位time_t time(time_t *t) //返回自从新纪元以来流逝的秒数,将当前时间点写入到t/****...
2019-12-01 01:25:41 3976
原创 CMAKE
学习CMAKE的语法、用法即可FATAL_ERROR 是错误关键字WARNING 是警告关键字STATUSmessage([<mode>] "message to display" ...)MESSAGE(STATUS "Project Directory: ${PROJECT_SOURCE_DIR}")-- Project Directory: /home...
2019-11-28 16:27:26 68
原创 计算机的快速 二进制运算
对一个数判断是否为2的幂size & (size - 1) true说明不是2的幂,false说明是2的幂。2的幂有一个特点,就是只有一个1,其他都是0.而2的幂-1就会除了高位和它本身那位为0,其他的都为1.k对size取模运算(取余运算)都可以转为 k跟size做与运算。kfifo->in % kfifo->size 可以转化为kfifo->in &am...
2019-11-22 14:16:02 614
原创 std::thread的join和detach
C++中的thread对象通常来说表达了执行的线程(thread of execution),这是一个OS或者平台的概念。thread一旦创建,就开始执行,并且与创建它的线程有一定的关系。thread创建后,需要在调用线程中需要指明是join还是detach,否则会发生错误。1、当thread::join()函数被调用后,调用它的线程会被block,直到线程的执行被完成。基本上,这是一...
2019-11-21 12:19:54 4596
原创 ofstream基本用法
来源:https://zh.cppreference.com/w/cpp/io/basic_ofstream/basic_ofstream#include <fstream>#include <utility>#include <string>int main(){ std::ofstream f0; std::ofstr...
2019-11-20 23:50:58 2895
原创 CPU缓存
利用了局限性原理由于数据的局限性,CPU往往需要在短时间内重复多次读取数据,内存的运行频率自然是远远跟不上CPU的处理速度的,怎么办呢?缓存的重要性就凸显出来了,CPU可以避开内存在缓存里读取到想要的数据,称之为命中(hit)。L1的运行速度很快,但是它的数据容量很小,CPU能在L1里命中的概率大概在80%左右——日常使用的情况下;L2、L3的机制也类似如此,这样一来,CPU需要在内...
2019-11-20 13:23:05 179
原创 TBB简介和一个简单的示例
TBB组成TBB里的内容大致可以分为以下几类:通用并行算法这是TBB里最主要的一大部分,比如示例里的parallel_for就是这部分的一个算法TBB提供了parallel_for,parallel_while,parallel_reduce等算法,应用于不同的并行算法场景并发容器这是对常见容器的线程安全版本的实现,同时考虑到performance的要求,提供了细粒度的锁机制,...
2019-11-20 09:18:06 1644
原创 Windows CreateEvent函数在多线程中使用及实例
HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes, BOOL bManualReset, BOOL bInitialState, LPCSTR lpName);lpEventAttributes:指向SECURITY_ATTRIBUTES结构体,此结构体决定函数的返回句柄是否可以让子进程继承。如果这个参数为NU...
2019-11-19 19:33:43 379
原创 C++的回调技术 std::bind+std::function
参考自《Linux多线程服务端编程》以及muduo源码,对其中的一些实现细节有着十分深刻的印象,尤其是使用std::bind和std::function的回调技术。可以说,这两个大杀器简直就是现代C++的“任督二脉”,甚至可以解决继承时的虚函数指代不清的问题。在此详细叙述使用std::bind和std::function在C++对象之间的用法,用以配合解决事件驱动的编程模型。本文组成:1....
2019-11-19 15:45:56 1057
原创 TBB之concurrent_hash_map
Intel TBB 提供高并发的容器类,Windows或者Linux线程能使用这些容器类或者和基于task编程相结合(TBB)。一个并发容器允许多线程同时对容器访问和更改条例,典型的C++STL容器类不允许 并发更新,尝试并行更改他们引起恶化容器。STL容器能使用互斥锁来包装,目的让他们安全访问,通过只让一个线程同时操作一个容器,但是这种方式消除了并行,限制了并行提速。Intel TBB提...
2019-11-19 10:37:24 1945
转载 C++中atomic 数据类型操作
所谓的原子操作,取的就是“原子是最小的、不可分割的最小个体”的意义,它表示在多个线程访问同一个全局资源的时候,能够确保所有其他的线程都不在同一时间内访问相同的资源。也就是他确保了在同一时刻只有唯一的线程对这个资源进行访问。这有点类似互斥对象对共享资源的访问的保护,但是原子操作更加接近底层,因而效率更高。在以往的C++标准中并没有对原子操作进行规定,我们往往是使用汇编语言,或者是借助第三方的线程...
2019-11-18 19:04:37 1901
原创 netstat输出内容详解
netstat 输出内容详解1.列出所有 tcp与udp 端口netstat -anputActive Internet connections (servers and established)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program na...
2019-11-08 12:15:13 654
原创 大行其道的框架
作为一名互联网从业者,需要很清楚的认识到在中国,框架大行其道。毫无疑问计算机系统的底层是由低级语言编写的,C。当然,也有相应的标准库,也就是框架。但是在今天硬件成本越来越低廉、开发速度和成本越来越高,使用简单便捷的高级语言对业务的重要性日益显现,包括随之而来的框架。说的也就使框架怎么变,底层还是那样的底层。需要正确一点,中国目前做底层,就是Linux内核的少之又少、做核心业务的也屈指可数。...
2019-11-07 19:48:15 80
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人