
c/c++
stormbjm
这个作者很懒,什么都没留下…
展开
-
test
asmlinkage long sys_accept(int fd, struct sockaddr __user *upeer_sockaddr, int __user *upeer_addrlen){ struct socket *sock, *newsock; struct file *newfile; int err, len, newfd, fput_needed;转载 2017-02-22 14:54:11 · 574 阅读 · 0 评论 -
C++ STL 函数介绍
C++ STL 1.vector #include vector类型>Vectorname v.front( ) 返回对第一个元素的引用 v.back( ) 返回对最后一个元素的引用 v.clear( ) 清空vector v.empty( ) 如果为空,返回true转载 2013-09-28 19:32:37 · 813 阅读 · 0 评论 -
几种c/c++中字符串转整形的方法
1.自己写一个函数(c/c++)#include #include /* my string to integer function */int myfun(char *str){ int i = 0,n = 0,flag = 1; if(str[0] == '-') i = 1;flag = -1; for(;转载 2013-09-28 17:09:57 · 10714 阅读 · 1 评论 -
Apache中的环形链表
5.1环型链表概述 Apache中很多地方都使用到了环形链表的数据结构,比如存储段组中就是使用环形链表保存所有的存储段数据。为了能够简化对该环形链表的操作,Apache中定义了一系列的宏来方便对链表的操作。因此在继续分析存储段之间的关系之前,我们首先来看一下Apache中环形结构的实现。Apache中环形结构的实现采用了大量的宏,其实现参考了4.4FreeBSD中队列转载 2013-10-08 23:44:26 · 998 阅读 · 0 评论 -
巴克斯范式
BNF是为了描述ALGOL 60语言而出现的。 http://www.blog.edu.cn/user1/18646/archives/2005/139037.shtml巴科斯范式及其扩展BNF & Augmented BNF 什么是巴科斯范式? 巴科斯范式(BNF: Backus-Naur Form 的缩写)是由 Joh转载 2013-10-08 23:48:56 · 2667 阅读 · 0 评论 -
linux 双链表实现
链表是一种重要的数据结构,应用的非常广泛。链表分为单向链表与双向链表,一般的实现就是在结构体中内嵌指向下一个元素的指针。例如:[cpp] view plaincopystruct name { int num; ...; struct name *next; struct name *prev;转载 2013-10-08 23:42:41 · 1776 阅读 · 0 评论 -
C++中Static作用和使用方法
在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。(1)先来介绍它的第一条也是最重要的一条:隐藏。当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是a.c,另一个是main.c。下面是a.c的内容char a = 'A'; // global variable转载 2013-09-22 11:21:00 · 893 阅读 · 0 评论 -
linux 下动态链接库的制作与使用
linux 下动态链接库的制作与使用动态链接库*.so的编译与使用- -动态库*.so在linux下用c和c++编程时经常会碰到,最近在网站找了几篇文章介绍动态库的编译和链接,总算搞懂了这个之前一直不太了解得东东,这里做个笔记,也为其它正为动态库链接库而苦恼的兄弟们提供一点帮助。1、动态库的编译下面通过一个例子来介绍如何生成一个动态库。这里有一个头文件:so_test.h,三个.c转载 2013-07-05 18:50:06 · 683 阅读 · 0 评论 -
Linux curses库使用
相信您在网路上一定用过如 tin,elm 等工具, 这些软体有项共同的特色, 即他们能利用上下左右等方向键来控制游标的位置. 除此之外, 这些程式的画面也较为美观. 对Programming 有兴趣的朋友一定对此感到好奇, 也许他能在 PC上用Turbo C轻易地写出类似的程式, 然而, 但当他将相同的程式一字不变地移到工作站上来编译时, 却出现一堆抓也抓不完的错误. 其实, 原因很简单, 他转载 2013-09-04 15:08:57 · 3195 阅读 · 0 评论 -
C++11中的原子操作(atomic operation)
所谓的原子操作,取的就是“原子是最小的、不可分割的最小个体”的意义,它表示在多个线程访问同一个全局资源的时候,能够确保所有其他的线程都不在同一时间内访问相同的资源。也就是他确保了在同一时刻只有唯一的线程对这个资源进行访问。这有点类似互斥对象对共享资源的访问的保护,但是原子操作更加接近底层,因而效率更高。在以往的C++标准中并没有对原子操作进行规定,我们往往是使用汇编语言,或者是借助第三方的转载 2013-11-05 11:08:19 · 1032 阅读 · 0 评论 -
GOMP_CPU_AFFINITY
Description:Binds threads to specific CPUs. The variable should contain a space-separated or comma-separated list of CPUs. This list may contain different kinds of entries: either single CPU numbers i转载 2013-12-05 09:33:56 · 10891 阅读 · 0 评论 -
linux下用/proc/stat文件来计算cpu的利用率-c语言实现
proc文件系统介绍 /proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为内核与进程提供通信的接口。用户和应用程序可以通过/proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取/proc目录中的文件时,proc文件系统是动态从系统内核读出所需信息并提交的。转载 2014-02-14 16:00:00 · 9244 阅读 · 2 评论 -
二进制文件的读写
我一直觉得二进制文件读写是个很容易的事,所以一直没在意,最近在写一个http客户端,实现文件下载的时候,发现总有问题,后来才发现是忘记写文件用二进制方式,惭愧的很啊。然后,就在网上搜索了一下,发现通过C语言实现二进制文件读写的资料居然出奇的少,这让我很愤怒,因为虽然这东西很简单,但是对于初学者,往往会需要花很长的时间去弄,一旦明白,又发现花的时间很不值得,罢了,这里通过一个文件拷贝的例子来讲讲转载 2015-07-23 08:22:08 · 731 阅读 · 0 评论 -
c++ vector 释放内存
1.释放单个指针关于Vector中存放指针的问题,在进行清空的时候比较安全的一种做法是: std::vector ClassNameVec; ...push_back(new ClassName()); std::vector::iterator ClassNameIt = ClassNameVec.begin(); for(;ClassNameIt转载 2014-11-01 12:59:39 · 2396 阅读 · 0 评论 -
STL中用ERASE()方法遍历删除元素
STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector 、deque);另一类是以不连续的节点形式存储的容器(如:list、set、map)。在使用erase方法来删除元素时,需要注意一些问题。 在使用 list、set 或 map遍历删除某些元素时可以这样使用:正确使用方法1 std::list List; std:转载 2014-11-01 12:14:04 · 650 阅读 · 0 评论 -
C++遍历文件夹及判断某一文件或目录是否存在
C++遍历文件夹的代码如下: Cpp代码 #include #include #include using namespace std; void visit(string path,int layer) { struct _fi转载 2014-08-20 12:54:36 · 2782 阅读 · 0 评论 -
C++用new和不用new创建类对象区别
起初刚学C++时,很不习惯用new,后来看老外的程序,发现几乎都是使用new,想一想区别也不是太大,但是在大一点的项目设计中,有时候不使用new的确会带来很多问题。当然这都是跟new的用法有关的。new创建类对象,使用完后需使用delete删除,跟申请内存类似。所以,new有时候又不太适合,比如在频繁调用场合,使用局部new类对象就不是个好选择,使用全局类对象或一个经过初始化的全局类指针似乎更加高转载 2014-06-16 11:42:11 · 797 阅读 · 0 评论 -
C++无锁编程资料,无锁队列等
1. Lamport's Lock-Free Ring Buffer [Lamport, Comm. of ACM, 1977] 也就常说的单生产者-单消费者 的ringbuffer, 限制就是只能一个读线程(消费者),一个写进程(生产者)。 好像有人改进了一下设计, 参加文章 “Cache优化的并发无锁队列” http://www.doci转载 2014-06-13 10:22:45 · 5282 阅读 · 0 评论 -
C++中的向上类型转换和向下类型转换+四种强制类型转换
在C++的世界中有这样两个概念,向上类型转换,向下类型转换,分别描述的是子类向基类和基类向子类的强制类型转换。向上强制类型转换切割:覆盖方法和子类数据丢失的现象生成切割(slice)。class Base{public:int b;virtual void Test(){cout << "base" <<endl;}};class Derived:public Base{public:int d;转载 2014-06-13 11:05:32 · 5984 阅读 · 0 评论 -
C++拷贝构造函数详解
一. 什么是拷贝构造函数首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:[c-sharp] view plaincopyint a = 100; int b = a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。转载 2013-09-04 15:01:09 · 761 阅读 · 0 评论 -
UMD文件结构
概要介绍 UMD文件有三种格式类型,一种叫纯文本格式,一种叫漫画&写真集格式,以及连环画(文字+图画)。本文只涉及纯文本格式的UMD,后面将直接使用UMD指代这类格式的文件。 UMD文件总体上是由一组连续的块组成的,每一块按照约定的顺序先后排列在一起构成了UMD文件的结构。根据块的职责,我将其分成两类:功能块和数据块。有的功能块自身就可以完全的描述信息,而有的一些由于信息量大,特别地转载 2013-09-03 09:33:44 · 960 阅读 · 0 评论 -
二分图的最大匹配
二分图指的是这样一种图,其所有顶点可以分成两个集合X和Y,其中X或Y中任意两个在同一集合中的点都不相连,所有的边关联在两个顶点中,恰好一个属于集合X,另一个属于集合Y。给定一个二分图G,M为G边集的一个子集,如果M满足当中的任意两条边都不依附于同一个顶点,则称M是一个匹配。图中包含边数最多的匹配称为图的最大匹配。 二分图的最大匹配有两种求法,第一种是最大流;第二种就是我现在要讲的匈转载 2013-03-04 09:54:51 · 1954 阅读 · 0 评论 -
二分图的最大匹配介绍及匈牙利算法
什么是二分图,什么是二分图的最大匹配,这些定义我就不讲了,网上随便都找得到。二分图的最大匹配有两种求法,第一种是最大流(我在此假设读者已有网络流的知识);第二种就是我现在要讲的匈牙利算法。这个算法说白了就是最大流的算法,但是它跟据二分图匹配这个问题的特点,把最大流算法做了简化,提高了效率。匈牙利算法其实很简单,但是网上搜不到什么说得清楚的文章。所以我决定要写一下。最大流算法的核心问题就是找增广转载 2013-03-04 16:58:06 · 583 阅读 · 0 评论 -
c++对象内存布局(虚函数)--下
重复继承 下面我们再来看看,发生重复继承的情况。所谓重复继承,也就是某个基类被间接地重复继承了多次。 下图是一个继承图,我们重载了父类的f()函数。 其类继承的源代码如下所示。其中,每个类都有两个变量,一个是整形(4字节),一个是字符(1字节),而且还有自己的虚函数,自己overwrite父类的虚函数。如子类D中,f()覆盖了超类的函数, f1() 和f2() 覆转载 2013-04-07 17:58:23 · 577 阅读 · 0 评论 -
c++对象内存布局(虚函数)--上
对象的影响因素 简而言之,我们一个类可能会有如下的影响因素: 1)成员变量2)虚函数(产生虚函数表)3)单一继承(只继承于一个类)4)多重继承(继承多个类)5)重复继承(继承的多个父类中其父类有相同的超类)6)虚拟继承(使用virtual方式继承,为了保证继承后父类的内存布局只会存在一份)上述的东西通常是C++这门语言在语义方面对对象内部的影响因素,当然,还转载 2013-04-07 17:56:08 · 599 阅读 · 0 评论 -
结构体字节对齐原则
字节为什么要对齐?现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。一.对齐的作用和原因 各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某转载 2013-04-03 17:34:22 · 742 阅读 · 0 评论 -
虚继承
#include #include class CA { int k; //如果基类没有数据成员,则在这里多重继承编译不会出现二义性 public: void f() {cout << "CA::f" << endl;} }; class CB : public CA { }; cla转载 2013-04-03 21:24:15 · 521 阅读 · 0 评论 -
C++类内存占用大小
(一)class A {}; sizeof( A ) = ?sizeof( A ) = 1明明是空类,为什么编译器说它是1呢?空类同样可以实例化,每个实例在内存中都有一个独一无二的地址,为了达到这个目的,编译器往往会给一个空类隐含的加一个字节,这样空类在实例化后在内存得到了独一无二的地址.所以sizeof( A )的大小为1. (二)class B {pub转载 2013-04-03 20:24:00 · 631 阅读 · 0 评论 -
常量指针 指针常量
三个名词虽然非常绕嘴,不过说的非常准确。用中国话的语义分析就可以很方便地把三个概念区分开。一) 常量指针。常量是形容词,指针是名词,以指针为中心的一个偏正结构短语。这样看,常量指针本质是指针,常量修饰它,表示这个指针乃是一个指向常量的指针(变量)。指针指向的对象是常量,那么这个对象不能被更改。在C/C++中,常量指针是这样声明的:1)const int *p转载 2013-03-31 13:23:28 · 608 阅读 · 0 评论 -
接口和抽象类
一、抽象类: 抽象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们。 二、接口: 接口是引用类型的,类似于类,和抽转载 2013-03-26 11:31:29 · 509 阅读 · 0 评论 -
static 作用
在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。(1)先来介绍它的第一条也是最重要的一条:隐藏。当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是a.c,另一个是main.c。下面是a.c的内容char a = 'A'; // global variable转载 2013-04-12 17:47:19 · 507 阅读 · 0 评论 -
静态链接库和动态链接库相同函数覆盖及库调用顺序
最近一个项目遇到的一个问题,MongoDB和自家库中的md5函数出现冲突, 而且报的是莫名错误,经过仔细debug终于找到md5中的md5_finish覆盖出现的问题,今天抽了点时间写了些小程序测试了下注意:编译器为gcc,若使用g++, 请在库里面加上extern "C"两个静态库首先测试静态链接库,大概的代码如下:libA.cview pla转载 2013-04-22 09:10:51 · 1927 阅读 · 0 评论 -
sigaction函数解析
sigaction函数的功能是检查或修改与指定信号相关联的处理动作(可同时两种操作)。他是POSIX的信号接口,而signal()是标准C的信号接口(如果程序必须在非POSIX系统上运行,那么就应该使用这个接口)给信号signum设置新的信号处理函数act, 同时保留该信号原有的信号处理函数oldactint sigaction(int signo,转载 2013-09-03 16:37:01 · 8046 阅读 · 0 评论 -
Ubuntu10.04下安装Qt4和创建第一个Qt程序
1.首先安装Qt4并采用Qt Creator进行开发演示(1)在Terminal中输入: sudo apt-get install qt4-dev-tools qt4-doc qt4-qtconfig qt4-demos qt4-designer 其中: qt4-dev-tools 中包括了Qt Assistant,Qt Linguist,Qt转载 2013-09-02 00:51:43 · 805 阅读 · 0 评论 -
open与fopen的区别
1.open函数原型:int open(const char *path, int access,int mode)path 要打开的文件路径和名称 access 访问模式 宏定义和含义如下: O_RDONLY 1 只读打开转载 2013-07-25 16:11:40 · 895 阅读 · 0 评论 -
#ifdef的嵌套使用
//使用宏定义做控制开关时要注意#include "iostream.h" #define AA 1 //使用宏定义的值做控制开关#define BB 1 //使用宏定义的值做控制开关int main(){ #ifdef AA …… #if BB //嵌套的宏转载 2013-07-04 16:31:55 · 22737 阅读 · 0 评论 -
异或运算 ^ 变量交换及找出现一次的数
一、交换2个变量如果想要交换2个变量,一般的做法是引入第三个变量,例如,[cpp] view plaincopytemp = a; a = b; b= temp; 这样2个变量中的值就实现了交换。那能不能不引入其他变量就可以实现变量值的交换呢?答案是肯定的。用异或操作可以实转载 2013-05-14 15:08:06 · 1255 阅读 · 0 评论 -
最长公共子序列--动态规划
动态规划法经常会遇到复杂问题不能简单地分解成几个子问题,而会分解出一系列的子问题。简单地采用把大问题分解成子问题,并综合子问题的解导出大问题的解的方法,问题求解耗时会按问题规模呈幂级数增加。为了节约重复求相同子问题的时间,引入一个数组,不管它们是否对最终解有用,把所有子问题的解存于该数组中,这就是动态规划法所采用的基本方法。【问题】 求两字符序列的最长公共字转载 2013-05-13 16:51:21 · 753 阅读 · 0 评论 -
数组指针 指针数组
1. 数组指针 一:数组指针:数组名本身就是一个指针,指向数组的首地址。注意这是声明定长数组时,其数组名指向的数组首地址是常量。而声明数组并使某个指针指向其值指向某个数组的地址(不一定是首地址),指针取值可以改变。 二:数组指针:是指向数组的一个指针,如int (*p)[10] 表示一个指向10个int元素的数组的一个针。 int (*p)[2]; 声明了一个指转载 2013-05-03 17:36:07 · 765 阅读 · 0 评论 -
大端模式和小端模式
一、大端模式和小端模式的起源 关于大端小端名词的由来,有一个有趣的故事,来自于Jonathan Swift的《格利佛游记》:Lilliput和Blefuscu这两个强国在过去的36个月中一直在苦战。战争的原因:大家都知道,吃鸡蛋的时候,原始的方法是打破鸡蛋较大的一端,可以那时的皇帝的祖父由于小时侯吃鸡蛋,按这种方法把手指弄破了,因此他的父亲,就下令,命令所有的子民吃鸡蛋的时候,必转载 2013-04-19 15:39:05 · 658 阅读 · 0 评论