C、C++
文章平均质量分 55
chenyulancn
python、golang、c/c++、linux、虚拟化、大数据
展开
-
C++11下的单例模式
c+11,单例转载 2022-11-14 20:19:07 · 504 阅读 · 0 评论 -
gdb常用命令及使用gdb调试多进程多线程程序
一、常用普通调试命令1.简单介绍GDB介绍: gdb是Linux环境下的代码调试⼯具。使⽤:需要在源代码⽣成的时候加上 -g 选项。开始使⽤: gdb binFile退出: ctrl + d 或 quit2.调试过程(1)list命令list linenum 显⽰binFile第linenum行周围的源代码,接着上次的位置往下列,每次列10⾏。list function ...转载 2018-04-18 13:35:00 · 426 阅读 · 0 评论 -
QT中监控全局键盘鼠标事件
现在我们新建一个类globalapp 继承QApplication,并重载notify函数,示例如下:globalapp.h#ifndef GLOBALAPP_H#define GLOBALAPP_H#include class globalApp : public QApplication{public: globalApp(int &argc,char **转载 2016-04-29 15:56:49 · 5915 阅读 · 8 评论 -
应用 Valgrind 发现 Linux 程序的内存问题
体系结构Valgrind是一套Linux下,开放源代码(GPL V2)的仿真调试工具的集合。Valgrind由内核(core)以及基于内核的其他调试工具组成。内核类似于一个框架(framework),它模拟了一个CPU环境,并提供服务给其他工具;而其他工具则类似于插件 (plug-in),利用内核提供的服务完成各种特定的内存调试任务。Valgrind的体系结构如下图所示:图 1 Valgrind ...转载 2018-05-16 16:15:33 · 202 阅读 · 0 评论 -
linux下统计程序/函数运行时间
一. 使用time 命令例如编译一个hello.c文件#gcc hello.c -o hello生成了hello可执行文件,此时统计该程序的运行时间便可以使用如下命令#time ./hello在程序运行结束后便会显示出所需时间real 0m2.913suser 0m0.012ssys 0m0.508s二. 使用clock()函数统计#include<stdio.h>#include <time.h> .转载 2021-12-17 21:07:20 · 3431 阅读 · 0 评论 -
Qt QTableWidget 最后一览自适应宽度 、QTableWidgetItem 文字 居中对其、 显示中文
QTableWidget时,窗口固定大小,可以设置最后一览固定大小,那最后一列后边总有空白,如果要让每行内容充满整个表格,需要设置head属性: QStringList t_sHeader; t_sHeader.append("操 作"); t_sHeader.append("用户名"); t_sHeader.append("时 间原创 2016-05-11 16:55:07 · 22787 阅读 · 1 评论 -
c++ 使用hash_map问题
如果要使用hash_map 需要增加空间声明,问题是: ‘hash_map’ was not declared in this scope。解决 加一个 using namespace __gnu_cxx;#include <hash_map>using namespace std;using namespace __gnu_cxx;...转载 2018-04-18 13:27:33 · 1075 阅读 · 0 评论 -
检测内存泄露、多线程gdb调试(core)、内核态用户态的通信
快速检测内存泄露C/C++内存泄漏及检测1、win下的内存泄露检测方法:_CrtDumpMemoryLeaks通过包括 crtdbg.h,将 malloc 和 free 函数映射到它们的调试版本,即 _malloc_dbg 和 _free_dbg,这两个函数将跟踪内存分配和释放。 此映射只在调试版本(在其中定义了_DEBUG)中发生。 发布版本使用普通的 malloc 和 free 函数。在程序退出前调用:_CrtDumpMemoryLeaks();#define _CRTDBG_MAP转载 2021-12-20 22:16:21 · 760 阅读 · 0 评论 -
C++11 迭代中删除元素--map.erase()方法
变量定义: unordered_map<string,long> _mapTaskCtime = {}; _mapTaskCtime.insert({"yy",2}); _mapTaskCtime.insert({"xx",1}); _mapTaskCtime.insert({"zz",3}); long interval = 0;方法1: for循环方式一定要注意 auto it = _mapTaskCtime.cbeg...原创 2022-03-30 14:49:40 · 2868 阅读 · 0 评论 -
C++11 删除 字符串中的空格
#include <algorithm> #include <string>#include <iostream> using namespace std;int main(){ auto isSpace = [](const unsigned char c) { return std::isspace(c); }; string msg("hh hh hh pp"); msg.erase(remove_if(msg.begin.原创 2022-03-11 11:18:53 · 1389 阅读 · 0 评论 -
C++ map数据清理clear效率及彻底释放内存
模拟实际生产情况的测试代码,map中的value保存的是对象。#include<map>#include<vector>#include<string>#include <iostream>#include <time.h>using namespace std;class useTest{public: useTest() {}; map<string,string> testMap;转载 2022-01-04 16:31:28 · 19609 阅读 · 2 评论 -
Google glog使用说明
一、glog是什么:Googleglog是一个基于程序级记录日志信息的c++库,编程使用方式与c++的stream操作类似,例:LOG(INFO)<<"Found"<<num<<"cookies";“LOG”宏为日志输出关键字,“INFO”为严重性程度。主要支持功能:1,参数设置,以命令行参数的方式设置标志参数来控制日志记录行为;2,严重性分级,根据日志严重性分级记录日志;3,可有条件地记录日志信息;4,条件中止程...转载 2021-06-07 16:44:44 · 1003 阅读 · 0 评论 -
C/C++数组初始化
1、整型数组的初始化-栈初始化//默认初始化int a[5] = {}; //[0, 0, 0, 0, 0]//全部初始化为0int a[5] = {0}; //[0, 0, 0, 0, 0]//c++11新写法int a[5]{}; //[0, 0, 0, 0, 0]2、字符串的初始化-栈初始化和整型的初始化基本一致,会调用构造函数string *str = string[5]; //调用5次默认构造函数string *str1 = string[5转载 2020-09-06 13:07:44 · 3002 阅读 · 0 评论 -
C++中const、volatile、mutable的用法
const修饰普通变量和指针const修饰变量,一般有两种写法:const TYPE value;TYPE const value;这两种写法在本质上是一样的。它的含义是:const修饰的类型为TYPE的变量value是不可变的。对于一个非指针的类型TYPE,无论怎么写,都是一个含义,即value值不可变。例如:const int nValue; //nValue是constint const nValue; //nValue是const但是对于指针类型的TYPE,...转载 2020-08-25 17:22:00 · 190 阅读 · 0 评论 -
C++11中的匿名函数(lambda)
C++11提供了对匿名函数的支持,称为Lambda函数(也叫Lambda表达式)。 下面举了几个Lambda函数的例子:[](int x, int y) { return x + y; } // 隐式返回类型[](int& x) { ++x; } // 没有return语句 -> lambda 函数的返回类型是'void'[]() { ++global_x; } // 没有参数,仅访问某个全局变量[]{ ++global_x; } // 与上一个相同,省略了()转载 2020-08-25 16:05:11 · 660 阅读 · 0 评论 -
c++数组/vector/map 遍历比较简便的办法
python,golang用时间长了,变懒了,再用c++ 遍历数组等操作,实在觉得费时费力. 经搜索总结验证,罗列下,c++(>=11)遍历数组/vector的方法:遍历(修改)数组: int fi[5] = {1, 1, 2, 3, 5}; for (auto &i : fi){ // 加 & 可以修改数组值,否则不能修改 i*=2; cout<< i << endl; }遍历(修改)ve原创 2020-08-14 16:18:56 · 538 阅读 · 0 评论 -
C++中string、char *、char[]的转换
一、string转char*。 主要有三种方法可以将str转换为char*类型,分别是:data(); c_str(); copy(); 1.data()方法,如:string str = "hello";const char* p = str.data();//加const 或者用char * p=(char*)str.data();的形式 同时有一点需要说明,这里在devc++中...转载 2018-05-27 07:07:05 · 208 阅读 · 0 评论 -
总结C++中几种结构体初始化的方法
结构体能自由组装数据,是一种很常见的数据打包方法。当我们定义一个结构体后,没有初始化就使用,就会使用到垃圾数据,而且这种错误很难发现。在编程时对于定义的任何变量,我们最好都先初始化。除了使用memset和ZeroMemory之外,有没有更简单的方法初始化呢?因为有时候每定义一个结构体,就使用一次memset,这样很繁琐,同时有时候也需要给结构体中的一些变量赋一些非0的默认值。我这里总结三种方法,如...转载 2018-06-06 16:00:13 · 89451 阅读 · 1 评论 -
如何完整的安装Cygwin
一直在windows上编程,想学习下Linux的开发环境,虚拟机上安装了CentOS之后开发效率非常感人,偶得之Cygwin这个东西,号称Linux on windows,果断装之。奈何天朝尚有国情,安装N次皆失败了。一路披荆斩麻终于成功! ① 从官站(https://cygwin.com/install.html)下载相应的安装包; ② 选择Install from interne...转载 2018-06-19 22:17:43 · 1076 阅读 · 0 评论 -
Makefile经典教程
makefile很重要 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile...转载 2018-07-12 11:04:39 · 1160 阅读 · 0 评论 -
extern "C"的用法解析
extern "C"的用法解析 C++中extern “C”含义深层探索 1.引言 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人转载 2012-07-13 10:09:11 · 421 阅读 · 0 评论 -
如何判断SOCKET已经断开
最近在做一个服务器端程序,C/S结构。功能方面比较简单就是client端与server端建立连接,然后发送消息给server。我在server端会使用专门的线程处理一条socket连接。这就涉及到一个问题,如果socket连接断开(异常,正常)后,我如何才能感知到?server端这边是绝对被动的,sever端不能主动断开连接。也没有连接链路维持包之类的。client端发送数据的时间也是不定的。在s...转载 2018-04-25 16:29:30 · 18582 阅读 · 0 评论 -
Linux下so动态库查看与运行时搜索路径的设置
ldd命令linux 下可以使用ldd查看可执行文件所需要的动态链接库(*.so)。 注:下文用so代替动态链接库文件。// 举个例子~$ ldd /bin/ls linux-vdso.so.1 => (0x00007ffe06386000) libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00...转载 2018-04-24 13:45:27 · 5635 阅读 · 0 评论 -
在Linux下编写Daemon
在Linux(以Redhat Linux Enterprise Edition 5.3为例)下,有时需要编写Service。Service也是程序,一般随系统启动用户不干预就不退出的程序,可以称为Service。Linux下的Service一般称为Daemon。 以上是广义的Service的定义。Linux下的服务一般放在/etc/init.d文件夹下。浏览一下这个文件夹下的文件,可以转载 2014-11-24 22:14:32 · 534 阅读 · 0 评论 -
Python与C参数交互---结构体指针作为参数 实例
在Python中某些时候需要C做效率上的补充. 在实际应用中,需要做部分数据的交互. Python 可以通用 ctypes 模块很好地调用C. 下面演示了 Python 中调用C一个标准函数. 传递一个结构指针入. 得到C中分配内存数据 传递出. 希望对你的Python 学习有所帮助.1 test.c#include #include typedef struct转载 2012-11-07 15:24:59 · 10322 阅读 · 1 评论 -
Python.h: No such file or directory
在python调用c代码时,需要用到python.h文件,但这个文件没有在python编译器的默认安装包中,所以需要单独安装。在ubuntu下:sudo apt-get install python-dev原创 2012-11-06 09:00:47 · 626 阅读 · 0 评论 -
用户态调用Xen超级调用与Linux内核系统调用
一、从用户态访问系统调用通常,系统调用靠C库支持。用户程序通过包含标准头文件并和C库链接,就可以使用系统调用。但如果你仅仅写出系统调用,glibc库恐怕并不提供支持。这里有一个好消息还有一个坏消息,好消息是Linux本身提供了一组宏定义linux/include/asm-x86_64/unistd.h文件中。坏消息是在2.6.20之后的内核版本取消了这一系列的宏,导致一开始编译源文件的转载 2012-10-24 16:49:32 · 1056 阅读 · 0 评论 -
Xen中各个超级调用在源文件中的位置
xen中的超级调用在文件xen.h(xen/include/public/xen.h)定义,按照超级调用号从低到高来排列/* * HYPERCALLS */#define __HYPERVISOR_set_trap_table 0#define __HYPERVISOR_mmu_update 1#define __HYPERVISOR_set转载 2012-10-24 17:00:42 · 1382 阅读 · 0 评论 -
makefile
makefile 转自:http://www.chinaunix.net/jh/23/408225.html概述 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和 professional的程序员,makefile还是要懂这就好像现在有这么多的HTML的编转载 2012-07-23 11:37:45 · 644 阅读 · 0 评论 -
在C/python中执行linux命令并得到返回值以及输出
一般来说,用shell的方便之处在于,能够直接调用linux系统命令,方便的得到结果。但是shell scprit的约束重重(这里不再讲了)。下面说一下在C和python中如何调用linux命令、得到返回值并得到输出1. python,使用os库/commands库方法1)使用commands.getstatusoutput方法,这是一个神奇的方法,能够直接得到返回值以及命令输出。官网转载 2012-09-29 14:27:28 · 9285 阅读 · 0 评论 -
linux的PAM认证和shadow文件中密码的加密方式
PAM全称是:Pluggable Authentication Modules,中文叫“可插入认证模块”。它是一种统一的认证方案。PAM 让您能随时改变您的认证方法以及需求,并且不需要重新编译任何代码就封装了所有本地认证方法。具体见 PAM 网站。对于 PAM 您只需要做:对您的密码采用不同于 DES 的加密方式(让它们面对暴力解码(brute-force decode)时转载 2012-09-28 12:43:40 · 2229 阅读 · 0 评论 -
Linux 用户认证(crypt方式)
最近做的一些开发和Linux用户有密切的关系,以前没有做过相关的学习,仅仅停留在使用shell下的useradd, passwd命令,但对用户的认证及密码的管理基本没有了解。在这里做个小结。1. 第一个重要文件/etc/passwd例:/etc/passwd中的一行rwan:x:1000:1000:Robin:/home/rwan:/bin/bash包含七个字段,各个字段间用冒转载 2012-09-28 12:51:13 · 1827 阅读 · 0 评论 -
OpenMP初步(英文)
Beginning OpenMPOpenMP provides a straight-forward interface to write software that can use multiple cores of a computer. Using OpenMP you can write code that uses all of the cores in a multicor转载 2014-12-19 09:43:48 · 690 阅读 · 0 评论 -
QT 显示动态gif图片 (release版)
在ui界面添加Qlabel控件,在QLabel中使用QMovie播放gif。#include "WaitDialog.h"#include#includeWaitDialog::WaitDialog(QWidget *parent, QString fileName, int picWidth, int picHeight) : QWidget(parent)转载 2016-05-11 10:52:00 · 5153 阅读 · 0 评论 -
Linux epoll模型
定义: epoll是Linux内核为处理大批句柄而作改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著的减少程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。因为它会复用文件描述符集合来传递结果而不是迫使开发者每次等待事件之前都必须重新准备要被侦听的文件描述符集合,另一个原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被转载 2016-10-31 11:11:53 · 513 阅读 · 0 评论 -
使用strace, ltrace寻找故障原因的线索
在GNU/Linux环境下,当程序出现“疑难杂症”的时候,如何快速定位问题呢?本文介绍strace/ltrace的一些使用方法,内容主要来自个人的读书笔记(可见参考文献)。strace/ltrace 是一类不错的工具,在工作中经常会用到,其主要可以用于:(1) 了解一个程序的工作原理(可以了解Linux下很多常用的命令实现的原理);(2) 帮助定位程序中的问题(在开发工作时帮助转载 2016-10-28 15:57:19 · 1846 阅读 · 0 评论 -
关于非阻塞的recv的时候返回的处理
注意recv()如果读到数据为0,那么就表示文件结束了,如果在读的过程中遇到了中断那么会返回-1,同时置errno为EINTR。因此判断recv的条件: 如果read返回 如果==0 表示文件结束, 处理 如果 表示中断,处理 否则,出错我们举个例子:int safe_tc转载 2016-10-18 00:07:50 · 2800 阅读 · 0 评论 -
epoll在LT和ET模式下的读写方式
在一个非阻塞的socket上调用read/write函数, 返回EAGAIN或者EWOULDBLOCK(注: EAGAIN就是EWOULDBLOCK)从字面上看, 意思是:* EAGAIN: 再试一次* EWOULDBLOCK: 如果这是一个阻塞socket, 操作将被block* perror输出: Resource temporarily unavailable转载 2016-10-17 23:53:24 · 493 阅读 · 0 评论 -
C Socket编程之Connect超时
网络编程中socket的分量我想大家都很清楚了,socket也就是套接口,在套接口编程中,提到超时的概念,我们一下子就能想到3个:发送超时,接收超时,以及select超时(注:select函数并不是只用于套接口的,但是套接口编程中用的比较多),在connect到目标主机的时候,这个超时是不由我们来设置的。不过正常情况下这个超时都很长,并且connect又是一个阻塞方法,一个主机不能连接,等着con转载 2016-08-30 18:19:53 · 1754 阅读 · 0 评论 -
socket C编程设置接收超时(Windows & Linux)
最近在用C写socket时,发现要对udp接收的时间进行监听,不然使用阻塞接收时将会造成一直等待。>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Windows在Windows下似乎操作比较简单,直接调用winsock2.h和ws2_32.lib编程#include"stdafx.h"#include"stdio.h"#incl转载 2016-08-30 17:49:14 · 7990 阅读 · 0 评论