c++/c
崔世勋
这个作者很懒,什么都没留下…
展开
-
线程属性pthread_attr_t
Posix线程属性pthread_attr_t主要包括:(1) scope属性表示线程间竟争CPU的范围, PTHREAD_SCOPE_SYSTEM表示与系统中所有线程一起竞争CPU时间, PTHREAD_SCOPE_PROCESS表示与同进程中的线程竞争CPU.(2) detach属性如果设置为PTHRAD_CREATE_DETACHED, 则新线程不能用pthread_join...转载 2019-09-03 16:26:44 · 919 阅读 · 0 评论 -
WinPcap学习(十一)底层学习
WinPcap包含一个内核级的数据包过滤器,一个低层的动态链接库(packet.dll),一个高层的、依赖于系统的库(wpcap.dll)。WinPcap的主要结构如上。首先,捕获系统需要占用操作系统的协议栈,来访问通过网络的原始数据。这就需要有部分内容要运行在操作系统内核中,能直接访问网络接口驱动。这部分内容非常依赖于系统,在WinPcap的解决方案中,它被认为是设备驱动,称为Net...转载 2014-12-10 10:23:02 · 1139 阅读 · 0 评论 -
WinPcap学习(九)发送数据包
原始的libcap库是不支持发送数据包的,因此,这是属于WinPcap的扩展。使用pcap_sendpacket()发送单个数据包打开适配器以后,调用pcap_sendpacket()来发送手工制作的数据包。pcap_sendpacket()的参数有一个要包涵发送数据的缓冲区,缓冲的长度,以及用来发送数据的适配器。注意,缓冲数据将直接发送到网络,而不会进行任何加工和处理。这就意味着应用程序...转载 2014-12-09 20:04:19 · 4575 阅读 · 2 评论 -
WinPcap学习(十)wpcap.dll
wpcap.dll是一个包含了公共WinPcap API的动态链接库,它输出了一组依赖于系统的函数,用来捕获和分析网络流量。wpcap.dll与libpcap兼容,其中的函数用途有:(1)获取网络适配器列表(2)获取网络适配器的不同的信息,比如网卡描述和地址的列表(3)使用PC的一个网卡来捕获数据包(4)向网络上发送数据(5)有效保存数据包到磁盘,并通过一个接口捕获数据包,就如...转载 2014-12-09 20:28:56 · 3150 阅读 · 0 评论 -
WinPcap学习(七)分析数据包
这次的主要目标是展示如何解析所捕获的数据饭协议首部,这里选择分析UDP协议而不是其它协议,是因为它比其它的协议更简单。 /* * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy) * Copyright (c) 2005 - 2006 CACE Technologies, Davis (Californ...转载 2014-12-06 19:00:29 · 1119 阅读 · 0 评论 -
WinPcap学习(八)处理脱机堆文件
WinPcap提供了很多函数来将网络数据流保存到文件并读取它们。堆文件的格式是libpcap的一种,这种格式,包含了被捕捉的包的二进制数据,并且,这种格式是许多网络工具所使用的一种标准,这些工具包括WinDump,Etheral和Snort。保存数据包到堆文件下面的程序是从一个选定的接口捕获数据包,并且将它们保存到用户指定的文件中。 #include "pcap.h"/* 回...转载 2014-12-06 19:22:14 · 1098 阅读 · 0 评论 -
WinPcap学习(三)获取已安装设备的高级信息
原文:http://www.ferrisxu.com/WinPcap/html/index.html事实上,WinPcap提供了其他更高级的信息,特别需要指出的是,由pcap_findalldevs_ex()返回的每一个pcap_if结构体,都包含一个pcap_addr结构体,这个结构体由如下元素组成:(1)一个地址列表(2)一个掩码列表(3)一个广播地址列表(4)一个目的地址...转载 2014-12-05 20:01:33 · 965 阅读 · 0 评论 -
WinPcap学习(六)过滤数据包
用来过滤数据包的函数是pcap_compile()和pcap_setfilter()。pcap_complie()它将一个高层的布尔过滤表达式编译成一个能够被过滤引擎所解释的低层的字节码。pcap_setfilter()将一个过滤器与内核捕获会话相关联。当pcap_setfilter()被调用时,这个过滤器将被应用到来自网络的所有数据包,并且,所有的符合要求的数据包,将会立刻复制给应用程序...转载 2014-12-06 13:36:24 · 1441 阅读 · 0 评论 -
winpcap学习(二)获取设备列表
原文:http://www.ferrisxu.com/WinPcap/html/index.html获取设备列表libpcap和WinPcap都提供了pcap_findalldevs_ex()函数来实现这个功能:这个函数返回一个pcap_if结构的链表,每个这样的结构都包含了一个适配器的详细信息。值得注意的是,数据域name和descripting表示一个适配器名称和一个可以让人们理解 的...转载 2014-12-05 13:36:32 · 979 阅读 · 0 评论 -
WinPcap学习(五)不用回调方法捕获数据包
主要是学习pcap_next_ex()函数如何代替pcap_loop()函数。pcap_loop()函数是基于回调的原理来进行数据捕获,这是一种精妙的方法,并且在某些场合中,这是一种很好的选择。然而,处理回调有时候并不实用--它会增加程序的复杂度,特别是在拥有多线程的c++程序中。可以通过直接调用pcap_next_ex()函数来捕获一个数据包--只在当编程人员使用了pcap_next_e...转载 2014-12-06 13:13:08 · 959 阅读 · 0 评论 -
OpenMP学习
http://openmp.org/wp/传统的单线程编程方式难以发挥多核CPU的强大功能,于是多核编程应运而生。多核编程可以认为是对多核环境下编程做了一些多线程抽象,提供一些简单的API,使得用户不必费太多精力来了解太多底层的知识。多核编程的工具有OpenMP和TBB,OpenMP支持的编程语言包括C、C++和Fortran,支持OpenMP的编译器包括Sun Studio、Intel Co...原创 2014-12-10 16:50:23 · 2261 阅读 · 0 评论 -
HTTP服务器Apache入门学习
Apache HTTP Server是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其从平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展,将Perl、Python等解释器编译到服务器中。Apache最初由伊利诺伊大学香槟分校的国家超级电脑应用中心(NCSA)开发。此后,Apache被开放源代码的成员不断的...原创 2014-12-11 19:20:50 · 921 阅读 · 0 评论 -
Linux信号量sem_t
#include<semaphore.h>信号量的数据类型为结构sem_t, 它本质上是一个长整形的数.1. sem_init()用来初始化一个信号量int sem_init (sem_t *sem, int pshared, unsigned int value); pshared不为0时, 此信号量在进程间进享, 否则只能为当前进程所有线程共享, value给出...转载 2019-09-03 13:36:52 · 752 阅读 · 0 评论 -
C语言的零长数组
struct buffer{ int data_len; //长度 char data[0]; //起始地址};在这个结构中, data是一个数组名, 但该数组没有元素; 该数级的真实地址紧随结构体buffer之后, 而这个地址就是结构后面数组的地址, (如果给这个结构体分配的内容大于这个结构体实际大小,后面多余的部分就是这个data的内容), 这种声明方法可以巧妙...转载 2019-09-02 13:40:28 · 169 阅读 · 0 评论 -
CMakeLists.txt语法
1、指定cmake的最小版本CMAKE_MINIMUM_REQUIRED(VERSION 2.8)这行命令是可选的,也可以不写这句话,但如果CMakeLists.txt文件中使用了一些高版本cmake特有的一些命令时,就需要加上这一行,提醒用户升级到该版本之后再执行cmake.2、设置项目名称PROJECT(Demo)这个命令不是强制的,但最好都加上。它会引入两个变量Dem...转载 2019-07-22 14:31:22 · 504 阅读 · 0 评论 -
Linux C编程中_REENTRANT宏
在一个多线程程序里,默认情况下,只有一个errno变量供所有的线程共享。在一个线程准备获取刚才的错误代码时,该变量很容易被另一个线程中的函数调用所改变。类似的问题还存在于fputs之类的函数中,这些函数通常用一个单独的全局性区域来缓存输出数据。为解决这个问题,需要使用可重入的例程。可重入代码可以被多次调用而仍然工作正常。编写的多线程程序,通过定义宏_REENTRANT来告诉编译器我们需要可重入...转载 2019-07-22 14:05:04 · 359 阅读 · 0 评论 -
数组指针 指针数组 函数指针 函数指针数组
数组指针是一个指向数组的一个指针.int (*p)[4]; char (*p)[4]; ()操作符和[]优先级相等, 从左向右进行运算, 因此p先和()里的*结合, 所以断定这是指针, 然后再和[]结合, 就成了...转载 2019-07-24 11:05:16 · 98 阅读 · 0 评论 -
CMake与Make最简单直接的区别
写程序大体步骤为:1.用编辑器编写源代码,如.c文件。2.用编译器编译代码生成目标文件,如.o。3.用链接器连接目标代码生成可执行文件,如.exe。但如果源文件太多,一个一个编译时就会特别麻烦,于是人们想到,为什么不设计一种类似批处理的程序,来批处理编译源文件呢,于是就有了make工具,它是一个自动化编译工具,你可以使用一条命令实现完全编译。但是你需要编写一个规则文件,make依据...转载 2019-07-18 15:35:12 · 163 阅读 · 0 评论 -
C typedef
C语言允许用户使用typedef关键字来定义自己习惯的数据类型名称。例如,C语言在C99之前并不提供布尔类型,但我们可以使用typdef关键字来定义一个简单的布尔类型typedef int BOOL;#define TRUE 1#define FALSE 0typedef的4种用法1、为基本数据类型定义新的类型名系统默认的所有基本类型都可以利用typedef关键字来重新定...转载 2019-03-08 15:53:09 · 183 阅读 · 0 评论 -
c extern关键字
修饰变量的声明例如:若a.c中需相用b.c中的变量 int v,可以在a.c中声明extern int v,然后就可以引用变量v。能够被其他模块extern引用到的变量通常是全局变量。还有一点是,extern int v可以放在a.c中的任何地方。修饰函数的声明本质上讲,变量和函数没有区别,函数名是指向函数二进制块开头处的指针。与包含头文件的方式比较,extern想引用哪个函数...转载 2018-06-14 10:46:42 · 206 阅读 · 0 评论 -
#define的用法
无参宏定义#define 标识符 字符串凡是以“#”开头的均为预处理命令,但要注意的是,在宏定义中表达式两边的括号不能少,否则会发生错误。带参宏定义#define 宏名(形参表) 字符串#define M(y) ((y)*(y)+3*(y)) /*宏定义*/ .... k=M(5); /*宏调用*/防重复定义#define 条件编译头文件(.h)可...转载 2018-06-14 09:59:42 · 482 阅读 · 0 评论 -
Windows下如何更新 CodeBlocks 中的 MinGW 使其支持新版本 C++
原文:http://blog.csdn.net/wtfmonking/article/details/17487705为了支持最新版的:C++11 ,在Windows下需要更新 Code::Blocks 的MinGW。 1、下载CodeBlocks并安装(若电脑已有,这步不要)CodeBlocks官网下载:http://www.codeblocks.org/download...转载 2014-12-05 16:33:09 · 1171 阅读 · 0 评论 -
winpcap学习(1)基本介绍
http://www.winpcap.org/WinPcap是Windows中用于网络链接层访问的工具:它允许程序通过协议栈捕获和发送网络包,及其他一些有用的特性,包括内核级的包过滤、网络统计并支持远程包的获取。WinPcap包含一个驱动,它扩展了操作系统以提供低级别的网络访问,WinPcap还包括一个库,用于更方便的访问低级别的网络层,这个库是著名libpcap的windows版。W...原创 2014-12-05 13:17:53 · 1107 阅读 · 0 评论 -
WinPcap学习(四)打开适配器并捕获数据包
打开设备的函数是pcap_open()。下面参数snaplen,flags和to_ms的解释说明snaplen制定要捕获数据包中的哪些部分。在一些操作系统中(比如xBSD和Win32),驱动可以被配置成只捕获数据包的初始化部分:这样可以减少应用间程序间复制数据的量,从而提高捕获效率。本例中,我们将值定为65535,它比我们能遇到的最大的MTU达要大。因此,我们确信我们总收到完整的数据包。f...转载 2014-12-05 21:09:15 · 1548 阅读 · 0 评论 -
图论基础
图的表示法图G = (V, E)的表示有邻接表和邻接矩阵两种形式。通常,对于| E |远小于| V | ^ 2的稀疏图,用邻接表比较合适。若图稠密或很小,或必须很快判别给定的两个顶点是否存在连接的边时,通常用邻接矩阵表示法。 关键点(Articulation Point)和桥(Bridge)对于图G = (V, E),若移除点v可以把图分离,那么v是一个关键点。若移除边e可以把图分...转载 2014-08-25 21:13:57 · 715 阅读 · 0 评论 -
C++ STL算法列表
非修改性序列操作: all_of Test condition on all elements in range any_of Test if any element in range fulfills condition ...转载 2014-08-26 16:19:16 · 619 阅读 · 0 评论 -
C/C++与Matlab混合编程初探
Matlab 拥有丰富的功能,编程简单。不过,有些情况下,Matlab程序的执行速度比较慢。C/C++编译执行的程序速度比较快,编程难度上比Matlab要高一些。因此存在一种方案,就是使用Matlab实现我们的实验程序,用C/C++来实现Matlab程序中比较耗时的部分,从Matlab程序中调用C/C++的程序以实现加速。 本文主要讲解如何在Matlab中调用C/C++的程序,以及如...转载 2014-08-23 19:36:11 · 743 阅读 · 0 评论 -
《解析C++面向对象程序设计》清华大学出版-读书笔记
第1章 认识对象 1.面向对象分析(object-oriented analysis,OOA)的主要任务是分析问题域中的对象、对象之间的关系,然后构造出该问题域的分析模型。分析模型必须简洁、明确地抽象出目标系统必须要做哪些工作(what to do),而不是决定如何去做。2.面向对象设计(object-oriented design,OOD)的主要任务是将分析模型转化为适合计算机处理的设...原创 2014-06-23 10:24:07 · 2389 阅读 · 0 评论 -
《c++程序设计--谭浩强》读书笔记
第一章 C++初步认识C++对C的“增强”,表现在两个方面:(1)在原来面向过程的机制基础上,对C语言的功能做了不少扩展(2)增加了面向对象的机制 面向对象和面向过程不是矛盾的,而是各有用途、互为补充,不要把它们对立起来。 标准C++要求main函数必须声明为int型。有的操作系统要求执行一个程序后必须向操作系统返回一个值。因此,C++的处理是这样的:如果程序正常运行,...原创 2014-06-21 19:08:45 · 2397 阅读 · 0 评论 -
c++:成员指针运算符 .* 和 ->*
有一种特殊的指针叫做成员指针,它们通常指向一个类的成员,而不是对象中成员的特定实例。 成员指针并不是真正的指针,它只是成员在对象中的偏移量,它们分别是:.* 和 ->* 。 一个例子:class ClassName {public: int foo(int); }int (ClassName::*pmf)(int) = &ClassNmae...原创 2014-06-17 17:37:04 · 2521 阅读 · 0 评论 -
《C++ 标准程序库--侯捷》学习笔记
C++标准每5年会有一个新版本,1998年的C++98、2003年的C++03、2007年的C++TR1、2011年的C++11.转换操作符static_cast将一个值以符合逻辑的方式转型。这个可以看作是“利用原值重建一个临时对象,并在设立初值时使用型别转换”。唯有当上述型别转换有所定义时,整个转换才会成功。如:float x;cout<<static_cas...原创 2014-06-30 15:53:29 · 1896 阅读 · 0 评论 -
《C++编程规范 101条规则、准则与最佳实践》 人邮 -- 读书笔记
组织和策略问题第0条 不要拘泥于小节(了解哪此东本西不应该标准化)编程规范不应施加个人喜好或者过时的做法。第1条 在高警告级别干净利落地进行编译 高度重视警告:使用编译器的最高警告级别。应该要求构建是干净利落的(没有警告)。理解所有的警告。通过修改代码而不是降低警告级别来排除警告。例外:有时候,编译器可能会发出烦人的甚至虚假的警告(即纯属噪声的警告),但是又没有提供消除...原创 2014-06-28 10:31:54 · 1330 阅读 · 0 评论 -
C++ 参数依赖查找(ADL也称Koening查找)
它的规则就是当编译器对无限定域的函数调用进行名字查找时,除了当前名字空间域以外,也会把函数参数类型所处的名字空间 加入查找的范围。 最后欢迎大家访问我的个人网站: 1024s...原创 2014-06-26 22:05:42 · 1744 阅读 · 0 评论 -
STL常用算法
该篇分为十一部分,分别是:vector类的主要成员、deque类的主要成员、list类的主要成员、stack类的主要成员、queue类的主要成员、priority_queue类的组要成员、set类的主要成员、multiset类的主要成员、map类的主要成员、multimap类的主要成员、STL算法函数(一)vector类的主要成员vector<T>是可边长的向量,比较灵活☆ v...转载 2014-08-26 15:52:44 · 517 阅读 · 0 评论 -
秒杀多线程第二篇 多线程第一次亲密接触 CreateThread与_beginthreadex本质区别
本文将带领你与多线程作第一次亲密接触,并深入分析CreateThread与_beginthreadex的本质区别,相信阅读本文后你能轻松的使用多线程并能流畅准确的回答CreateThread与_beginthreadex到底有什么区别,在实际的编程中到底应该使用CreateThread还是_beginthreadex? 使用多线程其实是非常容易的,下面这个程序的主线程会创建了一个子线...转载 2014-09-11 09:00:28 · 694 阅读 · 0 评论 -
记录键盘按键
#include <iostream>#include <windows.h>#include <winuser.h>using namespace std;LRESULT CALLBACK LowLevelKeyboardProc(int nCode,WPARAM wParam,LPARAM lParam){ KBDLLHOOKSTRUC...转载 2014-11-28 18:53:21 · 1113 阅读 · 0 评论 -
c语言之strchr函数
原型:char *strrchr(const char *str,char c);找一个字符c在另一个字符串str中末次出现的位置(也就是从str的右侧开始查找字符c首次出现的位置),并返回从字符串中的这个位置起,一直到字符串结束的所有字符串。如果未能找到这个字符,那么函数返回NULL。 最后欢迎大家访问我的个人网站: 1024s...转载 2014-11-22 13:19:52 · 1048 阅读 · 0 评论 -
fstream::good
if(a.fail())if(!a.good())if(!a)(1) fstream::failtrue if either the badbit or the failbit is setbool fail() const{ return (this->rdstate() & (badbit | failbit)) != 0; }(2) fstre...转载 2014-11-22 13:11:42 · 2265 阅读 · 1 评论 -
va_list解决c中变参问题
(1) va_list 是一个字符指针,可以理解为指向当前参数的一个指针,取参必须通过这个指针进行。(2)在调用参数表之前,应该定义一个 va_list 类型的变量 args;(3)然后通过va_start对 args 进行初始化,让它指向可变参数表里面的第一个参数,第一个参数是args 本身,第二个参数是在变参表前面紧挨着的一个变量;然后是获取参数,(4)调用va_arg,它的第一个...转载 2014-11-22 13:02:26 · 805 阅读 · 0 评论 -
printf("%x.yf",n)
其中x表示输出宽度,y表示输出精度,如果输出长度超过宽度就按实际长度输出,不够整数高位补0,小数低位补0.如%2.5f,分别输出0.326和0.236589其结果为0.36200和0.236589 最后欢迎大家访问我的个人网站: 1024s...转载 2014-11-22 13:15:57 · 1991 阅读 · 1 评论